diff --git a/README.md b/README.md
new file mode 100644
index 0000000..19fa232
--- /dev/null
+++ b/README.md
@@ -0,0 +1,125 @@
+This code is the author's implementation of the algorithm presented in:
+
+Carl Doersch, Abhinav Gupta, and Alexei A. Efros, "Mid Level Visual Element
+Discovery as Discriminative Mode Seeking" in NIPS 2013.
+
+The majority of the code was written by Carl Doersch (cdoersch at cs dot cmu dot edu),
+although there are major contributions from Saurabh Singh and some from others who
+are noted in the code.
+
+This is officially unsupported research code, but our goal is that this will be
+as useful as possible. You are encouraged to ask questions via e-mail,
+and strongly encouraged to give feedback if you find the code
+counter-intuitive. I plan to update this code as issues are discovered.
+
+General setup:
+
+0) This code is only designed to run on linux. It might run on a mac or other
+ unix system since it only uses unix commands, but it has not been tested.
+
+1) Install libsvm and edit the file 'myaddpath.m' so that it adds libsvm to the path.
+
+2) Check that you have the statistics toolbox. If you plan to use the inter-element
+ communication and are not running 64-bit linux, you need to copy the file
+ [MATLAB ROOT]/toolbox/stats/stats/private/linkagemex.(your extension)
+ onto the matlab path (e.g. in the directory containing this file). This is to
+ work around a bug I've experienced in Matlab's linkage implementation; if
+ you don't want to use the workaround, you can switch the call in findOverlapping3.m
+ from linkage2 to linkage.
+
+3) Edit the indoor67_main file with the path of your download of the indoor67 dataset
+ (there's directions in the file). If you want to use your own data, setdataset.m gives
+ instructions on how to do this.
+
+4) If you aren't running on 64-bit linux, go to the hog/ directory
+ and run 'mex features.cc'.
+
+5) [optional] If you want to measure coverage pixel-wise (the code doesn't by default), compile
+ the code in the clipper directory--i.e. cd into the directory and run
+ "mex greedySelectDetrsCoveragemex.cpp clipper.hpp clipper.cpp"
+
+6) Make the .matlab folder in your home directory read-only--i.e. 'chmod -R 555 ~/.matlab'.
+ The code may work without this, but by default matlab writes a toolbox cache file
+ to the home directory when it starts up. If many matlabs start at the same time,
+ they can corrupt this file and cause some matlab processes to error out. The dswork
+ code restarts the workers occasionally, which means the execution will get stuck if
+ matlab can no longer start properly.
+
+7) Run the clustering code in Matlab. The main script for the indoor67 experiment
+ is indoor67_main.m.
+
+Running the code on indoor67 should require about 8GB of RAM per machine. indoor67_main
+will attempt to estimate the number of jobs to run on each machine based on the RAM
+each machine has. The program also needs about 30GB of free disk space and about 300GB
+in the temporary local directories (that's total; it can be distributed across different
+machines). If you're not using local directories, then that 300GB will need to be on
+the shared filesystem.
+
+
+Parallelizing the code with dswork:
+
+This codebase uses heavily the dswork framework. The README in the dswork
+directory gives full documentation, but here's a tl;dr summary.
+
+dswork has two main features. (1) it establishes a mapping between
+some directory on the filesystem and the variable 'ds' in your
+workspace. Hence, you can call
+
+dssetout('/tmp');
+ds.mydirectory.myvariable=rand(100);
+dssave;
+
+This causes the variable ds.myvariable to be saved to '/tmp/ds/mydirectory/myvariable.mat'.
+dswork supports filesystem command analogous to unix, including dsmv, dsdelete,
+dssymlink (though this implementation is incomplete), and dscd. To make the syntax
+as concise as possible, the format that things are saved in depends on the variable
+suffix--thus far, the suffixes img and html and txt have special meanings.
+
+On top of this, dswork supports some basic distributed processing features, including
+multiple MATLAB's on one machine, and multiple matlabs on different machines. For these
+to work, the directory where dswork saves its files needs to be shared among all machines
+you are using.
+
+At a high level, dsmapredopen() sets up a pool of workers that are essentially stateless.
+Using dsrundistributed() or dsmapreduce() will assign work to each worker, allows the
+workers to load data from the shared storage, and tracks the variables that
+get written. Additionally, dsmapreduce() supports mapreduce-like communication between
+the workers that does not go through the shared storage. This instead uses ssh to
+share data. This is important because, if you share all your data using an nfs-share
+of a disk on a single machine (as I did), I/O will likely become a bottleneck for the
+main element mining loop. Sharing data directly between machines alleviates this
+issue. To use this, the only setup required should be to give dswork a local directory
+where it can save temporary files on each machine, via the dssetlocaldir() funciton.
+
+
+Running multiple matlab's locally should not require any additional setup, but running
+distributed will require a machine that supports qsub. All of the experiments
+for this project were performed using Starcluster on EC2, which sets up an
+OGS cluster with data shared over nfs. See dsmapredopen for instructions on
+starting the distributed session.
+
+
+So you want to understand the code...
+
+My coding style is developed around rapid prototyping, and is probably different from
+what you're used to. Here's a few patterns that I tend to use.
+
+1) I generally use parallel arrays where other programmers would use arrays of structs or
+ arrays of objects. This is the case because I often need quick access to all values of a single
+ field. Matlab's struct arrays support this, but it is extremely inefficient.
+ The distributeby/invertdistributeby have become a sort of swiss army knife for handling
+ parallel arrays in my code. You should memorize what distributeby does.
+
+2) To ease dealing with parallel arrays, the effstr... commands are designed to deal
+ with a struct holding multiple parallel arrays (effstr means 'efficient replacement
+ for matlab struct arrays'). The motivation is that I can add temporary data to an
+ object and keep track of it alongside those objects, all with minimal modification
+ of the code.
+
+3) If I have a collection of n bounding boxes, they will be stored in an n-by-8 array with
+ the following column order: [x1 y1 x2 y2 detection_score detector_id image_id flip].
+ x- and y- coordinates are in terms of pixels *in the space returned by getimg*. flipped
+ detections have flip=1, but are still in terms of the coordinates of the un-flipped image.
+ These are used so frequently in the code that this format is used without comment; you
+ should memorize the order.
+
diff --git a/RGB2Lab.m b/RGB2Lab.m
new file mode 100755
index 0000000..25692fe
--- /dev/null
+++ b/RGB2Lab.m
@@ -0,0 +1,69 @@
+function [L,a,b] = RGB2Lab(color_image)
+% function [L, a, b] = RGB2Lab(R, G, B)
+% RGB2Lab takes matrices corresponding to Red, Green, and Blue, and
+% transforms them into CIELab. This transform is based on ITU-R
+% Recommendation BT.709 using the D65 white point reference.
+% The error in transforming RGB -> Lab -> RGB is approximately
+% 10^-5. RGB values can be either between 0 and 1 or between 0 and 255.
+% By Mark Ruzon from C code by Yossi Rubner, 23 September 1997.
+% Updated for MATLAB 5 28 January 1998.
+
+% commented out grayscale case
+% if (nargin == 1)
+% B = double(R(:,:,3));
+% G = double(R(:,:,2));
+% R = double(R(:,:,1));
+% end
+
+% commented out error checking, jhhays
+% if ((max(max(R)) > 1.0) | (max(max(G)) > 1.0) | (max(max(B)) > 1.0))
+% R = R/255;
+% G = G/255;
+% B = B/255;
+% end
+
+M = size(color_image,1);
+N = size(color_image,2);
+s = M*N;
+
+% Set a threshold
+T = 0.008856;
+
+RGB = [reshape(color_image(:,:,1),1,s); ...
+ reshape(color_image(:,:,2),1,s); ...
+ reshape(color_image(:,:,3),1,s)];
+
+% RGB to XYZ
+MAT = [0.412453 0.357580 0.180423;
+ 0.212671 0.715160 0.072169;
+ 0.019334 0.119193 0.950227];
+XYZ = MAT * RGB;
+
+X = XYZ(1,:) / 0.950456;
+Y = XYZ(2,:);
+Z = XYZ(3,:) / 1.088754;
+
+XT = X > T;
+YT = Y > T;
+ZT = Z > T;
+
+fX = XT .* X.^(1/3) + (~XT) .* (7.787 .* X + 16/116);
+
+% Compute L
+Y3 = Y.^(1/3);
+fY = YT .* Y3 + (~YT) .* (7.787 .* Y + 16/116);
+L = YT .* (116 * Y3 - 16.0) + (~YT) .* (903.3 * Y);
+
+fZ = ZT .* Z.^(1/3) + (~ZT) .* (7.787 .* Z + 16/116);
+
+% Compute a and b
+a = 500 * (fX - fY);
+b = 200 * (fY - fZ);
+
+L = reshape(L, M, N);
+a = reshape(a, M, N);
+b = reshape(b, M, N);
+
+if ((nargout == 1) | (nargout == 0))
+ L = cat(3,L,a,b);
+end
diff --git a/TestImages.txt b/TestImages.txt
new file mode 100755
index 0000000..77c7d4f
--- /dev/null
+++ b/TestImages.txt
@@ -0,0 +1,1340 @@
+kitchen/int474.jpg
+operating_room/operating_room_31_03_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0075.jpg
+videostore/videoclub_05_14_flickr.jpg
+poolinside/piscine_interieureee.jpg
+videostore/blockbuster_08_10_flickr.jpg
+poolinside/piscina_cubierta_07_19_altavista.jpg
+mall/mall26.jpg
+kindergarden/toddler.jpg
+buffet/Buffet_1.jpg
+hospitalroom/IMG_1482.jpg
+library/scotland_library.jpg
+inside_bus/inside_bus_093.jpg
+bar/bar_0382.jpg
+kindergarden/McMil_PicImg00011.jpg
+dentaloffice/dentista_oficina_01_02_flickr.jpg
+office/img_0013.jpg
+videostore/3_1interior1.jpg
+buffet/Buffet_Set_Up_gif.jpg
+computerroom/SALLE_ORDINATEUR_NDC.jpg
+grocerystore/800px_Rewe_supermarkt.jpg
+cloister/cloister2_wc_gfdl.jpg
+concert_hall/e8708arial.jpg
+operating_room/operating_room_24_02_altavista.jpg
+jewelleryshop/pandora_jewelry_store3_25_.jpg
+laundromat/interior010.jpg
+warehouse/warehouse_0398.jpg
+gym/gimnasio_47_20_altavista.jpg
+lobby/RenaissanceHotelAmsterdam_lobby.jpg
+meeting_room/conferencerm2_gif.jpg
+garage/IMG_0130.jpg
+inside_bus/inside_bus_079.jpg
+inside_subway/metropolitana_46_08_flickr.jpg
+mall/room204.jpg
+buffet/Holiday_Buffet_3.jpg
+library/JPB_Library.jpg
+restaurant/restaurante_24_20_altavista.jpg
+inside_subway/inside_subway_0006.jpg
+videostore/videoclub_01_24_flickr.jpg
+inside_bus/inside_bus_065.jpg
+children_room/OR_03_06_1002_56_l.jpg
+grocerystore/supermarkt055.jpg
+jewelleryshop/pamodificada_c_42_.jpg
+mall/ins46.jpg
+corridor/londres_023.jpg
+hairsalon/1cb88b407105e7f93511d544d9b7_1_3.jpg
+bookstore/Libreria_25_04_altavista.jpg
+dentaloffice/302406458_d635d6851e.jpg
+office/homeoff008.jpg
+concert_hall/33_e_498.jpg
+movietheater/816105903_94823d06a7_1__13.jpg
+hairsalon/coiffeur0636yp5.jpg
+elevator/elevator_google_0057.jpg
+restaurant/room106.jpg
+stairscase/AT_04_04_2000_26_l.jpg
+artstudio/taller_de_arte_03_03_altavista.jpg
+elevator/elevator_google_0099.jpg
+hairsalon/HS_partners.jpg
+office/homeoff007.jpg
+children_room/kids2_46_.jpg
+grocerystore/2fgr_supermarkt.jpg
+bathroom/room311.jpg
+gameroom/salle_de_jeux_07_19_altavista.jpg
+locker_room/locker_room_google_0125.jpg
+lobby/Cascades_lobby_sized.jpg
+nursery/modern_fish.jpg
+waitingroom/Waiting_Room093.jpg
+hairsalon/salon2678.jpg
+winecellar/cave_vin_21_13_altavista.jpg
+locker_room/locker_room_google_0196.jpg
+meeting_room/conf12.jpg
+nursery/image001.jpg
+florist/scai_fev_07_9.jpg
+closet/closet4.jpg
+hospitalroom/blueberry_hill_blog_5_4.jpg
+inside_bus/inside_bus_001.jpg
+winecellar/cave_vin_31_17_altavista.jpg
+library/librairie_16.jpg
+jewelleryshop/joyeria_24_04_altavista.jpg
+clothingstore/boutique777.jpg
+grocerystore/idd_supermarche.jpg
+inside_bus/inside_bus_083.jpg
+pantry/pantry_85_24_flickr.jpg
+bar/bar_0564.jpg
+florist/c04652600522c7ad139144ca0e2b_2_4.jpg
+prisoncell/jail1.jpg
+shoeshop/lake_garda_shopping_shoe_shop.jpg
+florist/florist_38_20_altavista.jpg
+meeting_room/conf26.jpg
+museum/museo_32_10_flickr.jpg
+clothingstore/MashStorecopy.jpg
+fastfood_restaurant/Carl_s_Jr_Green_Burrito_counter_in_SSF.jpg
+auditorium/flunoauditorium5_1__54.jpg
+meeting_room/113_bis_meeting_room.jpg
+fastfood_restaurant/DSC06236.jpg
+subway/subway_0268.jpg
+classroom/american_history_classroom.jpg
+kitchen/int396.jpg
+meeting_room/Tuinh_Int_01.jpg
+videostore/come_in.jpg
+hairsalon/thumb.jpg
+kitchen/indoor_0460.jpg
+laboratorywet/peterfeinhood.jpg
+deli/deli_120_05_flickr.jpg
+operating_room/operating_room_05_16_altavista.jpg
+tv_studio/studio02_lg_100_.jpg
+grocerystore/800px_SuperstoreWinkler3.jpg
+inside_subway/inside_subway_0337.jpg
+classroom/90468092_47c4b7f04d.jpg
+corridor/img_7677.jpg
+prisoncell/jail_cell_3.jpg
+auditorium/locaux_amphi_1_1__156.jpg
+kindergarden/preschool23.jpg
+closet/PeterCloset1edit.jpg
+restaurant/restau_11.jpg
+pantry/pantry_26_07_flickr.jpg
+bedroom/indoor_0405.jpg
+clothingstore/kleidung600.jpg
+fastfood_restaurant/p374062_Fajardo_El_Pollo_Tropical.jpg
+corridor/c16.jpg
+warehouse/warehouse_0382.jpg
+kindergarden/PreschoolClassroom2.jpg
+fastfood_restaurant/cam2_big.jpg
+bookstore/Lehmann_Buchhandlung_neu.jpg
+garage/IMG_0778.jpg
+children_room/100_3520_5_.jpg
+garage/mso1011_ShelvesBike_aft1_w609.jpg
+bowling/bowling_0071.jpg
+computerroom/_7BB05260_2CB9_464F_8403_ABFA52061E3E_.jpg
+jewelleryshop/joyeria21.jpg
+concert_hall/CH_intro.jpg
+dentaloffice/dentista_06_15_altavista.jpg
+livingroom/n457042.jpg
+dining_room/dining012.jpg
+office/webP1010001.jpg
+buffet/411053258_31173c5bea.jpg
+elevator/elevator_google_0064.jpg
+gameroom/sala_de_juegos_03_06_altavista.jpg
+gym/1156_3.jpg
+jewelleryshop/joyeria1.jpg
+livingroom/at_01_5a_1604_05_l.jpg
+cloister/oman_cloister.jpg
+elevator/elevator_google_0070.jpg
+trainstation/estacion_de_ferrocarriles_40_03_altavista.jpg
+bedroom/indoor_0154.jpg
+corridor/room113.jpg
+videostore/blockbuster_28_11_flickr.jpg
+mall/800px_Ueno_station_shopping_mall.jpg
+airport_inside/airport_inside_0389.jpg
+museum/museo_158_06_flickr.jpg
+inside_subway/inside_subway_0364.jpg
+locker_room/locker_room_google_0147.jpg
+poolinside/0310_piscines_10.jpg
+corridor/n457059.jpg
+concert_hall/Essen_Philharmonie_594.jpg
+dentaloffice/dentaire_12_09_flickr.jpg
+movietheater/movietheater_google_0036.jpg
+inside_subway/inside_subway_0110.jpg
+laundromat/maschine_gross.jpg
+library/bibliotheksaq.jpg
+laundromat/how_to_organize_a_laundry_room_1.jpg
+kindergarden/ClassroomLarge_gif.jpg
+children_room/img_3971_25_.jpg
+deli/deli_05_17_yahoo.jpg
+bookstore/bookstore_01_09_flickr.jpg
+kitchen/indoor_0250.jpg
+artstudio/artist_studio_50_13_altavista.jpg
+bookstore/bookstore_25_17_flickr.jpg
+bedroom/room33.jpg
+library/bibliotheque_400px.jpg
+movietheater/movietheater_google_0028.jpg
+church_inside/Westminster_Presbyterian_Church_Interior.jpg
+inside_subway/inside_subway_0061.jpg
+office/homeoff009.jpg
+artstudio/art_painting_studio_30_13_altavista.jpg
+bedroom/b28.jpg
+deli/deli_03_03_altavista.jpg
+museum/museum_36_07_altavista.jpg
+hospitalroom/DSC_0035.jpg
+library/Library_Pictures_3_.jpg
+laundromat/VA_02_01_6305_27_l.jpg
+livingroom/room408.jpg
+bowling/bowling_0105.jpg
+inside_bus/inside_bus_058.jpg
+meeting_room/c1.jpg
+prisoncell/prison_cell_22_18_altavista.jpg
+pantry/pantry_144_18_flickr.jpg
+toystore/spider_knife_low.jpg
+lobby/lobby23.jpg
+pantry/pantry_87_04_flickr.jpg
+toystore/toys_store_23_20_altavista.jpg
+mall/TheMallEngland.jpg
+office/indoor_0148.jpg
+gameroom/GameRoom45.jpg
+operating_room/surgery_room_16_16_altavista.jpg
+gym/uploads_images_photos_images_fullsize_gym.jpg
+lobby/recibidor2.jpg
+tv_studio/tvseriouscam2_540x404_119_.jpg
+kitchen/indoor_0464.jpg
+closet/banner2.jpg
+bathroom/img_1115.jpg
+toystore/tienda1.jpg
+church_inside/metropolitana_123_11_flickr.jpg
+fastfood_restaurant/connies_gif.jpg
+kitchen/indoor_0439.jpg
+bedroom/indoor_0332.jpg
+trainstation/estacion_de_ferrocarriles_05_08_altavista.jpg
+jewelleryshop/us1_54_.jpg
+movietheater/movietheater_google_0050.jpg
+church_inside/metropolitana_42_03_flickr.jpg
+operating_room/surgery_room_15_08_altavista.jpg
+airport_inside/airport_inside_0140.jpg
+elevator/elevator_google_0098.jpg
+hairsalon/salon03.jpg
+movietheater/la_salle_1__52.jpg
+trainstation/estacion_de_ferrocarriles_19_16_altavista.jpg
+bowling/bowling_0117.jpg
+casino/casino_0390.jpg
+elevator/elevator_google_0049.jpg
+locker_room/locker_room_google_0047.jpg
+bedroom/indoor_0401.jpg
+library/bibliotheque_photo.jpg
+clothingstore/boutique_02_g.jpg
+computerroom/laboratoire_informatique_bibliotheque.jpg
+children_room/playroom11_55_.jpg
+stairscase/S25.jpg
+tv_studio/tv_studio_1b_70_.jpg
+bar/bar_0308.jpg
+subway/subway_0496.jpg
+bakery/boulangerie_10_08_altavista.jpg
+bakery/new_bakery_12_12_altavista.jpg
+bowling/bowling_0085.jpg
+garage/Garage77.jpg
+deli/deli_09_06_yahoo.jpg
+lobby/rectorate_lobby.jpg
+pantry/pantry_29_19_flickr.jpg
+pantry/larder.jpg
+dentaloffice/dentista_124_14_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0012.jpg
+winecellar/wine_cellar_24_03_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0088.jpg
+videostore/jobeth2.jpg
+dentaloffice/dental_office_05_02_altavista.jpg
+livingroom/room140.jpg
+deli/deli_15_19_altavista.jpg
+fastfood_restaurant/866_camilles_3_adamo_standalone_prod_affiliate_25.jpg
+warehouse/warehouse_0295.jpg
+bakery/best_bakery_01_17_altavista.jpg
+prisoncell/prison_cell_01_20_flickr.jpg
+mall/p312066_PATIO_OLMOS_SHOPPING_CENTER.jpg
+bathroom/b9.jpg
+greenhouse/Greenhouse632.jpg
+greenhouse/hortela_nas_estufas_2.jpg
+toystore/toys_store_35_03_altavista.jpg
+warehouse/warehouse_0483.jpg
+meeting_room/smallroom2W625.jpg
+restaurant/pk_cella_bistro_1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0096.jpg
+airport_inside/airport_inside_0425.jpg
+corridor/n457056.jpg
+meeting_room/conference5.jpg
+movietheater/3_cin_1_1__11.jpg
+dentaloffice/dental_office_01_08_altavista.jpg
+laundromat/Waschsalon_05.jpg
+nursery/baby_room.jpg
+auditorium/the_auditorium_the_speakers_table_big_2104194540_1__73.jpg
+gym/gimnasio_56_19_flickr.jpg
+studiomusic/CzaplaMusicStudio_1.jpg
+library/ins20.jpg
+bar/bar_0349.jpg
+gym/imgP2090065.jpg
+florist/callas_floristeria.jpg
+bookstore/PublicP131C_L.jpg
+movietheater/cine0_1__43.jpg
+grocerystore/store_400.jpg
+livingroom/indoor_0483.jpg
+hospitalroom/Afghan_Hospital_Room2_sized.jpg
+grocerystore/moody_grocery_isle.jpg
+pantry/WH_Pantry_WI.jpg
+movietheater/petit_melies_1__56.jpg
+dentaloffice/dentista_92_14_flickr.jpg
+studiomusic/control5g.jpg
+bakery/best_bakery_11_14_altavista.jpg
+buffet/food_large_dessert.jpg
+garage/Garage3.jpg
+restaurant_kitchen/restaurant_kitchen_google_0081.jpg
+studiomusic/studio_overall.jpg
+locker_room/locker_room_google_0077.jpg
+subway/subway_0369.jpg
+livingroom/roomscan9.jpg
+bowling/bowling_0025.jpg
+children_room/VR_06_01_1001_06_l.jpg
+shoeshop/taller11.jpg
+stairscase/HO_06_04_4000_07_l.jpg
+bakery/panaderia_39_02_altavista.jpg
+florist/MVC_107S.jpg
+kitchen/indoor_0468.jpg
+bookstore/Librairie_07_08_altavista.jpg
+greenhouse/greenhouse203.jpg
+museum/museum_61_18_flickr.jpg
+nursery/nursery_rhymes_wall_mural_main.jpg
+museum/museum_20_09_altavista.jpg
+bar/bar_0135.jpg
+subway/subway_0014.jpg
+bathroom/pasadena_IMG_0153.jpg
+bedroom/n190068.jpg
+cloister/Cloister_of_the_monastery_Unser_Lieben_Frauen_Magdeburg.jpg
+prisoncell/prison_cell_05_11_altavista.jpg
+garage/InsideGarDoor.jpg
+gym/Weight_Room.jpg
+hairsalon/home_cover_01.jpg
+prisoncell/prison_cell_16_03_altavista.jpg
+bedroom/roomscan37.jpg
+clothingstore/images_bookstore_main1.jpg
+cloister/DurhamCloister.jpg
+bathroom/img_0646.jpg
+inside_bus/inside_bus_025.jpg
+airport_inside/airport_inside_0352.jpg
+livingroom/indoor_0359.jpg
+lobby/LV_04_01_0002_14_l.jpg
+grocerystore/IMG_3103.jpg
+jewelleryshop/fine_diamond_jeweler_35_.jpg
+subway/subway_0420.jpg
+bakery/panaderia_29_19_yahoo.jpg
+prisoncell/prison_cell_03_11_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0031.jpg
+casino/casino_0323.jpg
+library/Off_Library.jpg
+trainstation/train_station_03_14_altavista.jpg
+bookstore/bookstore_10_23_flickr.jpg
+inside_bus/inside_bus_042.jpg
+locker_room/locker_room_google_0014.jpg
+concert_hall/g_vigoenfotos_1961d.jpg
+hospitalroom/DSC02829.jpg
+inside_subway/inside_subway_0370.jpg
+dentaloffice/dentista_09_24_flickr.jpg
+restaurant/restaurante_157_21_flickr.jpg
+videostore/lifeblog13122007004.jpg
+studiomusic/1175259599.jpg
+waitingroom/Studio.jpg
+jewelleryshop/joyeria_08_18_flickr.jpg
+winecellar/wine_cellar_33_15_altavista.jpg
+church_inside/metropolitana_116_22_flickr.jpg
+movietheater/dsc00021_1__50.jpg
+elevator/elevator_google_0044.jpg
+locker_room/locker_room_google_0138.jpg
+shoeshop/bottom.jpg
+artstudio/painters_studio_43_09_altavista.jpg
+elevator/elevator_google_0004.jpg
+hairsalon/shop.jpg
+inside_bus/inside_bus_063.jpg
+bookstore/bookstore_32_10_flickr.jpg
+meeting_room/n457098.jpg
+locker_room/locker_room_google_0162.jpg
+airport_inside/airport_inside_0507.jpg
+dining_room/dining046.jpg
+gym/gimnasio_09_11_altavista.jpg
+hairsalon/3_bains_du_marais.jpg
+classroom/salle_de_classe67.jpg
+laundromat/laverie092007_011.jpg
+greenhouse/DSC00024.jpg
+classroom/salle1950bg.jpg
+kindergarden/pre_school_015_137130855_std.jpg
+laundromat/lavanderia_74_14_flickr.jpg
+waitingroom/attente.jpg
+clothingstore/boutique_header5.jpg
+airport_inside/airport_inside_0165.jpg
+kindergarden/pre1.jpg
+toystore/jugueteria_14_06_flickr.jpg
+airport_inside/airport_inside_0321.jpg
+dining_room/casa2.jpg
+grocerystore/bstone13.jpg
+laboratorywet/wet_lab_37_19_altavista.jpg
+dining_room/dining033.jpg
+closet/WC_Tower.jpg
+kitchen/indoor_0251.jpg
+computerroom/computerR.jpg
+florist/floristeria2.jpg
+inside_bus/inside_bus_002.jpg
+bedroom/indoor_0069.jpg
+laundromat/lavanderia_45_07_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0101.jpg
+studiomusic/lateraltecnico.jpg
+jewelleryshop/2641107.jpg
+inside_bus/inside_bus_010.jpg
+lobby/Lobbywithstatue.jpg
+pantry/13.jpg
+pantry/pantry_16_22_flickr.jpg
+movietheater/cinema_1__48.jpg
+poolinside/t_pool.jpg
+dining_room/dining016.jpg
+gameroom/LW3DHc.jpg
+buffet/Wedding_Food_3_edited.jpg
+prisoncell/27jail_slide01.jpg
+winecellar/cellar_design_svcs.jpg
+classroom/classroom3.jpg
+laboratorywet/wet_lab_08_04_altavista.jpg
+toystore/toys_store_41_20_altavista.jpg
+bookstore/bookstore_16_04_altavista.jpg
+operating_room/surgery_room_07_08_altavista.jpg
+bar/bar_0491.jpg
+artstudio/estudio_de_pintor_06_02_altavista.jpg
+lobby/bpi_lobby1.jpg
+airport_inside/airport_inside_0306.jpg
+florist/floristeria61.jpg
+restaurant_kitchen/restaurant_kitchen_google_0042.jpg
+stairscase/N190075.jpg
+auditorium/auditorium_400_1__93.jpg
+grocerystore/orlando.jpg
+inside_bus/inside_bus_020.jpg
+office/room477.jpg
+office/office21.jpg
+restaurant_kitchen/restaurant_kitchen_google_0040.jpg
+waitingroom/waiting_room_34_14_altavista.jpg
+deli/deli_34_21_flickr.jpg
+buffet/url.jpg
+deli/deli_counter.jpg
+inside_subway/inside_subway_0316.jpg
+children_room/VR_06_02_2000_59_l.jpg
+kitchen/aa014484.jpg
+warehouse/warehouse_0256.jpg
+restaurant/restaurant_10_14_altavista.jpg
+prisoncell/prison_cell_01_16_altavista.jpg
+church_inside/pantry_120_08_flickr.jpg
+inside_bus/inside_bus_021.jpg
+museum/museum_128_24_flickr.jpg
+casino/casino_0138.jpg
+cloister/Claustro_Plasencia.jpg
+jewelleryshop/PYC_039_PRY_PRY_146-153_014_i.jpg
+children_room/VA_03_00_0003_42_l.jpg
+laundromat/West_Equip.jpg
+shoeshop/zapateria_04_11_flickr.jpg
+warehouse/warehouse_0255.jpg
+buffet/114811570_481eefa09f.jpg
+operating_room/surgery_room_34_16_altavista.jpg
+poolinside/lidopool03.jpg
+hairsalon/Salon_poste_coiffure2_grand.jpg
+dining_room/easyst036.jpg
+winecellar/bodega_11_23_flickr.jpg
+gameroom/AT_98_2_1623_31_l.jpg
+tv_studio/438771324_4e003a475b_24_.jpg
+operating_room/surgery_room_49_20_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0070.jpg
+airport_inside/airport_inside_0290.jpg
+nursery/2007_05_30_nursery_flickrfinds7.jpg
+shoeshop/Chaussures.jpg
+videostore/videoteca_13_10_altavista.jpg
+elevator/elevator_google_0088.jpg
+elevator/elevator_google_0022.jpg
+greenhouse/47_Invernadero_1.jpg
+classroom/Im423_5.jpg
+locker_room/locker_room_google_0246.jpg
+movietheater/movietheater_google_0046.jpg
+gameroom/BR_05_01_1000_10_l.jpg
+tv_studio/thumbnail_studiocameras_norm_106_.jpg
+inside_bus/inside_bus_030.jpg
+winecellar/cave.jpg
+jewelleryshop/vilanova_i_la_geltru_joieria_maestre.jpg
+toystore/jugueteria_16_16_flickr.jpg
+bedroom/indoor_0177.jpg
+jewelleryshop/r.jpg
+movietheater/movietheater_google_0029.jpg
+locker_room/locker_room_google_0168.jpg
+shoeshop/zapateria_08_09_flickr.jpg
+auditorium/auditorium_465x309_1__127.jpg
+bedroom/indoor_0418.jpg
+concert_hall/09260032.jpg
+warehouse/warehouse_0139.jpg
+inside_bus/inside_bus_031.jpg
+children_room/br3playroom_10_.jpg
+restaurant_kitchen/restaurant_kitchen_google_0055.jpg
+clothingstore/shop10.jpg
+bathroom/indoor_0309.jpg
+pantry/pantry_104_14_flickr.jpg
+subway/subway_0137.jpg
+hospitalroom/brady_hospital.jpg
+dining_room/homeoff002.jpg
+trainstation/estacion_de_ferrocarriles_29_04_altavista.jpg
+poolinside/059088D.jpg
+waitingroom/salle_attente1.jpg
+airport_inside/airport_inside_0428.jpg
+inside_subway/inside_subway_0052.jpg
+hospitalroom/HospitalRoom2_big.jpg
+laundromat/VA_02_04_7112_19_l.jpg
+winecellar/bodega_114_20_flickr.jpg
+dentaloffice/dentaire_41_16_altavista.jpg
+stairscase/int221.jpg
+church_inside/iglesia2.jpg
+library/library04.jpg
+poolinside/1996_Pool.jpg
+artstudio/art_painting_studio_10_19_altavista.jpg
+fastfood_restaurant/Img_2369a.jpg
+hairsalon/salon44.jpg
+kindergarden/kindergarten_ansicht1.jpg
+artstudio/art_painting_studio_09_10_altavista.jpg
+kindergarden/Classroom_pic_8_23_07_001.jpg
+dining_room/easyst042.jpg
+casino/casino_0416.jpg
+closet/152t.jpg
+hospitalroom/hospital_room_1_second_foto.jpg
+nursery/africa_nursery.jpg
+subway/subway_0135.jpg
+artstudio/painters_studio_08_12_altavista.jpg
+inside_bus/inside_bus_077.jpg
+elevator/elevator_google_0101.jpg
+trainstation/gare_32_16_flickr.jpg
+bowling/bowling_0026.jpg
+concert_hall/PetronasPhilharmonicConcertHall.jpg
+kitchen/kitchen003.jpg
+studiomusic/sala6.jpg
+florist/16943_7438_5.jpg
+airport_inside/airport_inside_0275.jpg
+concert_hall/concertHall.jpg
+dentaloffice/dentista_112_04_flickr.jpg
+mall/Wafi_RamRaid_Hussein_GNreader.jpg
+toystore/toys_store_26_12_altavista.jpg
+laboratorywet/wet_lab_35_12_altavista.jpg
+movietheater/salle2_1__67.jpg
+movietheater/slide8_74.jpg
+garage/garage_inside_desk.jpg
+meeting_room/n457017.jpg
+subway/subway_0339.jpg
+subway/underground_57_11_flickr.jpg
+videostore/videotheque_02_07_flickr.jpg
+computerroom/comproom3lrg.jpg
+church_inside/metropolitana_147_01_flickr.jpg
+nursery/cool_nursery.jpg
+laundromat/lavanderia_110_22_flickr.jpg
+computerroom/TrainingRoom_2.jpg
+concert_hall/GD4777628_4112.jpg
+classroom/classroom_front.jpg
+prisoncell/jail_cells_3_big.jpg
+videostore/videoclub_03_02_flickr.jpg
+meeting_room/salledereunion1.jpg
+bar/bar_0330.jpg
+church_inside/Iglesia_del_Carmen.jpg
+trainstation/gare_101_12_flickr.jpg
+mall/galleria1.jpg
+concert_hall/Flagey_Auditorium.jpg
+grocerystore/store_counter.jpg
+bowling/bowling_0161.jpg
+concert_hall/rh_photo02.jpg
+livingroom/dsc3101.jpg
+warehouse/warehouse_0110.jpg
+bathroom/room30.jpg
+nursery/baby_room1.jpg
+buffet/285264036_2976da5ec8.jpg
+laboratorywet/wet_lab_22_15_altavista.jpg
+poolinside/piscina_cubierta_09_01_altavista.jpg
+cloister/808076.jpg
+church_inside/buda_eglise_1.jpg
+dentaloffice/dental_office_15_11_altavista.jpg
+inside_bus/inside_bus_102.jpg
+restaurant/witches_bistro_in_benidorm_large04.jpg
+auditorium/auditorium_2__122.jpg
+kindergarden/DSC000562.jpg
+children_room/playroom15_57_.jpg
+locker_room/locker_room_google_0039.jpg
+auditorium/3195_auditorium_1__8.jpg
+laundromat/lavanderia_05_14_flickr.jpg
+meeting_room/conf16.jpg
+poolinside/pool_inside_31_06_altavista.jpg
+prisoncell/2226542443_5481b41c51.jpg
+winecellar/wine_cellar_49_05_altavista.jpg
+office/int594.jpg
+lobby/AppLogicbooker_004.jpg
+videostore/vanguard.jpg
+bowling/bowling_0195.jpg
+fastfood_restaurant/DSC00477.jpg
+buffet/buffet-food.jpg
+casino/casino_0183.jpg
+corridor/accessories24.jpg
+pantry/despensa_134_18_flickr.jpg
+closet/p3_a.jpg
+deli/deli_56_24_flickr.jpg
+airport_inside/airport_inside_0062.jpg
+closet/url_1.jpg
+bar/bar_0597.jpg
+inside_subway/inside_subway_0279.jpg
+mall/hillsdale_mall_4.jpg
+videostore/video_store_49_20_altavista.jpg
+pantry/WC_Pantry_Door.jpg
+toystore/jugueteria_21_11_flickr.jpg
+winecellar/cave_champagne_08_06_altavista.jpg
+classroom/classroom06.jpg
+museum/museo_133_19_flickr.jpg
+videostore/video_shop.jpg
+classroom/Classroom.jpg
+florist/anais480.jpg
+clothingstore/Loja_de_roupa_e_sapataria.jpg
+warehouse/warehouse_0437.jpg
+hairsalon/peluqueria01.jpg
+livingroom/l1.jpg
+subway/subway_0150.jpg
+casino/casino_0409.jpg
+casino/casino_0336.jpg
+library/shakespearebookshop.jpg
+movietheater/movietheater_google_0061.jpg
+auditorium/parsons_20auditorium_1__66.jpg
+greenhouse/site_estufa_04.jpg
+restaurant/interior.jpg
+dentaloffice/dentaire_13_14_altavista.jpg
+hairsalon/hair_salon_brisbane.jpg
+bedroom/indoor_0166.jpg
+inside_subway/inside_subway_0126.jpg
+bedroom/bed136.jpg
+dentaloffice/dentista_06_12_altavista.jpg
+corridor/IMG_1691.jpg
+clothingstore/dhd_boutique_2.jpg
+library/bibliothek_ParagraphContainerList_ParagraphContainer0_ParagraphList_0002_Image.jpg
+meeting_room/c14.jpg
+bowling/bowling_0046.jpg
+shoeshop/2200865379_9c78486bcd.jpg
+studiomusic/estudio43.jpg
+airport_inside/airport_inside_0095.jpg
+restaurant_kitchen/restaurant_kitchen_google_0098.jpg
+tv_studio/tv_studio3221_109_.jpg
+laundromat/laundromat122.jpg
+waitingroom/waiting_room_34_10_altavista.jpg
+lobby/lobby21.jpg
+kitchen/k2.jpg
+museum/museum_19_19_altavista.jpg
+pantry/pantry456781.jpg
+kitchen/dscf2952.jpg
+laboratorywet/laboratorio_quimica_17_11_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0068.jpg
+buffet/buffet95.jpg
+corridor/room497.jpg
+bowling/bowling_0113.jpg
+shoeshop/zapateria_11_23_flickr.jpg
+clothingstore/bookstore.jpg
+bedroom/room35.jpg
+gameroom/sala_de_juegos_24_14_altavista.jpg
+office/00_17.jpg
+closet/smallsp019.jpg
+shoeshop/zapateria11.jpg
+inside_subway/inside_subway_0179.jpg
+toystore/jugueteria_07_08_yahoo.jpg
+bar/bar_0125.jpg
+clothingstore/CIMG0506.jpg
+waitingroom/bookstore_sittingarea.jpg
+garage/8751_12.jpg
+children_room/playroom30_63_.jpg
+bar/bar_0353.jpg
+laboratorywet/wet_lab_28_11_altavista.jpg
+pantry/pantry_97_14_flickr.jpg
+tv_studio/tv_studio_13_08_altavista.jpg
+clothingstore/michis_boutique.jpg
+pantry/pantry_51_10_flickr.jpg
+inside_subway/inside_subway_0069.jpg
+kitchen/indoor_0438.jpg
+pantry/elfa_reach_in_pantry_thumb.jpg
+cloister/durham_cathedral_cloister_3_353x470.jpg
+toystore/286605441_d9919621ce.jpg
+winecellar/Wine_cellar.jpg
+pantry/despensa_05_08_flickr.jpg
+laundromat/VR_06_02_2000_89_l.jpg
+dentaloffice/IMG_0087_1_.jpg
+classroom/position_room.jpg
+laboratorywet/wet_lab_2.jpg
+hospitalroom/PICT8223.jpg
+nursery/Chambre_enfant.jpg
+bookstore/bookstore_19_16_altavista.jpg
+gym/gimnasio_98_10_flickr.jpg
+kindergarden/meeting_rug_windows_doors_large2.jpg
+hairsalon/img125712.jpg
+operating_room/operating_room_29_19_altavista.jpg
+casino/casino_0375.jpg
+office/homeoff004.jpg
+corridor/c13.jpg
+bookstore/Photo_Librairie_001_Small_.jpg
+greenhouse/greenhouselk2.jpg
+museum/museo_01_12_altavista.jpg
+concert_hall/6.jpg
+elevator/elevator_google_0018.jpg
+warehouse/warehouse_0412.jpg
+warehouse/warehouse_0189.jpg
+restaurant/restaurante_27_10_altavista.jpg
+waitingroom/105NC_New_Reception_area_on_7th_floor.jpg
+museum/museum_36_08_altavista.jpg
+locker_room/locker_room_google_0070.jpg
+toystore/url.jpg
+bakery/panaderia_06_14_yahoo.jpg
+museum/museo_32_13_flickr.jpg
+waitingroom/Waiting_Area2.jpg
+gym/HO_00_01_5186_23_l.jpg
+locker_room/locker_room_google_0012.jpg
+stairscase/AT_04_05_4901_42_l.jpg
+dentaloffice/dentista_74_09_flickr.jpg
+warehouse/warehouse_0058.jpg
+bathroom/room322.jpg
+casino/casino_0453.jpg
+bar/bar_0263.jpg
+corridor/int74.jpg
+trainstation/gare_116_03_flickr.jpg
+nursery/photo_baby_nursery1_062203.jpg
+children_room/083008_saturday_24__3_.jpg
+jewelleryshop/610x2_11_.jpg
+nursery/baby_nursery_decorating_ideas_8.jpg
+kindergarden/classroom02.jpg
+stairscase/N457076.jpg
+restaurant/restaurant_16_03_altavista.jpg
+videostore/VhsMachine.jpg
+airport_inside/airport_inside_0044.jpg
+casino/casino_0145.jpg
+office/n457048.jpg
+church_inside/2054074790031860892lbuUCO_ph.jpg
+stairscase/escalier7.jpg
+winecellar/cave_vin_48_06_altavista.jpg
+buffet/944.jpg
+garage/julian_garage.jpg
+inside_bus/inside_bus_055.jpg
+nursery/2006_09_21_nursery4.jpg
+shoeshop/2046shoes2.jpg
+livingroom/int123.jpg
+shoeshop/32814.jpg
+toystore/toys_store_23_02_altavista.jpg
+bedroom/b1.jpg
+laboratorywet/wet_lab_25_15_altavista.jpg
+poolinside/Schwimmbad_badestube.jpg
+greenhouse/greenhouse_l.jpg
+laboratorywet/laboratorio_quimica_03_04_altavista.jpg
+office/n457052.jpg
+casino/casino_0134.jpg
+poolinside/Branzez_new_bazen2a.jpg
+closet/Maple_Walk_in_Closet.jpg
+dining_room/d10.jpg
+buffet/417654380_efa8dabfda.jpg
+casino/casino_0367.jpg
+meeting_room/int864.jpg
+bathroom/bathroom2.jpg
+livingroom/06_salon_y_cocina.jpg
+bowling/bowling_0184.jpg
+toystore/jugueteria_16_09_flickr.jpg
+studiomusic/deep_studios_901.jpg
+casino/casino_0374.jpg
+clothingstore/r6yf3e33.jpg
+airport_inside/airport_inside_0568.jpg
+jewelleryshop/314097artemovilBig.jpg
+stairscase/AT_99_4_7098_27_l.jpg
+greenhouse/Pic_4748_33.jpg
+meeting_room/n457012.jpg
+museum/museum_43_05_altavista.jpg
+warehouse/warehouse_0027.jpg
+grocerystore/44l.jpg
+laboratorywet/lab_testing_i1.jpg
+museum/museo_158_08_flickr.jpg
+buffet/buffet_galleryfull.jpg
+inside_bus/inside_bus_084.jpg
+cloister/462681141_71f2f52863.jpg
+restaurant_kitchen/restaurant_kitchen_google_0004.jpg
+greenhouse/AMFWTOaa.jpg
+airport_inside/airport_inside_0088.jpg
+warehouse/warehouse_0291.jpg
+concert_hall/3673_Concert_Hall_interior_1_Nigel_Luckhurst_1.jpg
+kitchen/indoor_0514.jpg
+gameroom/GottliebCorner4.jpg
+hairsalon/salon_front.jpg
+subway/subway_0265.jpg
+grocerystore/main.jpg
+toystore/Spielzeug_168_24_flickr.jpg
+bowling/bowling_0150.jpg
+hairsalon/1117858298_3ddfab52d3.jpg
+meeting_room/ins28.jpg
+nursery/baby's_room.jpg.jpg
+operating_room/operating_room_24_11_altavista.jpg
+deli/deli_123_12_flickr.jpg
+gameroom/doc0003.jpg
+poolinside/piscina_cubierta_07_05_altavista.jpg
+bowling/bowling_0072.jpg
+buffet/buffet.jpg
+bookstore/bookstore_48_01_flickr.jpg
+artstudio/painters_studio_02_15_altavista.jpg
+fastfood_restaurant/Godfathers_Knoxville_1.jpg
+livingroom/indoor_0038.jpg
+studiomusic/frente3.jpg
+florist/floreria_05_02_flickr.jpg
+stairscase/D26.jpg
+gym/gimnasio_24_12_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0043.jpg
+subway/subway_0495.jpg
+trainstation/estacion_de_tren_07_13_altavista.jpg
+garage/3_CAR_GARAGE_1_2_25782147_std.jpg
+auditorium/auditorium_seats_1__98.jpg
+computerroom/computer.jpg
+mall/galleria.jpg
+tv_studio/837109_174933784a_m_28_.jpg
+bookstore/800px_Wil_Buchhandlung_3104.jpg
+dining_room/indoor_0054.jpg
+museum/museo_139_14_flickr.jpg
+meeting_room/c_salle26.jpg
+operating_room/surgery_room_03_18_altavista.jpg
+shoeshop/zapateria_08_05_flickr.jpg
+bowling/bowling_0127.jpg
+cloister/Claustro_de_Sant_Benet_de_Bages.jpg
+nursery/complete_baby_room_furnitures2.jpg
+office/homeoff012.jpg
+classroom/classroom10.jpg
+restaurant_kitchen/restaurant_kitchen_google_0032.jpg
+bookstore/bookstore_03_15_flickr.jpg
+trainstation/estacion_de_ferrocarriles_28_19_altavista.jpg
+computerroom/302496265_f7b9b7a91f.jpg
+museum/museo_16_20_flickr.jpg
+movietheater/2792925915_36557baec0_1__10.jpg
+tv_studio/tv2_111_.jpg
+bakery/boulangerie_15_05_altavista.jpg
+airport_inside/airport_inside_0470.jpg
+artstudio/artist_studio_50_02_altavista.jpg
+computerroom/Vaololoa_Computer_Room.jpg
+stairscase/N457078.jpg
+bakery/famous_bakery_05_12_altavista.jpg
+church_inside/metropolitana_69_04_flickr.jpg
+studiomusic/int285.jpg
+poolinside/room147.jpg
+computerroom/computer_room500px.jpg
+auditorium/salle_amphitheatre4_1__171.jpg
+grocerystore/feijen_1.jpg
+cloister/cloister_cc_redandgray.jpg
+fastfood_restaurant/quiznos1b.jpg
+office/homeoff003.jpg
+stairscase/int839.jpg
+concert_hall/russia_concert_hall1.jpg
+bakery/panaderia_01_03_yahoo.jpg
+deli/deli_165_16_flickr.jpg
+jewelleryshop/joyeria_01.jpg
+lobby/hotel_lobby_big.jpg
+tv_studio/studio1_101_.jpg
+bathroom/int17.jpg
+cloister/cloister_lg.jpg
+library/library.jpg
+laundromat/lavanderia_74_21_flickr.jpg
+office/IMG_1530.jpg
+trainstation/gare_163_18_flickr.jpg
+gym/1192_original_gym_photos_001.jpg
+locker_room/locker_room_google_0008.jpg
+kindergarden/Preschool_Class.jpg
+operating_room/operating_room_12_03_altavista.jpg
+children_room/playroom_261100837_std_29_.jpg
+trainstation/estacion_de_ferrocarriles_46_05_altavista.jpg
+tv_studio/plato_de_malaga_television_situada_en_el_parque_tecnologico_de_andalucia_3896_57_.jpg
+children_room/021108_spasticroomjpg_1_.jpg
+waitingroom/waiting_room_36_20_altavista.jpg
+bathroom/room268.jpg
+dining_room/d7.jpg
+florist/Floristeria002.jpg
+toystore/giocattolo_57_16_flickr.jpg
+deli/deli_02_03_altavista.jpg
+greenhouse/invernadero1112.jpg
+deli/deli_40_24_flickr.jpg
+laboratorywet/wet_lab_08_11_altavista.jpg
+elevator/elevator_google_0051.jpg
+bedroom/IMG_9810.jpg
+florist/1124747997193_600x600.jpg
+videostore/videotheque_02_02_flickr.jpg
+bathroom/dsc01582.jpg
+jewelleryshop/rlj_showroom_26_.jpg
+museum/museum_22_20_altavista.jpg
+operating_room/surgery_room_06_05_altavista.jpg
+bowling/bowling_0018.jpg
+concert_hall/2588262_5876a97acf.jpg
+bowling/bowling_0044.jpg
+corridor/couloir_sized.jpg
+kindergarden/Classroom04.jpg
+elevator/elevator_google_0030.jpg
+kitchen/indoor_0259.jpg
+laboratorywet/wet_lab_48_10_altavista.jpg
+operating_room/surgery_room_51_07_altavista.jpg
+jewelleryshop/jewelry_store_2_40_.jpg
+bookstore/librairie2.jpg
+classroom/classroom6.jpg
+restaurant/restaurant_18_15_altavista.jpg
+livingroom/living7.jpg
+museum/museum_120_07_flickr.jpg
+gameroom/AT_04_04_2000_36_l.jpg
+operating_room/operating_room_08_18_altavista.jpg
+grocerystore/grocery_store_empty_ezr.jpg
+livingroom/indoor_0158.jpg
+restaurant_kitchen/restaurant_kitchen_google_0028.jpg
+buffet/tsn_buffet_table.jpg
+warehouse/warehouse_0148.jpg
+gameroom/gameroom78.jpg
+bar/bar_0321.jpg
+mall/url.jpg
+corridor/hall135.jpg
+inside_subway/inside_subway_0068.jpg
+library/howland.jpg
+kindergarden/playroom01.jpg
+winecellar/wine_cellar_32_04_altavista.jpg
+inside_subway/inside_subway_0039.jpg
+deli/deli_23_18_flickr.jpg
+museum/museum_21_10_altavista.jpg
+cloister/Cloister_Jun04_DC4408sAR.jpg
+computerroom/Salle_informatique.jpg
+tv_studio/george_neta_studio_90_.jpg
+stairscase/room45.jpg
+lobby/lobby27.jpg
+nursery/nursery2.jpg
+mall/mall06.jpg
+garage/35228685_image052a.jpg
+bakery/panaderia_01_06_yahoo.jpg
+trainstation/estacion_de_ferrocarriles_38_16_altavista.jpg
+gym/gym_147_01_flickr.jpg
+movietheater/auditorium712_39.jpg
+casino/casino_0270.jpg
+cloister/cloister8.jpg
+bedroom/dsc_4440.jpg
+poolinside/piscina_cubierta_10_11_altavista.jpg
+computerroom/salle_informatique_hr.jpg
+meeting_room/int677.jpg
+church_inside/metropolitana_115_15_flickr.jpg
+grocerystore/Image023.jpg
+closet/St_Ann_s_Clothes_Closet.jpg
+restaurant_kitchen/restaurant_kitchen_google_0025.jpg
+bookstore/livres.jpg
+grocerystore/023_supermarkt.jpg
+winecellar/wine_cellar_21_02_altavista.jpg
+bathroom/IMG_9647.jpg
+children_room/playroom26_60_.jpg
+kindergarden/DSC000502.jpg
+prisoncell/Alcatraz_prison_cell.jpg
+inside_bus/inside_bus_057.jpg
+waitingroom/sala_de_espera_01_17_altavista.jpg
+mall/mall_of_the_emirates.jpg
+restaurant/restaurante_07_13_altavista.jpg
+fastfood_restaurant/DSC00478.jpg
+gameroom/gameroom98.jpg
+library/danielkimberlylibrarycl1.jpg
+toystore/jugueteria_21_01_flickr.jpg
+livingroom/indoor_0327.jpg
+toystore/Spielzeug_58_01_flickr.jpg
+church_inside/_wsb_534x461_Kirche_innen_2.jpg
+jewelleryshop/hols2008036.jpg
+poolinside/47220_pool_inside4.jpg
+children_room/cimg1971_11_.jpg
+garage/Garage678.jpg
+fastfood_restaurant/showcase_2_177.jpg
+laboratorywet/wet_lab_12_07_altavista.jpg
+bakery/bakery_07_20_yahoo.jpg
+hospitalroom/habitacion_hospital_01_18_altavista.jpg
+florist/florist_83_07_flickr.jpg
+prisoncell/Jail40.jpg
+office/office15.jpg
+deli/Superquinn_Deli.jpg
+museum/museo_138_15_flickr.jpg
+corridor/c20.jpg
+elevator/elevator_google_0093.jpg
+closet/closet34.jpg
+elevator/elevator_google_0094.jpg
+garage/garage89.jpg
+movietheater/salle_cinema_corte_1__63.jpg
+kitchen/100_2855.jpg
+videostore/blockbuster_22_08_flickr.jpg
+bar/bar_0020.jpg
+jewelleryshop/joyeria_163_02_flickr.jpg
+videostore/videoteca_38_04_altavista.jpg
+laboratorywet/wet_lab_05_10_altavista.jpg
+shoeshop/211519.jpg
+clothingstore/dd_streets3.jpg
+florist/floreria_03_20_flickr.jpg
+stairscase/int743.jpg
+closet/master_closet56.jpg
+livingroom/indoor_0466.jpg
+restaurant/restaurant_31_03_altavista.jpg
+bakery/new_bakery_02_08_altavista.jpg
+children_room/VR_06_02_2000_70_l.jpg
+grocerystore/Grocery_Store_2.jpg
+restaurant_kitchen/restaurant_kitchen_google_0089.jpg
+inside_bus/inside_bus_082.jpg
+gym/gimnasio_24_15_altavista.jpg
+studiomusic/22949091_692d02b8f1.jpg
+cloister/claustro53.jpg
+mall/mall48.jpg
+greenhouse/site_estufa_02.jpg
+laundromat/laverie0054.jpg
+greenhouse/finished_inside.jpg
+subway/subway_0167.jpg
+prisoncell/Carcel_Prision_Break.jpg
+concert_hall/EmersonConcertHall.jpg
+bakery/bakery_01_06_yahoo.jpg
+greenhouse/greenhouse2iu1.jpg
+florist/florist_85_16_flickr.jpg
+closet/N43m.jpg
+laundromat/paseacoastwash.jpg
+concert_hall/Concert_Hall_color.jpg
+office/img_0012.jpg
+stairscase/room44.jpg
+trainstation/estacion_de_ferrocarriles_37_12_altavista.jpg
+corridor/hall89.jpg
+fastfood_restaurant/buffet2.jpg
+trainstation/gare_161_05_flickr.jpg
+library/room215.jpg
+locker_room/locker_room_google_0075.jpg
+shoeshop/zapato_3.jpg
+deli/deli_34_06_altavista.jpg
+kindergarden/S5030019.jpg
+winecellar/wine_storage_35_15_altavista.jpg
+poolinside/photo_spa_buddhabarevian.jpg
+laboratorywet/laboratorio_quimica_07_02_altavista.jpg
+meeting_room/Salle_reunion2.jpg
+restaurant/restaurant_01_01_altavista.jpg
+dentaloffice/dentaloffice03.jpg
+hospitalroom/hospital_room_0.jpg
+kitchen/indoor_0300.jpg
+artstudio/art_painting_studio_05_14_altavista.jpg
+greenhouse/greenhouse_pics_019.jpg
+inside_subway/inside_subway_0264.jpg
+classroom/400px_Walton_High_School_New_Classroom.jpg
+fastfood_restaurant/fast_food_restaurant.jpg
+waitingroom/sigmund_freud_museum11.jpg
+restaurant_kitchen/restaurant_kitchen_google_0013.jpg
+dentaloffice/dentaire_11_02_flickr.jpg
+prisoncell/Jail_Cell_4.jpg
+bar/bar_0040.jpg
+museum/museo_149_24_flickr.jpg
+studiomusic/estudioB01.jpg
+cloister/2551810032_c75699b9dd.jpg
+corridor/corridor3.jpg
+bowling/bowling_0114.jpg
+poolinside/Pool_inside2_1.jpg
+tv_studio/muticamera_studio_set_93_.jpg
+kitchen/room7.jpg
+artstudio/artist_studio_50_15_altavista.jpg
+buffet/1092889351_618b8c3798_o.jpg
+prisoncell/prison_cell_38_05_altavista.jpg
+bookstore/Libreria_15_06_altavista.jpg
+gameroom/AT_99_4_7096_33_l.jpg
+jewelleryshop/silverjewelleryshop1.jpg
+mall/milano_galleria_statues.jpg
+livingroom/n57.jpg
+classroom/fouarre_classroom_02.jpg
+subway/subway_0211.jpg
+poolinside/0310_piscines_7.jpg
+dining_room/dining004.jpg
+restaurant/room257.jpg
+videostore/blockbuster_40_01_flickr.jpg
+waitingroom/JHC_3.jpg
+hospitalroom/hospital_room02.jpg
+videostore/web_japanese_video_store.jpg
+restaurant_kitchen/restaurant_kitchen_google_0071.jpg
+toystore/im001034.jpg
+hairsalon/innen1.jpg
+winecellar/bodega_123_16_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0083.jpg
+inside_subway/inside_subway_0024.jpg
+gameroom/Salle_de_Jeux_Villa_3_1_.jpg
+winecellar/cave_champagne_08_08_altavista.jpg
+dining_room/easyst027.jpg
+tv_studio/2090354493_0da1a70d82_b_14_.jpg
+dining_room/easyst039.jpg
+florist/florist_47_11_flickr.jpg
+artstudio/artistic_studio_08_08_altavista.jpg
+bowling/bowling_0063.jpg
+nursery/nursery_front.jpg
+grocerystore/market.jpg
+elevator/elevator_google_0068.jpg
+prisoncell/41935jOqn_w.jpg
+cloister/Claustro32.jpg
+nursery/201584pvxu_w.jpg
+waitingroom/waitingroom580.jpg
+toystore/jugueteria_05_02_flickr.jpg
+florist/floreria_04_22_flickr.jpg
+kindergarden/DSC000493.jpg
+library/Bibliothek_im_Reformierten_Kollegium_Debrecen.jpg
+locker_room/locker_room_google_0029.jpg
+waitingroom/JHC_2.jpg
+greenhouse/1412_mb_file_0a8c5_gif.jpg
+auditorium/sbu_auditorium_1__172.jpg
+bedroom/IMG_2429.jpg
+hospitalroom/SuperStock_1560R2033878.jpg
+bedroom/b20.jpg
+dentaloffice/dentaire_24_16_altavista.jpg
+operating_room/surgery_room_19_08_altavista.jpg
+waitingroom/waiting_room_50_10_altavista.jpg
+subway/subway_0491.jpg
+tv_studio/artmediamuseum_79_.jpg
+closet/closet31.jpg
+waitingroom/waiting_room_28_18_altavista.jpg
+computerroom/Computer_room_2.jpg
+corridor/IMG_9659.jpg
+computerroom/comp8.jpg
+stairscase/int79.jpg
+bookstore/Libreria_11_10_altavista.jpg
+gym/gimnasio_54_12_flickr.jpg
+clothingstore/magasin1_enfants.jpg
+kindergarden/perdue_preschool.jpg
+cloister/cloister5.jpg
+mall/mallparadisevalley03.jpg
+waitingroom/salle_d_attente.jpg
+bathroom/indoor_0391.jpg
+deli/deli_97_02_flickr.jpg
+gameroom/_wsb_488x346_salle.jpg
+museum/museo_155_18_flickr.jpg
+waitingroom/salle_attente35.jpg
+shoeshop/tienda2.jpg
+elevator/elevator_google_0073.jpg
+operating_room/surgery_room_02_19_altavista.jpg
+church_inside/KircheMariannhillInnen.jpg
+church_inside/HDRInderKirche_l.jpg
+deli/deli_04_13_altavista.jpg
+subway/subway_0313.jpg
+cloister/Claustro_de_San_Juan_de_los_Reyes.jpg
+garage/garage2.jpg
+concert_hall/g_vigoenfotos_1936d.jpg
+deli/deli_42_15_altavista.jpg
+florist/florist_50_08_flickr.jpg
+auditorium/hi_res_400x300_auditorium_s_1__148.jpg
+studiomusic/studio2.jpg
+library/Bibliothek1.jpg
+bathroom/indoor_0416.jpg
+corridor/n457040.jpg
+dentaloffice/dentista_99_19_flickr.jpg
+restaurant/restaurante_38_09_altavista.jpg
+laundromat/laundry room.jpg
+closet/WH_WI_with_Models.jpg
+gym/gimnasio_10_01_altavista.jpg
+artstudio/painters_studio_02_01_altavista.jpg
+kindergarden/FSLO_1168018158_111158.jpg
+livingroom/room131.jpg
+operating_room/operating_room_16_10_altavista.jpg
+stairscase/stairs08.jpg
+cloister/04claustro.jpg
+clothingstore/frenchconnection.jpg
+locker_room/locker_room_google_0181.jpg
+elevator/elevator_google_0021.jpg
+winecellar/wine_cellar_32_09_altavista.jpg
+lobby/Fairmont_Hotel_Lobby_PC_SF_CA.jpg
+subway/subway_0371.jpg
+lobby/sLobby19.jpg
+gym/gimnasio_73_08_flickr.jpg
+videostore/videoclub_07_10_flickr.jpg
+bar/bar_0162.jpg
+jewelleryshop/big_island_jewelers_ltd_4354_31_.jpg
+kitchen/cdmc1151.jpg
+lobby/27y5_1.jpg
+winecellar/wine_cellar_05_15_altavista.jpg
+winecellar/bodega_119_18_flickr.jpg
+subway/subway_0381.jpg
+mall/IMG_6449.jpg
+nursery/_nana_s_corner_baby_s_room_2005_029.jpg
+shoeshop/viv_29387_no.jpg
+subway/subway_0035.jpg
+waitingroom/egf_waitingroom.jpg
+bookstore/bookstore_36_06_altavista.jpg
+dining_room/int767.jpg
+hospitalroom/Nathans_hospital_room.jpg
+laboratorywet/Lab_3.jpg
+casino/casino_0075.jpg
+studiomusic/SynthesizerStudio.jpg
+laundromat/lavanderia_79_21_flickr.jpg
+hospitalroom/private_recovery_room.jpg
+library/Library_Pictures.jpg
+grocerystore/P1010024.jpg
+poolinside/piscina_cubierta_03_10_altavista.jpg
+children_room/_kids_rooms_38_.jpg
+trainstation/train station_01_05_altavista.jpg
+pantry/despensa_142_16_flickr.jpg
+studiomusic/estudio02.jpg
+livingroom/aa016553.jpg
+gym/gimnasio_142_20_flickr.jpg
+hairsalon/1870565281_d339778e97.jpg
+hairsalon/area_belones_ella_el_peluqueria7.jpg
+inside_subway/inside_subway_0426.jpg
+artstudio/art_painting_studio_15_09_altavista.jpg
+greenhouse/greenhouse123.jpg
+casino/casino_0477.jpg
+auditorium/auditorium_3__123.jpg
+dining_room/dsc02285.jpg
+lobby/Throne_Hall2.jpg
+videostore/Curts001.jpg
+office/img_0011.jpg
+kitchen/indoor_0076.jpg
+mall/Mall_of_America2.jpg
+bathroom/indoor_0458.jpg
+buffet/Buffet_Set_Up_2_gif.jpg
+computerroom/Salle_informatiquewe.jpg
+prisoncell/10e0gvm.jpg
+tv_studio/a3tv_noticias_94_02_01_78_.jpg
+warehouse/warehouse_0002.jpg
+bathroom/indoor_0137.jpg
+dining_room/easyst047.jpg
+gameroom/OR_99_6_9534_25A_l.jpg
+artstudio/artist_studio_33_01_altavista.jpg
+laboratorywet/laboratorio_quimica_07_06_altavista.jpg
+classroom/sala_convegni.jpg
+corridor/aa053951.jpg
+clothingstore/Dscf0007.jpg
+hairsalon/fdc_2196_1.jpg
+hospitalroom/hospital_room_10_09_altavista.jpg
+lobby/lobby47.jpg
+pantry/pantry_24_08_flickr.jpg
+buffet/212297870_fbc8f52ba4.jpg
+casino/casino_0391.jpg
+office/ap_de_marlene035.jpg
+meeting_room/Small_meeting_room.jpg
+meeting_room/IDC_salle_de_reunion_01.jpg
+lobby/lobby3423.jpg
+bar/bar_0163.jpg
+casino/casino_0161.jpg
+inside_subway/inside_subway_0027.jpg
+trainstation/train_station_06_17_altavista.jpg
+classroom/web_classe.jpg
+warehouse/warehouse_0495.jpg
+elevator/elevator_google_0023.jpg
+buffet/photo21_1.jpg
+meeting_room/conf07.jpg
+laboratorywet/laboratorio_quimica_10_05_altavista.jpg
+hospitalroom/IMG_0453.jpg
+winecellar/wine_cellar_25_02_altavista.jpg
+bar/bar_0301.jpg
+operating_room/operating_room_15_16_altavista.jpg
+computerroom/COMPUTER_ROOM_1a.jpg
+stairscase/bergot2.jpg
+laundromat/lavanderia_04_11_flickr.jpg
+closet/closet_systems.jpg
+garage/623sw39ter_garage3.jpg
+lobby/lobby02.jpg
+bowling/bowling_0194.jpg
+shoeshop/Interior_Marta_Corral.jpg
+artstudio/painters_studio_02_03_altavista.jpg
+laundromat/laundry_room_SHNS.jpg
+airport_inside/airport_inside_0039.jpg
+hospitalroom/habitacion_hospital_01_16_altavista.jpg
+mall/atrio_home.jpg
+greenhouse/Riverview08.jpg
+tv_studio/room_g_59_.jpg
+restaurant/Gaststatte_kl.jpg
+hospitalroom/SL271112.jpg
+bakery/famous_bakery_23_04_altavista.jpg
+poolinside/47220_pool_mtn_patio_view2.jpg
+warehouse/warehouse_0426.jpg
+restaurant/restaurant_05_18_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0054.jpg
+grocerystore/aislesjpg.jpg
+auditorium/theatreroyalbristolauditorium_1__74.jpg
+fastfood_restaurant/P1020181.jpg
+subway/subway_0394.jpg
+locker_room/locker_room_google_0151.jpg
+studiomusic/ctr_scaled.jpg
+tv_studio/egtv_estudiopg2_lo_43_.jpg
+bar/bar_0484.jpg
+church_inside/Kirche1.jpg
+closet/closet36.jpg
+trainstation/gare_130_20_flickr.jpg
+hairsalon/salon_03.jpg
+laboratorywet/Wet_Chem_Lab.jpg
+stairscase/N190049.jpg
+bakery/panaderia_05_20_yahoo.jpg
+fastfood_restaurant/blimpie.jpg
+bedroom/indoor_0246.jpg
+mall/cover_home3.jpg
+artstudio/painters_studio_08_10_altavista.jpg
+bowling/bowling_0034.jpg
+nursery/finished_babys_room__5_.jpg
+church_inside/0706eglise_lg.jpg
+dining_room/dining050.jpg
+gameroom/HO_06_03_3000_63_l.jpg
+gameroom/int30.jpg
+shoeshop/101247.jpg
+garage/garage-inside.jpg
+pantry/pantry_124_03_flickr.jpg
+toystore/281568964_bb524a3c9e_o.jpg
+museum/museum_19_13_altavista.jpg
+computerroom/1552211138_a17100bcf5.jpg
+inside_subway/inside_subway_0212.jpg
+restaurant/2006_11_tastingroom.jpg
+greenhouse/greenhousegh1.jpg
+bakery/bakery_17_09_yahoo.jpg
+inside_subway/inside_subway_0017.jpg
+prisoncell/cell.jpg
+stairscase/escalera.jpg
+dentaloffice/dental_office_20_06_altavista.jpg
+florist/FLORISTERIA-CASAMITJANA-2.jpg
+lobby/hotelobby222.jpg
+bakery/boulangerie_25_20_yahoo.jpg
+studiomusic/pic2.jpg
+laboratorywet/senior_wet_lab_2.jpg
+classroom/izieu_classe.jpg
+auditorium/bernard_20tschumi_3_popup_1__47.jpg
+classroom/salle_de_classe34.jpg
+warehouse/warehouse_0268.jpg
+bedroom/indoor_0210.jpg
+library/370663920_b87c065936.jpg
+trainstation/gare_72_23_flickr.jpg
+concert_hall/Meng_Concert_Hall_.jpg
+garage/garage654.jpg
+fastfood_restaurant/fast_food_restaurants.jpg
+laundromat/lavanderia_103_15_flickr.jpg
+movietheater/sala_de_cine_04_20_altavista.jpg
+movietheater/movietheater_google_0038.jpg
+airport_inside/airport_inside_0003.jpg
+trainstation/gare_75_17_flickr.jpg
+hospitalroom/hospital_room_04_10_altavista.jpg
+warehouse/warehouse_0065.jpg
+inside_bus/inside_bus_096.jpg
+auditorium/callway_auditorium_overview_500_x_345_1__49.jpg
+artstudio/artstudio.jpg
+clothingstore/0012.jpg
+airport_inside/airport_inside_0152.jpg
+locker_room/locker_room_google_0243.jpg
+prisoncell/400_jailcell_doorview_070917_lasvegaspd.jpg
+locker_room/locker_room_google_0063.jpg
+corridor/c12.jpg
+auditorium/auditorium_4__124.jpg
+gameroom/Gameroom022.jpg
+subway/metropolitana_106_01_flickr.jpg
+warehouse/warehouse_0219.jpg
+greenhouse/greenhousey_2.jpg
+jewelleryshop/tienda.jpg
+studiomusic/music_studio12.jpg
+laboratorywet/laboratorio_quimica_14_14_altavista.jpg
+bathroom/int483.jpg
+elevator/elevator_google_0065.jpg
+gameroom/salle_de_jeux56.jpg
+gym/highfields_gym_420x315.jpg
+waitingroom/waiting_room_15_20_altavista.jpg
+garage/insidemahal03.jpg
+casino/casino_0450.jpg
+kitchen/indoor_0383.jpg
+church_inside/4_9rieur_Le_Raincy_France_2007_interior.jpg
+nursery/jungle_nursery3.jpg
+shoeshop/2201663658_3ae8af1eac.jpg
+toystore/IMG_0198_Asakusa_toy_store.jpg
+inside_bus/inside_bus_049.jpg
+closet/CherryCloset_Small_.jpg
+bakery/bakery_19_05_yahoo.jpg
+computerroom/00.jpg
+church_inside/chiemsee_fraueninsel_kircheP9175239_gross.jpg
+museum/museo_21_15_altavista.jpg
+office/office7.jpg
+artstudio/artist_studio_40_09_altavista.jpg
+concert_hall/eej_concert_hall.jpg
+deli/deli_68_04_flickr.jpg
+restaurant/restaurante_51_04_altavista.jpg
+auditorium/auditoriumherbauges_060042700_1223_28112007_1__137.jpg
+livingroom/indoor_0021.jpg
+locker_room/locker_room_google_0105.jpg
+corridor/IMG_9660.jpg
+studiomusic/int774.jpg
+cloister/20188429.jpg
+bookstore/Librairie_49_01_altavista.jpg
\ No newline at end of file
diff --git a/TrainImages.txt b/TrainImages.txt
new file mode 100755
index 0000000..1ae64ef
--- /dev/null
+++ b/TrainImages.txt
@@ -0,0 +1,5360 @@
+gameroom/bt_132294gameroom2.jpg
+poolinside/inside_pool_and_hot_tub.jpg
+winecellar/bodega_12_11_flickr.jpg
+casino/casino_0512.jpg
+livingroom/living58.jpg
+mall/4984307.jpg
+corridor/pasilltmpo_t.jpg
+laboratorywet/laboratorio_quimica_07_05_altavista.jpg
+bookstore/CIMG2743.jpg
+casino/casino_0044.jpg
+waitingroom/800px_VTBS_Waiting_room_of_Thai_Airways.jpg
+clothingstore/c0011.jpg
+garage/mso1012_FridgeBikes_aft_w609.jpg
+prisoncell/territorial_prison_cell_block.jpg
+tv_studio/tv_studio_11_13_altavista.jpg
+inside_bus/inside_bus_024.jpg
+laboratorywet/wet_lab_10_17_altavista.jpg
+videostore/videoclub_07_11_flickr.jpg
+grocerystore/Market5.jpg
+inside_bus/inside_bus_078.jpg
+bathroom/itoiletpaper.jpg
+closet/458309322_42d901b9d8.jpg
+laboratorywet/wet_lab_13_10_altavista.jpg
+winecellar/cave_vin_10_10_altavista.jpg
+jewelleryshop/Joyeria_Madrid_4.jpg
+restaurant_kitchen/restaurant_kitchen_google_0103.jpg
+airport_inside/airport_inside_0148.jpg
+church_inside/CH_Horgen_RefKirche.jpg
+library/Homework2.jpg
+waitingroom/Waiting_Room_3.jpg
+classroom/Kindergarden_classroom.jpg
+laundromat/lavanderia_49_01_flickr.jpg
+jewelleryshop/joyeria_44_18_altavista.jpg
+closet/458309564_4e61036dc8.jpg
+inside_subway/inside_subway_0305.jpg
+winecellar/wine_cellar_24_10_altavista.jpg
+gym/gym.jpg
+fastfood_restaurant/DSC00472.jpg
+warehouse/warehouse_0116.jpg
+hospitalroom/hospitalRoom2.jpg
+warehouse/warehouse_0241.jpg
+trainstation/gare_117_20_flickr.jpg
+dining_room/d5.jpg
+greenhouse/paghmist.jpg
+library/bibliothekfgd.jpg
+bar/bar_0026.jpg
+bookstore/photo_magasin.jpg
+closet/closet6_lg.jpg
+dentaloffice/dentista_48_04_altavista.jpg
+florist/florist_40_10_altavista.jpg
+subway/subway_0344.jpg
+gym/hotel_megeve_11.jpg
+bakery/new_bakery_34_18_altavista.jpg
+children_room/img_0499_22_.jpg
+computerroom/computer_room06.jpg
+office/o4.jpg
+waitingroom/sala_de_espera_01_14_altavista.jpg
+hairsalon/_peluqueria2_w_gra.jpg
+warehouse/warehouse_0041.jpg
+toystore/jugueteria_08_09_yahoo.jpg
+shoeshop/tienda_zapatos.jpg
+stairscase/TA_99_3_0525_34_l.jpg
+classroom/biblioteca2.jpg
+movietheater/movietheater_google_0020.jpg
+hairsalon/salon_karin_pc080158.jpg
+greenhouse/051011Greenhouse.jpg
+office/office19.jpg
+bedroom/indoor_0194.jpg
+laundromat/wasserette.jpg
+studiomusic/08_alex_studio_shoot_053.jpg
+videostore/410w.jpg
+pantry/pantry_164_02_flickr.jpg
+deli/deli_06_11_altavista.jpg
+laboratorywet/dscn0387.jpg
+laundromat/3349laundromat_01.jpg
+airport_inside/airport_inside_0130.jpg
+artstudio/artist_studio_33_14_altavista.jpg
+bookstore/bookstore_03_09_flickr.jpg
+bathroom/indoor_0404.jpg
+toystore/1164876979_0.jpg
+cloister/cloister66.jpg
+operating_room/surgery_room_09_16_altavista.jpg
+inside_subway/inside_subway_0378.jpg
+bathroom/indoor_0323.jpg
+inside_bus/inside_bus_029.jpg
+clothingstore/indeximage.jpg
+poolinside/0310_piscines_8.jpg
+laboratorywet/wet_lab_38_18_altavista.jpg
+prisoncell/prison_cell_22_19_altavista.jpg
+toystore/InsideofStore.jpg
+artstudio/artist_studio_50_19_altavista.jpg
+gameroom/sallejeux567.jpg
+warehouse/warehouse_0096.jpg
+bedroom/hunter_room.jpg
+cloister/Cloisterold.jpg
+studiomusic/int772.jpg
+dining_room/yellow_dining_room.jpg
+dining_room/kitchen052.jpg
+gameroom/Catskill_Hall_Recreational_Room.jpg
+grocerystore/mod16b.jpg
+trainstation/estacion_de_tren_08_03_altavista.jpg
+bakery/best_bakery_08_01_altavista.jpg
+hospitalroom/IMG_0124.jpg
+tv_studio/studiocameras24_65_.jpg
+hospitalroom/hosp_073.jpg
+inside_bus/inside_bus_036.jpg
+auditorium/spaauditorium2_1__69.jpg
+pantry/pantry_106_24_flickr.jpg
+pantry/pantry_28_01_flickr.jpg
+airport_inside/airport_inside_0029.jpg
+classroom/AULA11_1TAMAOGRANDE.jpg
+clothingstore/kleidung01.jpg
+bathroom/b11.jpg
+pantry/pantry_43_24_flickr.jpg
+closet/df_0_0.jpg
+gym/gimnasio_48_07_altavista.jpg
+kindergarden/preschool_large.jpg
+poolinside/piscine_interieur.jpg
+winecellar/ca_97_2_287_35a_l.jpg
+inside_bus/inside_bus_045.jpg
+toystore/toys_store_45_15_altavista.jpg
+classroom/int116.jpg
+deli/deli_158_04_flickr.jpg
+office/estudio2.jpg
+subway/metropolitana_24_08_altavista.jpg
+hairsalon/hair.jpg
+restaurant/restaurant_09_11_altavista.jpg
+bar/bar_0171.jpg
+operating_room/operating_room_03_18_altavista.jpg
+laboratorywet/laboratorio_quimica_02_08_altavista.jpg
+studiomusic/IglooMusicStudio2.jpg
+closet/twincitiesclosets.jpg
+bar/bar_0528.jpg
+children_room/06playroom_2_.jpg
+bedroom/room34.jpg
+bar/bar_0430.jpg
+concert_hall/theater.jpg
+operating_room/operating_room_05_09_altavista.jpg
+classroom/salle_classe_int.jpg
+corridor/room513.jpg
+hospitalroom/IMG_3470.jpg
+bathroom/indoor_0452.jpg
+dining_room/dining010.jpg
+inside_bus/inside_bus_075.jpg
+florist/florist_86_15_flickr.jpg
+hospitalroom/Birthing_room_2.jpg
+concert_hall/ConcertHallInterior.jpg
+gym/SALLE3.jpg
+auditorium/auditorium_side_view_134.jpg
+inside_subway/inside_subway_0151.jpg
+tv_studio/dsc02482_38_.jpg
+toystore/Image13852843.jpg
+classroom/img_0007.jpg
+closet/Closet_Before_1_.jpg
+dining_room/d15.jpg
+computerroom/12_student_classroom_4_computer_training_1.jpg
+studiomusic/estudio03.jpg
+lobby/sLobby14.jpg
+artstudio/art_painting_studio_19_07_altavista.jpg
+auditorium/auditorium_6__126.jpg
+bakery/panaderia_37_09_yahoo.jpg
+kitchen/kitchen138.jpg
+prisoncell/18_jail.jpg
+elevator/elevator_google_0020.jpg
+florist/floreria_07_08_flickr.jpg
+inside_bus/inside_bus_014.jpg
+garage/12_large.jpg
+garage/GaragePOP_526x800.jpg
+winecellar/bodega_36_10_yahoo.jpg
+library/Bibliotheque.jpg
+subway/subway_0334.jpg
+gameroom/gameroom_tennis.jpg
+clothingstore/arredo_negozio_abbigliamento.jpg
+grocerystore/grocery_isle.jpg
+gym/Gym1_png.jpg
+casino/casino_0491.jpg
+studiomusic/StudioA1.jpg
+garage/ThierGarageStoreHomePage2.jpg
+toystore/Spielzeug_101_24_flickr.jpg
+grocerystore/bstone1.jpg
+movietheater/movietheater_google_0007.jpg
+prisoncell/carcel_carabanchel_04.jpg
+auditorium/espace_du_centenaire_salle_de_conferences_spectacles_paris_12_auditorium_04_1__53.jpg
+buffet/126829079_ec08a3996c.jpg
+dentaloffice/dentista_70_19_flickr.jpg
+bedroom/int107.jpg
+corridor/pasillo_bajo_c.jpg
+studiomusic/control_room_web.jpg
+cloister/image.jpg
+airport_inside/airport_inside_0309.jpg
+closet/2007_09_07_nursery_WhiteelfaKidsReachInCloset.jpg
+computerroom/Computer_room65.jpg
+garage/basement_4.jpg
+concert_hall/concert.hall.jpg
+shoeshop/706140700191528.jpg
+bedroom/bedroom14.jpg
+bathroom/bath244.jpg
+kindergarden/gingerroom1.jpg
+dentaloffice/dentista_11_09_altavista.jpg
+meeting_room/conf25.jpg
+operating_room/surgery_room_01_18_altavista.jpg
+poolinside/your_pool.jpg
+library/publiclibrarypic.jpg
+buffet/450px_Houseparty_buffet.jpg
+concert_hall/400px_National_Theater_and_Concert_Hall_of_Taiwan.jpg
+airport_inside/airport_inside_0246.jpg
+operating_room/surgery_room_47_11_altavista.jpg
+deli/deli_13_14_yahoo.jpg
+kitchen/k3.jpg
+children_room/imgp0662_20_.jpg
+tv_studio/sandiego_newsteam_61_.jpg
+office/room12.jpg
+church_inside/metropolitana_136_23_flickr.jpg
+clothingstore/MVC_013F.jpg
+laundromat/PIC00033.jpg
+gameroom/TA_99_2_0321_32_l.jpg
+poolinside/Lis_3.jpg
+jewelleryshop/tienda4.jpg
+airport_inside/airport_inside_0449.jpg
+bathroom/n190015.jpg
+hairsalon/L_UniversDeL_Hom_01_photo_AG.jpg
+laboratorywet/Tissue_culture.jpg
+auditorium/photo_of_auditorium_1__160.jpg
+closet/closet05.jpg
+florist/3_1001.jpg
+bookstore/librairie_Ermeton_sur_Biert_500_PIXELS.jpg
+studiomusic/home.jpg
+grocerystore/grocery1.jpg
+deli/deli_97_23_flickr.jpg
+bowling/bowling_0008.jpg
+jewelleryshop/photo_hpf_boutique_kobe.jpg
+inside_bus/inside_bus_097.jpg
+concert_hall/jack_singer_concert_hall01.jpg
+casino/casino_0133.jpg
+airport_inside/airport_inside_0431.jpg
+toystore/toys_store_06_15_altavista.jpg
+waitingroom/waiting_room_36_14_altavista.jpg
+corridor/room473.jpg
+concert_hall/interiorconcert02.jpg
+laboratorywet/wet_lab_08_05_altavista.jpg
+restaurant/chambre_resto_2.jpg
+hospitalroom/op_Room.jpg
+videostore/mws_STOREINT.jpg
+auditorium/mc2_auditorium_1__63.jpg
+jewelleryshop/silver_jewellery_shop1.jpg
+corridor/corridora4.jpg
+gameroom/room381.jpg
+bathroom/n190010.jpg
+classroom/classroom_006.jpg
+nursery/Chambre_Bebe_Babble_Circus.jpg
+trainstation/gare_154_14_flickr.jpg
+church_inside/friedrichswerdersche_kirche_eglise_friedrichswerder_03a.jpg
+auditorium/kingsway_20auditorium_jpg_60.jpg
+auditorium/dunning_20auditorium_52.jpg
+waitingroom/400_Waiting_Room_2.jpg
+bakery/best_bakery_12_16_altavista.jpg
+airport_inside/airport_inside_0015.jpg
+museum/museo_32_01_altavista.jpg
+deli/deli_24_19_altavista.jpg
+inside_subway/inside_subway_0194.jpg
+warehouse/warehouse_0221.jpg
+gameroom/OR_99_2_5387_32_l.jpg
+kindergarden/image4.jpg
+buffet/buffet5.jpg
+fastfood_restaurant/resto.jpg
+nursery/Chambre_Bebe_Kids_Gallery.jpg
+deli/deli_128_19_flickr.jpg
+computerroom/room201.jpg
+laboratorywet/wet_lab_01_17_altavista.jpg
+office/o9.jpg
+garage/garage_103.jpg
+hospitalroom/habitacion_hospital_07_11_altavista.jpg
+livingroom/n457041.jpg
+stairscase/S26.jpg
+pantry/pantry_23_13_flickr.jpg
+grocerystore/kasten_supermarkt_brouwers2_spar.jpg
+operating_room/operating_room_13_03_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0063.jpg
+classroom/dam_classroom4.jpg
+hairsalon/DSC_0091.jpg
+tv_studio/cd_teleideal_035_31_.jpg
+waitingroom/waitingroom03.jpg
+florist/florist2.jpg
+museum/museo_106_06_flickr.jpg
+church_inside/metropolitana_19_23_flickr.jpg
+bookstore/ladder2.jpg
+children_room/playroom_lg_35_.jpg
+computerroom/informatica2.jpg
+deli/deli_106_13_flickr.jpg
+poolinside/30_x_50_Pool_Cover_Vertical_Inside_Shot.jpg
+gameroom/FW_97_8_0587_31_l.jpg
+hospitalroom/cama_hospital_09_09_altavista.jpg
+bar/bar_0236.jpg
+computerroom/749300760_2f7b1f5ccb.jpg
+restaurant/restaurant_03_10_altavista.jpg
+classroom/sala_aula.jpg
+bedroom/roomscan36.jpg
+gameroom/LV_04_02_0006_06_l.jpg
+closet/816977_Orig.jpg
+trainstation/int55.jpg
+kitchen/cdmc1194.jpg
+laboratorywet/laboratorio_quimica_04_03_altavista.jpg
+grocerystore/CHG_GROCERY_2.jpg
+jewelleryshop/store4_49_.jpg
+poolinside/pool_inside_18_08_altavista.jpg
+bookstore/Libreria_13_15_altavista.jpg
+inside_bus/inside_bus_068.jpg
+tv_studio/tv_studio324_116_.jpg
+casino/casino_0372.jpg
+laundromat/laundryroom02.jpg
+grocerystore/318111272_14218344c8.jpg
+operating_room/operating_room_34_08_altavista.jpg
+bar/bar_0574.jpg
+mall/West_End_Mall_3_DSC01801_m.jpg
+greenhouse/dads_greenhouse.jpg
+prisoncell/jail_cell2.jpg
+elevator/elevator_google_0012.jpg
+artstudio/artist_studio_47_03_altavista.jpg
+clothingstore/boutique3.jpg
+artstudio/art_painting_studio_04_10_altavista.jpg
+classroom/Sala_de_Clases2.jpg
+meeting_room/conference_room_1_lr_sm.jpg
+greenhouse/greenhouse6789.jpg
+prisoncell/scr_newjail1.jpg
+waitingroom/Waiting-room.jpg
+library/bibliothek1df.jpg
+stairscase/Escalier_B1.jpg
+elevator/elevator_google_0013.jpg
+lobby/salones_04.jpg
+deli/deli_62_12_flickr.jpg
+corridor/slobby27.jpg
+fastfood_restaurant/32170441.jpg
+greenhouse/med_gallery_3601_179_581844.jpg
+gym/herade_inside.jpg
+bakery/bakery_16_12_yahoo.jpg
+greenhouse/geranium.jpg
+poolinside/pool_inside_23_18_altavista.jpg
+bedroom/b24.jpg
+lobby/lobby05.jpg
+bar/bar_0118.jpg
+cloister/claustro_romanico.jpg
+dentaloffice/dentista_30_20_altavista.jpg
+clothingstore/ins35.jpg
+auditorium/auditori_1__91.jpg
+winecellar/wine_cellar_floor_stone_gif.jpg
+children_room/playroom28_61_.jpg
+computerroom/ComputerClassroom1.jpg
+casino/casino_0007.jpg
+lobby/lobby17.jpg
+livingroom/l14.jpg
+prisoncell/carcel_143_15_flickr.jpg
+computerroom/SalleInformatique45.jpg
+casino/casino_0028.jpg
+bakery/bakery.jpg
+inside_bus/inside_bus_048.jpg
+nursery/baby_bedding.jpg
+lobby/AT_05_04_4000_59_l.jpg
+poolinside/room153.jpg
+artstudio/artist_studio_49_04_altavista.jpg
+garage/mso901_1f_sportswallandlockersystem_w609.jpg
+inside_bus/inside_bus_062.jpg
+cloister/Claustro_de_la_catedral_de_Roda_de_Isabena.jpg
+closet/showroom.jpg
+garage/3009Garaje.jpg
+movietheater/p1010969_1__27.jpg
+poolinside/N190005.jpg
+corridor/p1010080_c.jpg
+garage/2006_09Action02.jpg
+poolinside/pool_inside_34_04_altavista.jpg
+movietheater/movietheater_google_0005.jpg
+concert_hall/euph_soh_concert_hall_2300.jpg
+prisoncell/jailcell6edited.jpg
+artstudio/artist_studio_28_09_altavista.jpg
+dentaloffice/dentista_74_08_flickr.jpg
+trainstation/gare_137_21_flickr.jpg
+computerroom/computer_lab.jpg
+hospitalroom/hospital_room_10_01_altavista.jpg
+tv_studio/plato2_96_.jpg
+auditorium/grandauditorium_1__56.jpg
+kindergarden/preschool_2.jpg
+kitchen/k9.jpg
+bowling/bowling_0010.jpg
+mall/consumer1.jpg
+dentaloffice/dentista_04_19_flickr.jpg
+studiomusic/rspixstudio1.jpg
+winecellar/bodega_48_09_flickr.jpg
+deli/deli_158_17_flickr.jpg
+clothingstore/Lulas_013.jpg
+grocerystore/2058337_Shopping_for_fruit_in_the_grocery_store_0.jpg
+warehouse/warehouse_0346.jpg
+fastfood_restaurant/KFC_Interior_2.jpg
+studiomusic/estudio_de_grabacion12.jpg
+videostore/fall_profile11_312.jpg
+auditorium/500x240_escalesaudito31211_1__12.jpg
+cloister/cloister_wallpaper_1024x768.jpg
+cloister/Cloister_Jun05_DC2822sAR800.jpg
+buffet/528281656_34a35d85f2.jpg
+grocerystore/152.jpg
+gym/1_gymEmpty.jpg
+lobby/LobbyWide.jpg
+cloister/636059.jpg
+operating_room/operating_room_01_18_altavista.jpg
+classroom/aulainfantil.jpg
+kindergarden/SA_3_4_PS_Classroom_pictures_011_2_.jpg
+bowling/bowling_0207.jpg
+waitingroom/waitroom127.jpg
+mall/shopping mall.jpg
+greenhouse/inverna_izq_full.jpg
+grocerystore/f2b51ff9_67ac_4ffc_8efa_1355088ad5b6.jpg
+hairsalon/Salon_innenaufnahme_03.jpg
+poolinside/piscina_cubierta_01_01_flickr.jpg
+shoeshop/zapateria_04_01_flickr.jpg
+corridor/pasillo_1_c.jpg
+cloister/202.jpg
+auditorium/770248_942445_1__18.jpg
+church_inside/kirche_innenu.jpg
+warehouse/warehouse_0269.jpg
+grocerystore/japanese_food_fruit_stand.jpg
+restaurant/restaurant_37_11_altavista.jpg
+subway/subway_0106.jpg
+grocerystore/2479111961_003a15f0cf.jpg
+jewelleryshop/Interior_1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0104.jpg
+buffet/34583009_3e0d0befc2.jpg
+dining_room/d14.jpg
+shoeshop/zapato_4.jpg
+bathroom/indoor_0278.jpg
+gym/gym_16_01_altavista.jpg
+church_inside/brenac01_eglise02.jpg
+greenhouse/greenhouse_009.jpg
+mall/larcomar_shopping.jpg
+deli/new_deli_42_13_altavista.jpg
+locker_room/locker_room_google_0173.jpg
+computerroom/Salle_Multimedia.jpg
+inside_subway/inside_subway_0408.jpg
+meeting_room/c15.jpg
+movietheater/auditorium799_40.jpg
+meeting_room/conference_room_2.jpg
+airport_inside/airport_inside_0344.jpg
+laundromat/DSC03063.jpg
+movietheater/img_1354_1__21.jpg
+bowling/bowling_0052.jpg
+grocerystore/DSC01468.jpg
+airport_inside/airport_inside_0134.jpg
+dentaloffice/dentista_91_20_flickr.jpg
+florist/florist_08_13_altavista.jpg
+shoeshop/zapateria_01_14_flickr.jpg
+auditorium/audit400_1__89.jpg
+elevator/elevator_google_0056.jpg
+laundromat/Laundry_Room_bmp.jpg
+bathroom/b12.jpg
+winecellar/wine_cellar_18_11_altavista.jpg
+elevator/elevator_google_0028.jpg
+greenhouse/serre.jpg
+bakery/new_bakery_02_20_altavista.jpg
+meeting_room/n457009.jpg
+shoeshop/shoes_shop_23_11_altavista.jpg
+meeting_room/conf11.jpg
+gym/gym_05_11_altavista.jpg
+classroom/Osseo_classroom_flag.jpg
+computerroom/recurso4.jpg
+deli/deli_69_08_flickr.jpg
+subway/subway_0437.jpg
+operating_room/operating_room_01_08_altavista.jpg
+children_room/playroom4_32_.jpg
+pantry/pantry_51_16_flickr.jpg
+poolinside/pool_inside_12_14_altavista.jpg
+deli/new_deli_38_07_altavista.jpg
+livingroom/room163.jpg
+laundromat/laundry1.jpg
+livingroom/int104.jpg
+bar/bar_0369.jpg
+mall/mall13.jpg
+inside_bus/inside_bus_047.jpg
+operating_room/surgery_room_48_15_altavista.jpg
+casino/casino_0139.jpg
+operating_room/surgery_room_15_06_altavista.jpg
+church_inside/metropolitana_155_12_flickr.jpg
+gym/gym5.jpg
+jewelleryshop/non_art_side_jewelry_store_9_23_.jpg
+inside_subway/inside_subway_0076.jpg
+museum/museum_48_17_altavista.jpg
+closet/MasterSuiteMapleLamWIBedrm.jpg
+shoeshop/n301_image.jpg
+stairscase/ins36.jpg
+inside_subway/inside_subway_0085.jpg
+movietheater/PPP0001908_P.jpg
+studiomusic/262039342_29adefe21f.jpg
+warehouse/warehouse_0091.jpg
+grocerystore/cbra3.jpg
+museum/museum_37_10_altavista.jpg
+children_room/LV_04_04_0004_53_l.jpg
+hairsalon/DVP4957863_P.jpg
+fastfood_restaurant/ATCS_14_TacoBell.jpg
+deli/new_deli_02_02_altavista.jpg
+kindergarden/IMG_1643_35195531_std.jpg
+lobby/Nef1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0082.jpg
+bathroom/indoor_0491.jpg
+operating_room/surgery_room_42_18_altavista.jpg
+bathroom/dsc3101.jpg
+florist/vente_de_fleurs_et_compositions_CAP1.jpg
+church_inside/Chauvigny_Collegiale_Saint_Piere_IMG_4982.jpg
+cloister/cloister_gladman.jpg
+bedroom/indoor_0216.jpg
+museum/museo_20_06_altavista.jpg
+corridor/couloir_vestiaires_450.jpg
+library/DSC02518.jpg
+poolinside/pool_inside1.jpg
+studiomusic/14770A04.jpg
+trainstation/gare_109_17_flickr.jpg
+bowling/bowling_0132.jpg
+locker_room/locker_room_google_0176.jpg
+bakery/bakery_07_18_yahoo.jpg
+library/bibliothek_olbdw.jpg
+artstudio/artistic_studio_08_13_altavista.jpg
+mall/ins35.jpg
+shoeshop/zapateria_09_02_flickr.jpg
+laundromat/lavanderia_82_18_flickr.jpg
+poolinside/piscina_cubierta_07_10_altavista.jpg
+buffet/276833180_70e3e48991.jpg
+concert_hall/xConcertHallF.jpg
+church_inside/107_0781Wittenberg_Inside_SchlossKirche_1.jpg
+cloister/IMG_0432.jpg
+inside_bus/inside_bus_095.jpg
+movietheater/20061119203235.jpg
+deli/deli_68_10_flickr.jpg
+library/BM_Frejus_Bibliotheque_1.jpg
+locker_room/locker_room_google_0107.jpg
+nursery/hddsn111_nurseryafter_w609.jpg
+bar/bar_0141.jpg
+elevator/elevator_google_0081.jpg
+auditorium/presentation_20banque_20amphitheatre_1__164.jpg
+nursery/cmag0308_babyrooms01.jpg
+cloister/IMG_0425.jpg
+operating_room/surgery_room_06_02_altavista.jpg
+children_room/playroom_furniture_49_.jpg
+cloister/2468653788_fb0b50ab2e.jpg
+closet/main.jpg
+kindergarden/Huntington_preschool_room.jpg
+winecellar/bodega_50_04_yahoo.jpg
+classroom/G28bsdc.jpg
+children_room/playroom3_62_.jpg
+dining_room/room4.jpg
+gym/gimnasio_04_14_altavista.jpg
+locker_room/locker_room_google_0209.jpg
+concert_hall/concert_hall_photo.jpg
+meeting_room/n457010.jpg
+inside_bus/inside_bus_053.jpg
+subway/subway_0330.jpg
+waitingroom/waiting_room_10_05_altavista.jpg
+movietheater/ZonasComunes122.jpg
+closet/closet32.jpg
+inside_bus/inside_bus_080.jpg
+locker_room/locker_room_google_0087.jpg
+closet/Haley_Custom_Closet_450.jpg
+fastfood_restaurant/EnfieldTB.jpg
+corridor/ins30.jpg
+warehouse/warehouse_0406.jpg
+prisoncell/prison-4.jpg
+office/office_10.jpg
+meeting_room/conference3.jpg
+livingroom/living22.jpg
+stairscase/int67.jpg
+bakery/bakery_01_16_yahoo.jpg
+fastfood_restaurant/Pizza_Hut_2.jpg
+concert_hall/GrossesFsphs_gif.jpg
+elevator/elevator_google_0052.jpg
+subway/subway_0477.jpg
+casino/casino_0036.jpg
+kitchen/kitchen1a.jpg
+library/library2.jpg
+movietheater/img_entete.jpg
+concert_hall/Grand_Theater_web.jpg
+tv_studio/tv_studio_29_06_altavista.jpg
+bedroom/b23.jpg
+inside_subway/inside_subway_0272.jpg
+meeting_room/conf23.jpg
+operating_room/operating_room_02_02_altavista.jpg
+classroom/reportage_322_4.jpg
+dentaloffice/dentista_52_24_flickr.jpg
+church_inside/33ChurchInterior.jpg
+poolinside/RMC_Pool_picture_main_pool.jpg
+kitchen/kitchen169.jpg
+museum/museum_79_03_flickr.jpg
+bar/bar_0310.jpg
+toystore/jugueteria_10_17_yahoo.jpg
+bar/bar_0196.jpg
+bookstore/bookstore_17_13_altavista.jpg
+corridor/p1010075_c.jpg
+dining_room/d4.jpg
+poolinside/piscina_cubierta_01_14_altavista.jpg
+grocerystore/supermarche_2.jpg
+fastfood_restaurant/CIMG0334_resize.jpg
+buffet/food_table_3.jpg
+bedroom/b18.jpg
+inside_subway/inside_subway_0219.jpg
+dentaloffice/dentista_114_20_flickr.jpg
+toystore/Spielzeug_14_02_flickr.jpg
+prisoncell/dp1795698.jpg
+waitingroom/waiting_room_01_24_flickr.jpg
+classroom/195707530_69d72677ab.jpg
+prisoncell/cell0705.jpg
+museum/museum_149_07_flickr.jpg
+studiomusic/panoramica.jpg
+locker_room/locker_room_google_0041.jpg
+warehouse/warehouse_0001.jpg
+inside_bus/inside_bus_037.jpg
+nursery/pinkprincess_crib_full.jpg
+office/room263.jpg
+computerroom/ORDINATEUR2.jpg
+livingroom/at_98_5_950_34_l.jpg
+videostore/videotheque_01_02_flickr.jpg
+fastfood_restaurant/mcdonalds.jpg
+operating_room/operating_room_03_07_altavista.jpg
+church_inside/metropolitana_79_07_flickr.jpg
+elevator/elevator_google_0059.jpg
+pantry/Picture_013_30581853_std.jpg
+bathroom/indoor_0217.jpg
+bowling/bowling_0191.jpg
+computerroom/CompLab.jpg
+artstudio/painters_studio_32_20_altavista.jpg
+fastfood_restaurant/pizzahut_storefront0308.jpg
+lobby/lobby20.jpg
+bookstore/bookstore_51_10_altavista.jpg
+cloister/Cloister_Monastery_Santa_Catalina_Arequipa_Peru.jpg
+inside_bus/inside_bus_003.jpg
+meeting_room/n457019.jpg
+meeting_room/int754.jpg
+bowling/bowling_0112.jpg
+dentaloffice/dental_office_27_11_altavista.jpg
+restaurant/restaurant_03_05_altavista.jpg
+library/Bibliotheque_solvay_wall.jpg
+greenhouse/greenhouse3.jpg
+clothingstore/boutique8.jpg
+garage/Green_Roof_Garage_Rob_and_Rowan.jpg
+lobby/sLobby17.jpg
+library/Library98.jpg
+mall/ins34.jpg
+kindergarden/classroom3.jpg
+artstudio/art_painting_studio_10_11_altavista.jpg
+closet/WH_WI_with_SuperSlide.jpg
+bakery/panaderia_18_11_yahoo.jpg
+bar/bar_0051.jpg
+bathroom/b8.jpg
+clothingstore/Bookstore88.jpg
+library/130309783_f194f43f71.jpg
+classroom/aulas_007.jpg
+bar/bar_0006.jpg
+inside_bus/inside_bus_044.jpg
+artstudio/artist_studio_17_05_altavista.jpg
+subway/subway_0028.jpg
+florist/06_1.jpg
+library/pano2.jpg
+clothingstore/balboa_wet_seal_boutique.jpg
+inside_bus/inside_bus_076.jpg
+lobby/lobby04.jpg
+auditorium/auditorium_web_2_1__100.jpg
+hospitalroom/HospitalRoom3.jpg
+nursery/abc_babylg.jpg
+fastfood_restaurant/Papa_John_s_at_the_Al_Seef_Mall.jpg
+laboratorywet/laboratorio_quimica_03_03_altavista.jpg
+hairsalon/claudy_coiffure_salon_1.jpg
+gameroom/OR_02_02_0480_29_l.jpg
+dentaloffice/dentista_64_03_flickr.jpg
+casino/casino_0045.jpg
+closet/Master_Closet2.jpg
+kitchen/dining047.jpg
+bedroom/indoor_0434.jpg
+buffet/hot_food.jpg
+elevator/elevator_google_0032.jpg
+winecellar/wine_cellar_03_10_altavista.jpg
+bookstore/bookstore_05_14_altavista.jpg
+concert_hall/BeallHall.jpg
+restaurant/restaurante_04_18_altavista.jpg
+garage/mso1012_LaundryTools_aft_w609.jpg
+movietheater/movietheater_google_0031.jpg
+poolinside/serv8_450.jpg
+restaurant_kitchen/restaurant_kitchen_google_0046.jpg
+casino/casino_0048.jpg
+computerroom/url_gif.jpg
+kitchen/cdmc1123.jpg
+poolinside/P1050218.jpg
+closet/10022250_2T.jpg
+videostore/videoclub_14_15_altavista.jpg
+elevator/elevator_google_0086.jpg
+bookstore/bulles_vienne_04.jpg
+buffet/P8311103.jpg
+locker_room/locker_room_google_0102.jpg
+cloister/SenanqueCloister.jpg
+kindergarden/preschool_chairs_2006_3.jpg
+laboratorywet/laboratorio_quimica_17_15_altavista.jpg
+fastfood_restaurant/358x283.jpg
+clothingstore/45_1343_Foto_nova_loja_Toulon_DSCN0669.jpg
+livingroom/ph_01_06_87775_01_l.jpg
+church_inside/kirche11.jpg
+office/office3.jpg
+restaurant/restaurant_19_19_altavista.jpg
+dining_room/d12.jpg
+garage/GarageInside_1.jpg
+tv_studio/thumbnail_soundstage_norm_105_.jpg
+museum/museo_161_19_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0076.jpg
+shoeshop/TIENDA.jpg
+locker_room/locker_room_google_0185.jpg
+hospitalroom/P1012467.jpg
+winecellar/wine_cellar_44_03_altavista.jpg
+prisoncell/2005_0809Image0027.jpg
+library/Bibliothek.jpg
+children_room/opt_playroom_tepee_47_.jpg
+laboratorywet/laboratorio_quimica_18_12_altavista.jpg
+pantry/pantry_42_04_flickr.jpg
+buffet/528283746_b1dea3f70f.jpg
+casino/casino_0340.jpg
+gameroom/salle_de_jeux_08_09_altavista.jpg
+movietheater/movietheater_google_0034.jpg
+buffet/african_village_bakau_12.jpg
+pantry/pantry_143_06_flickr.jpg
+prisoncell/index_jail.jpg
+bowling/bowling_0062.jpg
+bowling/bowling_0170.jpg
+casino/casino_0006.jpg
+pantry/White_Pantry_System_Web_Size.jpg
+poolinside/schwimmbad11_2.jpg
+shoeshop/pht_mag_01.jpg
+children_room/PO_06_03_3000_56_l.jpg
+inside_bus/inside_bus_019.jpg
+shoeshop/zapateria_23_21_flickr.jpg
+elevator/elevator_google_0043.jpg
+florist/florist_46_20_altavista.jpg
+kitchen/kitchen174.jpg
+kindergarden/preschool1.jpg
+bathroom/cimg2046.jpg
+church_inside/3_Le_Raincy_eglise_Notre_Dame_Vue_d_ensemble.jpg
+closet/closets.jpg
+toystore/262507104_bfa08ef897.jpg
+laundromat/original.jpg
+hairsalon/foa6agrande.jpg
+movietheater/8cd35967ac80b2212d15ee90a06329ac_1__14.jpg
+bowling/bowling_0037.jpg
+movietheater/FindingNemo1_480x320.jpg
+corridor/upper_main_hallway_1_c.jpg
+gym/gimnasio_10_03_altavista.jpg
+meeting_room/conf14.jpg
+museum/museo_44_01_flickr.jpg
+nursery/baby_room_011_738273.jpg
+trainstation/gare_27_22_flickr.jpg
+restaurant/restaurante_04_15_altavista.jpg
+auditorium/global_millennium_prize_promotion_to_ricardo_palma_universitystudents_at_the_auditorium_df95e_1__55.jpg
+deli/deli_40_11_altavista.jpg
+dentaloffice/dentista_85_08_flickr.jpg
+bookstore/Libreria_30_16_altavista.jpg
+hairsalon/venta_405073650.jpg
+restaurant/bistro_19_10_altavista.jpg
+auditorium/amphi05_1__78.jpg
+bowling/bowling_0013.jpg
+casino/casino_0037.jpg
+hospitalroom/hospital_room_04_13_altavista.jpg
+children_room/playroom_0506_33_.jpg
+florist/florist_26_19_altavista.jpg
+hairsalon/photo_salon1.jpg
+winecellar/wine_cellar_46_17_altavista.jpg
+dining_room/kitchen064.jpg
+gameroom/Salle_Jeux_58936.jpg
+restaurant_kitchen/restaurant_kitchen_google_0030.jpg
+gameroom/OGS_jeux_web.jpg
+videostore/videotheque_01_23_flickr.jpg
+inside_subway/inside_subway_0159.jpg
+studiomusic/estudio01.jpg
+auditorium/sp_auditorium_1907_3_1__175.jpg
+bathroom/indoor_0498.jpg
+classroom/sala02.jpg
+restaurant_kitchen/restaurant_kitchen_google_0007.jpg
+grocerystore/Oliera_Wijnegem_Shopping_Center.jpg
+garage/hdts1013_Garage_bef_photo_w609.jpg
+dentaloffice/dental_office_02_10_altavista.jpg
+pantry/pantry_83_22_flickr.jpg
+fastfood_restaurant/baja_fresh_restaurant_inside.jpg
+mall/p95536_Minneapolis_Mall_of_America.jpg
+pantry/pantry_120_01_flickr.jpg
+dining_room/n190088.jpg
+livingroom/int13.jpg
+auditorium/amphitheatre987_25.jpg
+cloister/build1383.jpg
+museum/museo_07_01_flickr.jpg
+library/473767793_d3cafc4eff.jpg
+garage/UltiPro.jpg
+library/Concord_Free_Public_Library_Renovation_122.jpg
+livingroom/aa016556.jpg
+children_room/ft_playroom01_l_43_.jpg
+children_room/playroom10_54_.jpg
+garage/garage_03uu.jpg
+prisoncell/Mens_Jail.jpg
+restaurant/room264.jpg
+computerroom/1782001450_ec797a2c7c.jpg
+poolinside/pool_inside_46_08_altavista.jpg
+toystore/toys_store_03_20_altavista.jpg
+closet/Walk_In_Closet_1.jpg
+clothingstore/YogaBoutique.jpg
+mall/eastridg1.jpg
+bakery/panaderia_20_21_yahoo.jpg
+bookstore/Librairie_07_07_altavista.jpg
+waitingroom/PatientWaitingRoom.jpg
+concert_hall/Atwood_bubble.jpg
+waitingroom/a67092.jpg
+gym/gym45.jpg
+studiomusic/studiomusic.jpg
+restaurant_kitchen/restaurant_kitchen_google_0065.jpg
+auditorium/6a00d8341e38b153ef00e54f6a70a48834_500wi_1__15.jpg
+inside_bus/inside_bus_094.jpg
+laundromat/2067f.jpg
+stairscase/room454.jpg
+inside_subway/inside_subway_0291.jpg
+waitingroom/cab3.jpg
+auditorium/serre43_173.jpg
+toystore/speelgoed_35_13_altavista.jpg
+artstudio/artist_studio_36_05_altavista.jpg
+office/ins4.jpg
+auditorium/amphitheatre8_1__84.jpg
+children_room/VA_04_02_6000_08_l.jpg
+elevator/elevator_google_0096.jpg
+library/Bibliothek_3_gr.jpg
+jewelleryshop/duran_joyeros.jpg
+bowling/bowling_0204.jpg
+poolinside/pool_inside_40_20_altavista.jpg
+computerroom/salle_info1.jpg
+dentaloffice/dentaire_10_03_altavista.jpg
+deli/deli_73_02_flickr.jpg
+nursery/baby_room2.jpg
+tv_studio/famie_studio_89_.jpg
+poolinside/indooPool_Inside_gif.jpg
+bakery/panaderia_49_01_altavista.jpg
+stairscase/int667.jpg
+artstudio/art_painting_studio_12_16_altavista.jpg
+garage/garage_wall_strip_handled_500.jpg
+greenhouse/redwhite.jpg
+library/57048683_74701f9fa9.jpg
+movietheater/movietheater_google_0015.jpg
+restaurant/room251.jpg
+tv_studio/tv_studio_3b_72_.jpg
+warehouse/warehouse_0071.jpg
+auditorium/auditorium001_102.jpg
+livingroom/familyroom22.jpg
+hospitalroom/HospitalRoom_big.jpg
+locker_room/locker_room_google_0079.jpg
+pantry/fp_closet_3.jpg
+waitingroom/3multi1.jpg
+jewelleryshop/452121570_c989f6e216.jpg
+hospitalroom/IMG_0036.jpg
+church_inside/P0000231.jpg
+airport_inside/airport_inside_0162.jpg
+subway/subway_0083.jpg
+laboratorywet/wet_lab_09_02_altavista.jpg
+mall/mall04.jpg
+restaurant_kitchen/restaurant_kitchen_google_0020.jpg
+movietheater/2234326815_058f93a495_1__6.jpg
+mall/shopping_mall.jpg
+cloister/claustro2.jpg
+laboratorywet/laboratorio_quimica_06_04_altavista.jpg
+prisoncell/46442359_cf7bc5c5d2.jpg
+trainstation/train_station_07_07_altavista.jpg
+artstudio/artist_studio_22_07_altavista.jpg
+movietheater/movietheater_google_0009.jpg
+grocerystore/Afbeelding_supermarkt_ergo.jpg
+poolinside/pool_inside_08_07_altavista.jpg
+winecellar/cave_champagne_21_15_altavista.jpg
+operating_room/operating_room_08_09_altavista.jpg
+prisoncell/policestationjailcell.jpg
+subway/subway_0048.jpg
+jewelleryshop/Silver_shop_in_Wua_Lai_Rd.jpg
+airport_inside/airport_inside_0608.jpg
+fastfood_restaurant/pizza_hut.jpg
+operating_room/operating_room_33_02_altavista.jpg
+classroom/rdg1.jpg
+subway/subway_0349.jpg
+hospitalroom/habitacion_hospital_01_05_flickr.jpg
+church_inside/metropolitana_137_03_flickr.jpg
+bakery/boulangerie_40_09_altavista.jpg
+inside_subway/inside_subway_0261.jpg
+waitingroom/waiting_ig.jpg
+church_inside/KaGrou2.jpg
+deli/deli_14_06_altavista.jpg
+airport_inside/airport_inside_0535.jpg
+florist/florist_40_09_altavista.jpg
+operating_room/operating_room_02_19_altavista.jpg
+deli/StoddartDeli1_1.jpg
+waitingroom/photo_1241582.jpg
+office/int281.jpg
+warehouse/warehouse_0051.jpg
+bathroom/room29.jpg
+greenhouse/DSCN1239.jpg
+gym/velocity_hoboken_gym.jpg
+inside_subway/inside_subway_0398.jpg
+poolinside/piscina_cubierta_06_04_altavista.jpg
+prisoncell/prison_cell_22_10_altavista.jpg
+laundromat/lavanderia_11_20_flickr.jpg
+casino/casino_0266.jpg
+closet/closet1.jpg
+dining_room/room369.jpg
+laboratorywet/laboratorio_quimica_08_13_altavista.jpg
+dentaloffice/dentaire_44_12_altavista.jpg
+bakery/boulangerie_24_19_altavista.jpg
+buffet/P1011256_fs.jpg
+winecellar/wine_cellar_04_06_altavista.jpg
+poolinside/pool_inside_38_05_altavista.jpg
+prisoncell/carcel_21_20_flickr.jpg
+florist/44122_1.jpg
+laboratorywet/wet_lab_03_14_altavista.jpg
+concert_hall/Raoul_Jobin_07600017_200703_1.jpg
+laundromat/lavanderia_01_08_altavista.jpg
+elevator/elevator_google_0039.jpg
+operating_room/surgery_room_02_07_altavista.jpg
+bowling/bowling_0120.jpg
+pantry/pantry_100_19_flickr.jpg
+florist/florist_07_11_altavista.jpg
+buffet/998866690_b2cc196ee1.jpg
+meeting_room/conf17.jpg
+bedroom/room359.jpg
+winecellar/bodega_45_18_yahoo.jpg
+classroom/sala01.jpg
+poolinside/0310_piscines_6.jpg
+buffet/food2.jpg
+clothingstore/Bookstore_5.jpg
+airport_inside/airport_inside_0409.jpg
+lobby/url.jpg
+dentaloffice/dentista_40_01_altavista.jpg
+greenhouse/dscn0088.jpg
+hospitalroom/hospital_room_07_17_altavista.jpg
+lobby/LV_00_07_4491_02A_l.jpg
+office/office16.jpg
+trainstation/estacion_de_ferrocarriles_44_06_altavista.jpg
+mall/ar118983325881591.jpg
+auditorium/salle_auditorium_valenciennes_1__169.jpg
+bowling/bowling_0074.jpg
+computerroom/computer_room_jpg.jpg
+inside_subway/inside_subway_0431.jpg
+waitingroom/sala_de_espera_03_14_altavista.jpg
+bakery/panetteria_03_12_altavista.jpg
+airport_inside/airport_inside_0057.jpg
+bathroom/indoor_0433.jpg
+bar/bar_0254.jpg
+computerroom/computer_2520classroom.jpg
+casino/casino_0338.jpg
+greenhouse/invernadero04.jpg
+toystore/Spielzeug_24_11_altavista.jpg
+trainstation/estacion_de_ferrocarriles_16_16_altavista.jpg
+bedroom/int452.jpg
+bookstore/Buchhandlung_Ansichten_innen5_150dpi.jpg
+gym/gimnasio_68_21_flickr.jpg
+bathroom/indoor_0196.jpg
+library/scotland_library2_png.jpg
+inside_subway/inside_subway_0421.jpg
+florist/rt_wall.jpg
+casino/casino_0261.jpg
+trainstation/gare_100_06_flickr.jpg
+hospitalroom/Baby063.jpg
+waitingroom/recept2.jpg
+bedroom/indoor_0584.jpg
+pantry/Cognac_Pantry_wFull_Doors_Bskts_150.jpg
+warehouse/warehouse_0381.jpg
+gameroom/AT_98_4_1270_26_l.jpg
+kindergarden/classroom_large2.jpg
+pantry/agm_pantry_melamine.jpg
+restaurant_kitchen/restaurant_kitchen_google_0009.jpg
+corridor/p1010064_b.jpg
+clothingstore/274757141_small.jpg
+kitchen/kitchen265.jpg
+trainstation/train_station_42_09_altavista.jpg
+office/emba_offices_before_move.jpg
+operating_room/surgery_room_22_09_altavista.jpg
+casino/casino_0014.jpg
+kitchen/kitchen65.jpg
+pantry/42_17956239.jpg
+cloister/852054.jpg
+jewelleryshop/b102.jpg
+airport_inside/airport_inside_0197.jpg
+casino/casino_0038.jpg
+meeting_room/n457003.jpg
+bar/bar_0161.jpg
+children_room/AT_04_02_3000_58_l.jpg
+hairsalon/HPIM0491.jpg
+classroom/salle_2.jpg
+clothingstore/MelangeStoreInside.jpg
+nursery/p1000855_1.jpg
+tv_studio/grimshaw_photo7_91_.jpg
+locker_room/locker_room_google_0154.jpg
+airport_inside/airport_inside_0050.jpg
+trainstation/estacion_de_ferrocarriles_30_01_altavista.jpg
+office/o5.jpg
+bookstore/Librairie_Licap1.jpg
+tv_studio/3_estudio_de_television_1_23_.jpg
+bowling/bowling_0081.jpg
+deli/deli_142_15_flickr.jpg
+kindergarden/IMG_1073.jpg
+gym/gimnasio_28_20_flickr.jpg
+kitchen/cdmc1145.jpg
+operating_room/surgery_room_16_10_altavista.jpg
+fastfood_restaurant/cam1_big.jpg
+bowling/bowling_0124.jpg
+subway/subway_0382.jpg
+corridor/dsc00239.jpg
+warehouse/warehouse_0094.jpg
+church_inside/Random_church_interior.jpg
+inside_subway/metropolitana_19_12_flickr.jpg
+tv_studio/tv_studio_17_13_altavista.jpg
+classroom/image17.jpg
+inside_subway/inside_subway_0283.jpg
+artstudio/art_painting_studio_10_12_altavista.jpg
+buffet/616739082_d546057033.jpg
+bakery/boulangerie_16_09_yahoo.jpg
+computerroom/salle_matos.jpg
+elevator/elevator_google_0092.jpg
+greenhouse/Estufa_178.jpg
+bookstore/bookstore_02_08_altavista.jpg
+church_inside/metropolitana_68_11_flickr.jpg
+laundromat/laundromat78.jpg
+waitingroom/art2217_2.jpg
+toystore/toys_store_22_11_altavista.jpg
+tv_studio/estudiodetv_88_.jpg
+bookstore/9f63b46ad67dbc0868afa77a45d339bb.jpg
+kindergarden/DSC000522.jpg
+elevator/elevator_google_0002.jpg
+garage/623sw39ter_garage2.jpg
+airport_inside/airport_inside_0330.jpg
+kindergarden/Kindergarten_classroom.jpg
+trainstation/gare_63_05_flickr.jpg
+prisoncell/IMG_3782Copying.jpg
+jewelleryshop/vase2_55_.jpg
+shoeshop/75421439_6007807504.jpg
+cloister/cloister3.jpg
+stairscase/AT_97_4_396_33_l.jpg
+greenhouse/53_3.jpg
+toystore/262508526_93634b3c2c.jpg
+bookstore/Libreria_34_13_altavista.jpg
+casino/casino_0008.jpg
+children_room/playroom_july_68_.jpg
+greenhouse/greenhouse9.jpg
+studiomusic/studio87.jpg
+artstudio/estudio_de_pintor_07_08_altavista.jpg
+bathroom/IMG_2437.jpg
+airport_inside/airport_inside_0127.jpg
+computerroom/Salle_Informatique_Bellavista_060831_2_.jpg
+livingroom/living20.jpg
+laundromat/lavanderia.jpg
+winecellar/bodega_vino_03_10_altavista.jpg
+library/bnf.jpg
+cloister/bt_cloister.jpg
+lobby/Ashburton_Meeting_Room_003.jpg
+mall/2007_02_galleria.jpg
+office/office.jpg
+videostore/videoclub_01_15_altavista.jpg
+hospitalroom/roomhospital.jpg
+nursery/lit_bois_bebe_01_1.jpg
+videostore/videoteca_07_04_flickr.jpg
+stairscase/escalier_chapelle_loretto2.jpg
+classroom/Classroom1.jpg
+fastfood_restaurant/800px_Nandos_dhanmondi.jpg
+prisoncell/prison_cell_48_07_altavista.jpg
+fastfood_restaurant/Taco_Bell_8.jpg
+artstudio/modern_art_studio_50_11_altavista.jpg
+gym/gimnasio_11_12_altavista.jpg
+corridor/corridora7.jpg
+church_inside/Inside_a_large_church_Vienna.jpg
+auditorium/image_preview_1__149.jpg
+mall/thumb_3aa796fc07fe0a44839609f6fffb7384_a1151d110007d93035896c753526fed3.jpg
+gym/1852272142_7c45e7c342.jpg
+livingroom/living23.jpg
+pantry/pantry_09_02_altavista.jpg
+classroom/classroom05.jpg
+videostore/videoteca_06_24_flickr.jpg
+laboratorywet/nathanfeinlab.jpg
+mall/Galleria_1.jpg
+cloister/Claustro1.jpg
+lobby/sLobby05.jpg
+auditorium/stevensstraight_72.jpg
+bedroom/indoor_0578.jpg
+laundromat/ins7.jpg
+subway/underground_08_12_altavista.jpg
+gameroom/LV_00_05_4690_34_l.jpg
+videostore/videoclub_01_13_altavista.jpg
+fastfood_restaurant/Taco_Bell_7.jpg
+inside_bus/inside_bus_051.jpg
+laboratorywet/laboratorio_quimica_13_01_altavista.jpg
+warehouse/warehouse_0447.jpg
+church_inside/597086.jpg
+locker_room/locker_room_google_0116.jpg
+hairsalon/Picture_013.jpg
+prisoncell/prison4.jpg
+cloister/Claustro_Monasterio_San_Juan_de_los_Reyes.jpg
+inside_bus/inside_bus_043.jpg
+studiomusic/82793611.oGmwNa9a.20070629studio01comp.jpg
+cloister/claustro_silos.jpg
+children_room/VA_05_02_8100_37_l.jpg
+bakery/bakery_21_02_yahoo.jpg
+library/34_AvH_014_library_stacks.jpg
+buffet/food.jpg
+library/450px_Bibliothek_im_Reformierten_Kollegium_Debrecen.jpg
+clothingstore/b0011.jpg
+lobby/hall_entree.jpg
+toystore/toys_store_14_14_altavista.jpg
+jewelleryshop/e_jewelry_store_13_.jpg
+restaurant_kitchen/restaurant_kitchen_google_0035.jpg
+toystore/jugueteria_02_15_flickr.jpg
+grocerystore/MainFoodStoreProduce1.jpg
+livingroom/easyst035.jpg
+lobby/entrhallstair66.jpg
+elevator/elevator_google_0003.jpg
+subway/subway_0319.jpg
+bakery/famous_bakery_04_03_altavista.jpg
+movietheater/auditorium12_35.jpg
+subway/subway_0027.jpg
+artstudio/art_painting_studio_22_03_altavista.jpg
+kitchen/dsc01464.jpg
+bakery/new_bakery_30_07_altavista.jpg
+fastfood_restaurant/DSC00471.jpg
+bookstore/bookstore_46_15_altavista.jpg
+bathroom/IMG_1703.jpg
+pantry/300_78375.jpg
+poolinside/OR_04_03_0005_23_l.jpg
+hairsalon/bez2.jpg
+bookstore/livMezanino2.jpg
+children_room/VA_05_20_0020_15_l.jpg
+kindergarden/play_area_and_windows_large2.jpg
+operating_room/operating_room_15_19_altavista.jpg
+bowling/bowling_0151.jpg
+poolinside/piscina_cubierta_02_18_altavista.jpg
+bathroom/008.jpg
+livingroom/easyst020.jpg
+garage/garajep0.jpg
+operating_room/surgery_room_45_01_altavista.jpg
+waitingroom/salleAttente.jpg
+grocerystore/DSCN0258.jpg
+locker_room/locker_room_google_0201.jpg
+airport_inside/airport_inside_0022.jpg
+cloister/Cloister_Nov03_D3598sAR800.jpg
+computerroom/PICT0004.jpg
+studiomusic/electronic_music1.jpg
+airport_inside/airport_inside_0001.jpg
+restaurant/restaurant_46_05_altavista.jpg
+elevator/elevator_google_0076.jpg
+corridor/corridora6.jpg
+inside_bus/inside_bus_061.jpg
+mall/galleria2.jpg
+classroom/fourmies_ecomusee2.jpg
+kitchen/kitchen46.jpg
+cloister/claustro29dd.jpg
+inside_subway/inside_subway_0134.jpg
+concert_hall/NorwoodConcertHall_copy.jpg
+jewelleryshop/Interior_3.jpg
+livingroom/Living66.jpg
+shoeshop/zapateria_09_05_altavista.jpg
+cloister/claustropi7.jpg
+laundromat/OR_03_05_1000_59_l.jpg
+library/spellbinding_bookstore.jpg
+restaurant_kitchen/restaurant_kitchen_google_0105.jpg
+children_room/playroom2_30_.jpg
+bowling/bowling_0017.jpg
+fastfood_restaurant/800px_Lincoln_park_chicago_qdoba.jpg
+videostore/video01.jpg
+church_inside/church15_1.jpg
+greenhouse/747202.jpg
+warehouse/warehouse_0458.jpg
+children_room/AT_04_05_6000_54_l.jpg
+concert_hall/salle_de_concert.jpg
+subway/subway_0071.jpg
+elevator/elevator_google_0072.jpg
+airport_inside/airport_inside_0267.jpg
+buffet/food_4904.jpg
+church_inside/pantry_120_09_flickr.jpg
+inside_bus/inside_bus_008.jpg
+garage/12_x_24_Garage_Interior_.jpg
+closet/075381028998.jpg
+gym/gimnasio_32_04_altavista.jpg
+auditorium/amphitheatre_1__85.jpg
+studiomusic/control_water_music.jpg
+greenhouse/invernaderos_fotos_020.jpg
+cloister/I007CloisterMoyneAbbey.jpg
+warehouse/warehouse_0086.jpg
+fastfood_restaurant/panther_grill_gif.jpg
+hairsalon/c6fde69b_523f.jpg
+stairscase/TA_99_3_0525_33_l.jpg
+inside_subway/inside_subway_0358.jpg
+shoeshop/shoeshop.jpg
+artstudio/estudio_de_pintor_02_07_altavista.jpg
+closet/Laminated_Clothing_Closet.jpg
+concert_hall/concertFull.jpg
+restaurant/restaurante_20_04_altavista.jpg
+gym/gimnasio_57_15_flickr.jpg
+clothingstore/rotterdam.jpg
+closet/Maple_DH_Closet_Propped.jpg
+museum/museum_120_08_flickr.jpg
+toystore/toys_store_01_13_altavista.jpg
+bookstore/Librairie_36_11_altavista.jpg
+dentaloffice/dental_office_11_12_altavista.jpg
+bookstore/bookstore_02_09_altavista.jpg
+greenhouse/hydroponic_greenhouse_1.jpg
+gym/gimnasio_23_17_altavista.jpg
+greenhouse/site_estufa_03.jpg
+bar/bar_0246.jpg
+bathroom/indoor_0407.jpg
+clothingstore/our_boutique011.jpg
+airport_inside/airport_inside_0078.jpg
+fastfood_restaurant/30835528_scaled_408x271.jpg
+deli/deli_85_04_flickr.jpg
+museum/museum_41_15_altavista.jpg
+pantry/ShelfTrack_Pantry.jpg
+gym/Gym_Equipment_Cardio.jpg
+jewelleryshop/storefloor_52_.jpg
+pantry/WH_Sidelines_Baskets_Pantry.jpg
+casino/casino_0023.jpg
+classroom/classroom04.jpg
+toystore/Spielzeug_29_02_flickr.jpg
+waitingroom/Waiting_Room_sm.jpg
+meeting_room/conference6.jpg
+meeting_room/c17.jpg
+hospitalroom/SUDEEP_HOSPITAL.jpg
+museum/museum_08_09_flickr.jpg
+grocerystore/1ng10a.jpg
+videostore/blockbuster_22_05_altavista.jpg
+florist/floreria_02_13_flickr.jpg
+buffet/528370197_65f7ccd505.jpg
+bowling/bowling_0214.jpg
+shoeshop/zapateria_24_16_flickr.jpg
+classroom/236254301_fa02eae064.jpg
+fastfood_restaurant/101_0301.jpg
+livingroom/book_living_room.jpg
+hairsalon/salondebelleza.jpg
+airport_inside/airport_inside_0061.jpg
+nursery/nursery_moon_theme800px.jpg
+casino/casino_0013.jpg
+warehouse/warehouse_0026.jpg
+hospitalroom/smartroomdrhassan_hi.jpg
+kitchen/kitchen1.jpg
+stairscase/INT69.jpg
+artstudio/ateliers_11_09_altavista.jpg
+subway/subway_0217.jpg
+bedroom/ph_02_04_4682_01_l.jpg
+jewelleryshop/50_7_.jpg
+auditorium/amphitheatre_2__86.jpg
+library/mainLibrary.jpg
+elevator/elevator_google_0035.jpg
+museum/museum_42_12_altavista.jpg
+office/mayors_office.jpg
+museum/museo_86_11_flickr.jpg
+stairscase/AT_04_02_3000_35_l.jpg
+dentaloffice/dentista_22_16_flickr.jpg
+inside_bus/inside_bus_035.jpg
+kindergarden/IMG_1522_18203029_std.jpg
+deli/deli_62_15_flickr.jpg
+videostore/videoteka_02_12_altavista.jpg
+deli/deli_98_18_flickr.jpg
+subway/metropolitana_15_12_flickr.jpg
+lobby/sLobby26.jpg
+tv_studio/tv_studio11_21_07_113_.jpg
+concert_hall/slleconcert.jpg
+locker_room/locker_room_google_0200.jpg
+warehouse/warehouse_0317.jpg
+inside_bus/inside_bus_005.jpg
+subway/subway_0312.jpg
+hospitalroom/saifee_bed.jpg
+jewelleryshop/5000000_8_.jpg
+operating_room/surgery_room_08_13_altavista.jpg
+elevator/elevator_google_0067.jpg
+garage/Garage_03.jpg
+movietheater/movietheater_google_0019.jpg
+waitingroom/waiting_room_41_04_altavista.jpg
+bathroom/b4.jpg
+classroom/classroom_001.jpg
+dining_room/roomscan24.jpg
+trainstation/estacion_de_ferrocarriles_01_21_flickr.jpg
+greenhouse/hydroponic_greenhouse.jpg
+studiomusic/pic3.jpg
+garage/Garage890.jpg
+grocerystore/supermarche33_1.jpg
+dining_room/dining001.jpg
+operating_room/surgery_room_44_02_altavista.jpg
+bakery/new_bakery_26_09_altavista.jpg
+elevator/elevator_google_0009.jpg
+movietheater/auditorium39_16.jpg
+pantry/pantry_50_20_flickr.jpg
+hospitalroom/lister_hospital_05.jpg
+library/bibliothekd.jpg
+bedroom/dsc04183.jpg
+laboratorywet/laboratorio_quimica_18_01_altavista.jpg
+locker_room/locker_room_google_0055.jpg
+computerroom/fitxer75b_IMG_1581a.jpg
+dining_room/dining38.jpg
+museum/museum_26_20_altavista.jpg
+prisoncell/prison_cell_26_02_altavista.jpg
+elevator/elevator_google_0077.jpg
+cloister/Abbaye_Royale_de_Fontevraud_IMG_5466.jpg
+computerroom/cr3.jpg
+kindergarden/prek1.jpg
+computerroom/Computer_Room_5a.jpg
+elevator/elevator_google_0014.jpg
+museum/museo_32_09_flickr.jpg
+operating_room/operating_room_21_09_altavista.jpg
+mall/mall14.jpg
+laboratorywet/feinlabcentrifuge.jpg
+tv_studio/set_camera2_465x370_97_.jpg
+bedroom/n190033.jpg
+hairsalon/Copie_de_DSCF1579.jpg
+hospitalroom/DSC_0001.jpg
+mall/663265908_597972e155.jpg
+lobby/egypt004.jpg
+tv_studio/estudio_de_television_04_14_altavista.jpg
+stairscase/N25.jpg
+museum/museo_67_23_flickr.jpg
+elevator/elevator_google_0097.jpg
+prisoncell/jailcell334.jpg
+bar/bar_0186.jpg
+library/gallerie_1130426509812_81_80_90_133.jpg
+greenhouse/greenhouse98.jpg
+dentaloffice/dentista_09_20_altavista.jpg
+pantry/1128_pantry.jpg
+fastfood_restaurant/restaurant.jpg
+operating_room/surgery_room_06_19_altavista.jpg
+shoeshop/zapabulo02.jpg
+hairsalon/4613843c_peluqueria2.jpg
+lobby/vilnius_neringa_hotel_lobby.jpg
+locker_room/locker_room_google_0007.jpg
+subway/subway_0092.jpg
+warehouse/warehouse_0376.jpg
+florist/floristeria_belinda.jpg
+laundromat/image052.jpg
+locker_room/locker_room_google_0238.jpg
+corridor/c18.jpg
+poolinside/room175.jpg
+dentaloffice/24304190.jpg
+mall/386349.jpg
+bowling/bowling_0158.jpg
+locker_room/locker_room_google_0073.jpg
+kindergarden/toddler1.jpg
+pantry/pantry_123_06_flickr.jpg
+prisoncell/1793365943_cc1f2e4d69.jpg
+deli/new_deli_41_12_altavista.jpg
+trainstation/train_station_01_05_altavista.jpg
+bakery/boulangerie_28_03_yahoo.jpg
+airport_inside/airport_inside_0174.jpg
+trainstation/gare_127_13_flickr.jpg
+nursery/Room1.jpg
+poolinside/pool_inside_15_13_altavista.jpg
+trainstation/gare_06_01_flickr.jpg
+airport_inside/airport_inside_0038.jpg
+tv_studio/plato_de_television_02_03_altavista.jpg
+shoeshop/zapateria_12_06_flickr.jpg
+winecellar/bodega_vino_04_05_altavista.jpg
+garage/garage876.jpg
+grocerystore/dsc011758jj.jpg
+mall/2120.jpg
+inside_subway/inside_subway_0297.jpg
+bar/bar_0190.jpg
+cloister/14claustro.jpg
+inside_subway/inside_subway_0105.jpg
+operating_room/surgery_room_41_01_altavista.jpg
+museum/museo_127_07_flickr.jpg
+children_room/507_playroom_8_.jpg
+gym/Exercise_Gym.jpg
+children_room/TA_99_3_0523_01_l.jpg
+livingroom/indoor_0325.jpg
+videostore/videoclub_14_07_altavista.jpg
+elevator/elevator_google_0047.jpg
+fastfood_restaurant/451033421_2252a21567.jpg
+meeting_room/conf05.jpg
+church_inside/hottinger_kirche_neu_innen.jpg
+studiomusic/4683183.jpg
+hairsalon/11555455012.jpg
+tv_studio/tv_studio_03_18_altavista.jpg
+artstudio/artist_studio_30_14_altavista.jpg
+concert_hall/dpac_int.jpg
+cloister/cloistetr.jpg
+winecellar/cave_champagne_01_19_altavista.jpg
+garage/garage99.jpg
+bathroom/d47.jpg
+computerroom/MCentre06.jpg
+library/image_bibliotheque.jpg
+stairscase/room191.jpg
+operating_room/surgery_room_14_05_altavista.jpg
+waitingroom/BATH06.jpg
+gym/gym_floor_mirror_view.jpg
+gameroom/salle_de_jeux_10_17_altavista.jpg
+greenhouse/greenhouseikjj2.jpg
+bar/bar_0063.jpg
+livingroom/living14.jpg
+museum/museum_101_16_flickr.jpg
+restaurant/Salle_de_Restaurant_2.jpg
+restaurant_kitchen/restaurant_kitchen_google_0087.jpg
+winecellar/wine_cellar_12_14_altavista.jpg
+gym/gimnasio_20_13_altavista.jpg
+studiomusic/djban_estudio_01.jpg
+hairsalon/CarrollCountyHairSalonStaff.jpg
+inside_subway/inside_subway_0391.jpg
+shoeshop/193499659_cc6d11184c.jpg
+classroom/ClassroomElem.jpg
+winecellar/wine_storage_21_19_altavista.jpg
+meeting_room/n457005.jpg
+laboratorywet/Ion_Chromatography.jpg
+videostore/videoteca_04_11_flickr.jpg
+jewelleryshop/05.jpg
+florist/r0.jpg
+nursery/600_nontoxic_nursery_crib.jpg
+garage/mso1012_BackWall_bef_w609.jpg
+bar/bar_0101.jpg
+bathroom/ta_99_2_0319_02_l.jpg
+laundromat/lavanderia_41_07_flickr.jpg
+museum/museo_54_09_flickr.jpg
+jewelleryshop/jewelrystore002_20_.jpg
+trainstation/gare_152_14_flickr.jpg
+bathroom/bath288.jpg
+closet/closet_rack.jpg
+children_room/playroom_decorating_ideas_239_51_.jpg
+grocerystore/supermarket_fluores.jpg
+stairscase/N190086.jpg
+museum/museum_46_08_altavista.jpg
+greenhouse/url.jpg
+studiomusic/int773.jpg
+laundromat/image_preview.jpg
+warehouse/warehouse_0120.jpg
+closet/closet33.jpg
+inside_bus/inside_bus_090.jpg
+videostore/videoclub_10_22_flickr.jpg
+closet/MasterSuiteLaminateWIBR.jpg
+clothingstore/Bookstore2.jpg
+inside_bus/inside_bus_101.jpg
+meeting_room/int283.jpg
+office/or_02_05_0479_11_l.jpg
+poolinside/room239.jpg
+stairscase/N05m.jpg
+dentaloffice/dentista_128_16_flickr.jpg
+elevator/elevator_google_0085.jpg
+casino/casino_0256.jpg
+children_room/pippins_main_play_room_28_.jpg
+office/neutbbl.t.jpg
+greenhouse/greenhouse2yy1.jpg
+subway/subway_0342.jpg
+stairscase/N457087.jpg
+warehouse/warehouse_0038.jpg
+concert_hall/concert_theater_photo01.jpg
+gameroom/sala_de_juegos_16_19_altavista.jpg
+cloister/01Claustro.jpg
+bedroom/bedroom18.jpg
+artstudio/art_painting_studio_43_06_altavista.jpg
+videostore/videoclub_34_03_altavista.jpg
+deli/deli_11_04_yahoo.jpg
+bowling/bowling_0134.jpg
+restaurant_kitchen/restaurant_kitchen_google_0003.jpg
+bakery/boulangerie_14_21_yahoo.jpg
+bedroom/indoor_0323.jpg
+concert_hall/grieghalle05.jpg
+dining_room/dining008.jpg
+gameroom/LV_04_01_0004_22_l.jpg
+gameroom/gameroom2.jpg
+tv_studio/tv_studio_19_02_altavista.jpg
+inside_subway/inside_subway_0208.jpg
+subway/subway_0315.jpg
+winecellar/wine_cellar_36_17_altavista.jpg
+elevator/elevator_google_0078.jpg
+winecellar/wine_cellar_47_08_altavista.jpg
+children_room/playroom16_58_.jpg
+office/n457024.jpg
+cloister/VeniceSantApolloniaCloister.jpg
+laundromat/lavanderia_39_02_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0100.jpg
+studiomusic/clients_forge2.jpg
+auditorium/auditorium_17_1__42.jpg
+computerroom/IMG_0595.jpg
+videostore/onyeze.jpg
+children_room/skd_photo_playroom_69_.jpg
+inside_bus/inside_bus_067.jpg
+lobby/lobby1332.jpg
+gameroom/gameroom789.jpg
+bathroom/IMG_1701.jpg
+bedroom/at_01_5a_1420_19_l.jpg
+laboratorywet/wet_lab_09_01_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0059.jpg
+studiomusic/p_14_Music_studio.jpg
+toystore/245006402_b27063dfcd.jpg
+clothingstore/mg004.jpg
+dentaloffice/dentaloffice04.jpg
+dining_room/d15b.jpg
+jewelleryshop/532g.jpg
+toystore/PICT0009.jpg
+mall/mall24.jpg
+kitchen/room14.jpg
+videostore/picvideostore.jpg
+children_room/playroom4500_64_.jpg
+classroom/Pinas.jpg
+airport_inside/airport_inside_0120.jpg
+winecellar/cave_champagne_04_15_altavista.jpg
+gameroom/sala_de_juegos_17_13_altavista.jpg
+auditorium/anderson_1__88.jpg
+lobby/lobby_reception_1.jpg
+office/tuscan_home_office500A.jpg
+bowling/bowling_0125.jpg
+trainstation/gare_41_15_flickr.jpg
+artstudio/painters_studio_29_02_altavista.jpg
+bathroom/bath287.jpg
+closet/closet_design_lg_gif.jpg
+prisoncell/JAIL4.jpg
+auditorium/img_1211445319655_1__150.jpg
+cloister/en_el_claustro.jpg
+garage/truckgarage.jpg
+livingroom/l13.jpg
+lobby/SD_00_01_51255_17_l.jpg
+restaurant/restaurant_51_20_altavista.jpg
+pantry/closetstoragekitchen.jpg
+operating_room/surgery_room_03_06_altavista.jpg
+lobby/lobby03.jpg
+restaurant/restaurant_20_06_altavista.jpg
+pantry/despensa_32_20_flickr.jpg
+grocerystore/shop15.jpg
+poolinside/17429_1_Pool7Inside.jpg
+prisoncell/610x.jpg
+nursery/babyroom_1.jpg
+subway/subway_0356.jpg
+videostore/610x.jpg
+gameroom/int511.jpg
+warehouse/warehouse_0378.jpg
+gameroom/salle_de_jeux_08_14_altavista.jpg
+lobby/Foyer_Lobby.jpg
+church_inside/church234567.jpg
+bar/bar_0156.jpg
+grocerystore/supermercato_fs.jpg
+shoeshop/zapateria_01_16_flickr.jpg
+auditorium/auditorium098_105.jpg
+grocerystore/IMG_4862BeerinNewHampshire.jpg
+mall/Buenos_Aires_shopping_center_2_.jpg
+office/despacho2_400.jpg
+computerroom/computadores.jpg
+greenhouse/greenhouse2123.jpg
+museum/museum_137_18_flickr.jpg
+bar/bar_0166.jpg
+church_inside/1347447925_425d67a816.jpg
+library/library01.jpg
+garage/ihs_house_garage_inside.jpg
+warehouse/warehouse_0036.jpg
+dentaloffice/dental_office_49_11_altavista.jpg
+jewelleryshop/1202199587interior.jpg
+children_room/VA_03_00_0003_44_l.jpg
+restaurant/restaurant_05_20_altavista.jpg
+auditorium/g_5eauditorium_1__147.jpg
+dining_room/room272.jpg
+garage/Garage_rollup_open_1_262135554_std.jpg
+dining_room/dining011.jpg
+nursery/amys_baby_room_lg.jpg
+artstudio/int12.jpg
+subway/subway_0474.jpg
+dining_room/n457043.jpg
+buffet/buffet648.jpg
+locker_room/locker_room_google_0166.jpg
+toystore/Spielzeug_84_23_flickr.jpg
+closet/MasterSuiteWI.jpg
+buffet/food_table03.jpg
+gameroom/gameroom_web.jpg
+corridor/p1010068_c.jpg
+auditorium/facility_rentals_auditorium_1__146.jpg
+greenhouse/DSCF0009.jpg
+shoeshop/f339.jpg
+airport_inside/airport_inside_0323.jpg
+shoeshop/shoes_shop_01_20_altavista.jpg
+studiomusic/clients_forge1.jpg
+winecellar/wine_cellar_09_18_altavista.jpg
+computerroom/salle_info.jpg
+prisoncell/todd_232087_14.jpg
+restaurant/restaurant_20_18_altavista.jpg
+auditorium/auditorium712_38.jpg
+kindergarden/DSC000572.jpg
+poolinside/piscina_cubierta_03_12_altavista.jpg
+videostore/DVD3268.jpg
+gameroom/sala_de_juegos_13_14_altavista.jpg
+garage/mso1004_StuffOnWalls_aft1_w609.jpg
+laboratorywet/laboratorio_quimica_01_18_altavista.jpg
+winecellar/wine_cellar_47_19_altavista.jpg
+children_room/LV_98_3_7013_14_l.jpg
+bakery/boulangerie_38_18_altavista.jpg
+greenhouse/BA_Greenhouse.jpg
+prisoncell/JailCell1950.jpg
+grocerystore/caraman_supermarche_90d5b.jpg
+artstudio/art_painting_studio_43_20_altavista.jpg
+toystore/toys_store_36_07_altavista.jpg
+videostore/videoclub_30_06_altavista.jpg
+fastfood_restaurant/Blimpie21.jpg
+hospitalroom/hospital_room_07_16_altavista.jpg
+kindergarden/Classroom566.jpg
+buffet/fffffda05b0b.jpg
+inside_subway/inside_subway_0183.jpg
+nursery/kimberly_grant.jpg
+kitchen/room40.jpg
+bakery/panetteria_10_10_altavista.jpg
+inside_bus/inside_bus_070.jpg
+children_room/playroom_000_66_.jpg
+hairsalon/fdc_2701_1.jpg
+videostore/videoteca_05_12_flickr.jpg
+kindergarden/Classroom_109.jpg
+laundromat/laundry_room_area.jpg
+bowling/bowling_0036.jpg
+buffet/buffet87.jpg
+church_inside/144952333.jpg
+classroom/class_room_2.jpg
+bakery/panetteria_01_01_altavista.jpg
+gym/VAVORITE_GYM_SHOT_DIGITAL.jpg
+concert_hall/concert2.jpg
+kindergarden/classA01.jpg
+livingroom/familyroom97.jpg
+fastfood_restaurant/149212593_1abe45be1e.jpg
+bathroom/indoor_0197.jpg
+lobby/egypt005.jpg
+bowling/bowling_0029.jpg
+lobby/lobby31.jpg
+pantry/White_WI_Pantry_woDining_Rm.jpg
+garage/Garage7654.jpg
+warehouse/warehouse_0216.jpg
+concert_hall/19052005180320_6.jpg
+winecellar/bodega_38_21_yahoo.jpg
+museum/museo_43_04_flickr.jpg
+kindergarden/Preschool_Place_Market.jpg
+garage/GarageInside.jpg
+lobby/16.jpg
+inside_bus/inside_bus_071.jpg
+meeting_room/conf08.jpg
+children_room/girlsplayroom_18_.jpg
+casino/casino_0041.jpg
+jewelleryshop/170208.jpg
+restaurant/bistro_43_06_altavista.jpg
+videostore/video_store_05_01_altavista.jpg
+corridor/p1010076_c.jpg
+greenhouse/_7CCDF0C3_D08A_420C_8275_8544C0A84D0C_19112003_002.jpg
+operating_room/surgery_room_06_04_altavista.jpg
+poolinside/pool_inside_16_02_altavista.jpg
+trainstation/train_station_11_18_altavista.jpg
+office/water_office.jpg
+stairscase/stairs07.jpg
+bakery/bakery_23_13_yahoo.jpg
+tv_studio/estudio_rbs_tv_bage_44_.jpg
+toystore/toys_store_14_15_altavista.jpg
+trainstation/gare_97_15_flickr.jpg
+buffet/buffet_food.jpg
+grocerystore/veg_isle1.jpg
+laundromat/PO_06_03_3000_81_l.jpg
+elevator/elevator_google_0074.jpg
+mall/ins47.jpg
+hairsalon/ricardo_maggiore_salon.jpg
+subway/subway_0259.jpg
+trainstation/gare_67_13_flickr.jpg
+grocerystore/integral_color4_detail.jpg
+dining_room/n15m.jpg
+office/interior004.jpg
+hairsalon/salon_coiffure_ca.jpg
+meeting_room/conf20.jpg
+deli/deli_08_18_yahoo.jpg
+bedroom/int139.jpg
+restaurant/restaurante_40_11_altavista.jpg
+bowling/bowling_0035.jpg
+operating_room/operating_room_04_19_altavista.jpg
+pantry/despensa_99_09_flickr.jpg
+casino/casino_0077.jpg
+tv_studio/estudio028_86_.jpg
+cloister/Graus_Claustro.jpg
+videostore/videoclub_03_23_flickr.jpg
+bedroom/IMG_9816.jpg
+jewelleryshop/shopinterior.jpg
+hospitalroom/UGHHPD010.jpg
+dining_room/dining2.jpg
+poolinside/schwimmbad003.jpg
+bar/bar_0435.jpg
+inside_subway/inside_subway_0171.jpg
+subway/subway_0460.jpg
+videostore/videoclub_04_19_flickr.jpg
+closet/8c.jpg
+prisoncell/jail_cell22.jpg
+warehouse/warehouse_0333.jpg
+bar/bar_0376.jpg
+concert_hall/GTPR_DiGiCo_VAC_04_LR.jpg
+casino/casino_0236.jpg
+warehouse/warehouse_0154.jpg
+dining_room/d3.jpg
+gameroom/gameroom_pocket.jpg
+restaurant_kitchen/restaurant_kitchen_google_0010.jpg
+waitingroom/Bistro_3_BMP.jpg
+dentaloffice/dentaire_11_13_flickr.jpg
+poolinside/0310_piscines_9.jpg
+classroom/sdeclasse2.jpg
+fastfood_restaurant/chip2.jpg
+florist/floreria_08_08_flickr.jpg
+casino/casino_0232.jpg
+toystore/jugueteria_04_03_flickr.jpg
+casino/casino_0018.jpg
+bookstore/Librairie_48_13_altavista.jpg
+greenhouse/invernadero_flores2.jpg
+hairsalon/1871389960_44f51e02e4.jpg
+kindergarden/pre2.jpg
+mall/3163.jpg
+artstudio/artist_studio_24_05_altavista.jpg
+office/int85.jpg
+bathroom/indoor_0187.jpg
+waitingroom/WebsiteWaitingRoom.jpg
+corridor/pasillo33_c.jpg
+locker_room/locker_room_google_0031.jpg
+kitchen/kitchen037.jpg
+studiomusic/int806.jpg
+bowling/bowling_0183.jpg
+trainstation/gare_03_09_altavista.jpg
+winecellar/wine_cellar_17_19_altavista.jpg
+office/o3.jpg
+locker_room/locker_room_google_0227.jpg
+corridor/p1010069_c.jpg
+deli/deli_47_17_flickr.jpg
+poolinside/69214_1.jpg
+mall/mbk_center.jpg
+bookstore/bookstore_41_04_altavista.jpg
+computerroom/Salle_Informatique_Bellavista_060831_2_1.jpg
+trainstation/gare_87_18_flickr.jpg
+gym/gimnasio_02_04_altavista.jpg
+artstudio/art_painting_studio_01_10_altavista.jpg
+casino/casino_0265.jpg
+dentaloffice/dental_office_46_03_altavista.jpg
+grocerystore/shop14.jpg
+corridor/p1010072_c.jpg
+bakery/144215_Delicious_bakery_0.jpg
+jewelleryshop/jewelry_store_case_1_9_21_.jpg
+locker_room/locker_room_google_0242.jpg
+studiomusic/fqtr_estudio.jpg
+bowling/bowling_0087.jpg
+restaurant_kitchen/restaurant_kitchen_google_0106.jpg
+clothingstore/Lacys_4.jpg
+auditorium/d38_img_1758_1__145.jpg
+fastfood_restaurant/dining_room.jpg
+gym/MSAC_Gym_20061515.jpg
+nursery/nursery1.jpg
+winecellar/Restaurant_Wine_Cellar_larg.jpg
+meeting_room/conference_room4.jpg
+casino/casino_0157.jpg
+library/store.jpg
+library/association_bibliotheque.jpg
+gym/gimnasio_40_24_flickr.jpg
+casino/casino_0455.jpg
+hospitalroom/HospitalRoom.jpg
+nursery/baba7.jpg
+children_room/AT_99_1_7839_22_l.jpg
+toystore/speelgoed_54_22_flickr.jpg
+lobby/erasme_acceuil.jpg
+church_inside/3810071_l.jpg
+elevator/elevator_google_0045.jpg
+meeting_room/conference_room_600.jpg
+restaurant_kitchen/restaurant_kitchen_google_0094.jpg
+bakery/new_bakery_33_09_altavista.jpg
+florist/floreria_05_07_flickr.jpg
+hairsalon/onglet_salon_d_application_paragraphe_coiffure.jpg
+movietheater/movietheater_google_0035.jpg
+museum/museum_127_04_flickr.jpg
+office/office17.jpg
+bowling/bowling_0111.jpg
+gym/HO_00_02_5304_28A_l.jpg
+closet/closet12345.jpg
+children_room/hiemstra_011_19_.jpg
+pantry/pantry_145_11_flickr.jpg
+movietheater/movietheater_google_0040.jpg
+auditorium/auditorium_back_30.jpg
+garage/GarageInside1.jpg
+library/763634302_e25f44402d.jpg
+lobby/lobby6.jpg
+nursery/enfant2.jpg
+subway/subway_0478.jpg
+bar/bar_0056.jpg
+church_inside/kirche_rueckansicht.jpg
+gym/refurbished_gym_equipment.jpg
+restaurant_kitchen/restaurant_kitchen_google_0092.jpg
+closet/LargeWalkin.jpg
+bowling/bowling_0145.jpg
+closet/JLH_deluxemaplea.jpg
+bathroom/interior015.jpg
+inside_bus/inside_bus_026.jpg
+deli/deli_34_20_flickr.jpg
+garage/3_CAR_GARAGE_1_1_25782352_std.jpg
+inside_subway/inside_subway_0269.jpg
+studiomusic/364906b0.jpg
+shoeshop/zapato_1.jpg
+florist/fleuriste_69.jpg
+nursery/2008_08_05_abc_nursery.jpg
+bakery/boulangerie_04_12_altavista.jpg
+florist/floreria_03_18_flickr.jpg
+library/207157437_14c21369e9.jpg
+classroom/classroom02.jpg
+bowling/bowling_0078.jpg
+stairscase/AT_04_03_2000_52_l.jpg
+jewelleryshop/412531_2.jpg
+meeting_room/conf03.jpg
+artstudio/art_painting_studio_24_02_altavista.jpg
+artstudio/art_painting_studio_15_16_altavista.jpg
+jewelleryshop/inside_18_.jpg
+kitchen/int35.jpg
+dining_room/lv_02_03_9714_10_l.jpg
+garage/CustomGarage006_1.jpg
+toystore/165.jpg
+bookstore/bookstore72.jpg
+warehouse/warehouse_0235.jpg
+inside_subway/inside_subway_0248.jpg
+jewelleryshop/joyeria_156_16_flickr.jpg
+bathroom/indoor_0332.jpg
+garage/InsideDoor.jpg
+hospitalroom/20080116aslocscreen3_500.jpg
+gym/gimnasio_21_14_altavista.jpg
+library/bibliotheaaak.jpg
+church_inside/243069.jpg
+hairsalon/hair_salon.jpg
+toystore/109_0940.jpg
+dining_room/indoor_0314.jpg
+restaurant/restaurant_12_01_altavista.jpg
+shoeshop/013D2RIO001_1.jpg
+lobby/lobby56.jpg
+greenhouse/greenhouse_981.jpg
+nursery/babys_room.jpg
+deli/deli_68_06_flickr.jpg
+waitingroom/27_blood_donation_waiting_full.jpg
+warehouse/warehouse_0075.jpg
+buffet/lg_buffet_table.jpg
+children_room/indoor_playroom_27_.jpg
+museum/museo_124_20_flickr.jpg
+auditorium/c54884a_19601d8_b_1__142.jpg
+gameroom/OR_99_3_4797_22_l.jpg
+stairscase/N190079.jpg
+corridor/couloir_ch1_5e.jpg
+locker_room/locker_room_google_0132.jpg
+bathroom/indoor_0364.jpg
+florist/florist_26_04_flickr.jpg
+laboratorywet/laboratorio_quimica_07_11_altavista.jpg
+hospitalroom/hospital_room_lighting.jpg
+waitingroom/waiting_room03.jpg
+casino/casino_0452.jpg
+children_room/100_1678_4_.jpg
+hairsalon/salon1_gr.jpg
+warehouse/warehouse_0413.jpg
+toystore/299724113_39b3a2b7f8.jpg
+bakery/boulangerie_50_12_yahoo.jpg
+auditorium/ptamphi_1__165.jpg
+hairsalon/salon2.jpg
+livingroom/indoor_0311.jpg
+cloister/Picture159.jpg
+auditorium/auditorium_from_stage_1__44.jpg
+fastfood_restaurant/DSCF0039.jpg
+elevator/elevator_google_0091.jpg
+mall/31990541_ShanghaiDepartmentStoreNanjingRoad002.jpg
+movietheater/sala_de_cine_13_15_altavista.jpg
+winecellar/wine_cellar_air_conditioning.jpg
+meeting_room/conference8.jpg
+hospitalroom/room232.jpg
+restaurant_kitchen/restaurant_kitchen_google_0086.jpg
+bowling/bowling_0176.jpg
+tv_studio/tv_studio_40_12_altavista.jpg
+gym/118094196_dd8cc14df0.jpg
+stairscase/treppe_birke_edelstahl_01.jpg
+computerroom/BGEOG_salle_informatique.jpg
+stairscase/Treppen_03.jpg
+inside_bus/inside_bus_054.jpg
+laboratorywet/01exbiochem.jpg
+deli/deli_49_18_altavista.jpg
+hospitalroom/ToFiladelfia_Hospital_Saddlery.jpg
+prisoncell/prison_cell_41_02_altavista.jpg
+videostore/videoclub_04_02_yahoo.jpg
+closet/closet35.jpg
+inside_bus/inside_bus_064.jpg
+mall/y1pSu087_GTs3Qjf_zXRR_cQ05_sTqPwFpKHEiAthZJft3pnI3nF082_H06_1yvbjB5hJ0EhbGFFXE.jpg
+studiomusic/studio_1.jpg
+videostore/video_store_02_09_altavista.jpg
+florist/floristeria3.jpg
+greenhouse/bob_black_greenhouse.jpg
+winecellar/wine_cellar_43_11_altavista.jpg
+museum/museo_18_12_altavista.jpg
+locker_room/locker_room_google_0052.jpg
+operating_room/operating_room_23_20_altavista.jpg
+operating_room/surgery_room_06_08_altavista.jpg
+museum/museum_44_10_altavista.jpg
+airport_inside/airport_inside_0281.jpg
+garage/garage_11.jpg
+kindergarden/actvitycenterwacr.jpg
+livingroom/int4.jpg
+greenhouse/invernadero_2.jpg
+clothingstore/japan_2006_1153069200_harajuku2.jpg
+inside_bus/inside_bus_018.jpg
+videostore/blockbuster_11_05_flickr.jpg
+subway/subway_0435.jpg
+trainstation/estacion_de_ferrocarriles_28_14_altavista.jpg
+hospitalroom/IMG_1901.jpg
+children_room/fairfield_real_estate_85dogwood_playroom_750_17_.jpg
+dentaloffice/dentista_35_11_flickr.jpg
+bakery/panaderia_36_07_yahoo.jpg
+laboratorywet/wet_lab_12_13_altavista.jpg
+laundromat/685px_Laundromat_ontario.jpg
+stairscase/int538.jpg
+gym/gimnasio_21_11_altavista.jpg
+meeting_room/n457000.jpg
+trainstation/train_station_01_10_altavista.jpg
+library/204942053_a5d52d7746.jpg
+office/office1.jpg
+closet/closet2_1.jpg
+dining_room/int473.jpg
+classroom/salle_classe.jpg
+concert_hall/Goldenesaal.jpg
+restaurant_kitchen/restaurant_kitchen_google_0027.jpg
+corridor/c3.jpg
+operating_room/surgery_room_19_02_altavista.jpg
+hospitalroom/SuperStock_1444R-256189.jpg
+jewelleryshop/mobicolor_8416.jpg
+laboratorywet/wet_lab_13_04_altavista.jpg
+bathroom/indoor_0486.jpg
+office/despacho.jpg
+bakery/boulangerie_12_11_yahoo.jpg
+children_room/img_1896_23_.jpg
+bedroom/indoor_0430.jpg
+bar/bar_0313.jpg
+corridor/c9.jpg
+kindergarden/IMG_2325_t600.jpg
+clothingstore/url.jpg
+deli/deli_23_05_yahoo.jpg
+garage/hdts1013_Garage_aft_photo_w609.jpg
+dining_room/d8.jpg
+poolinside/inside_romney.jpg
+fastfood_restaurant/quick.jpg
+trainstation/gare_99_24_flickr.jpg
+classroom/auingl.jpg
+bathroom/bothroom99.jpg
+computerroom/dekdi3gv0.jpg
+mall/2904502_Podium_shopping_mall_Mandaluyong.jpg
+videostore/videoteca_07_05_flickr.jpg
+prisoncell/prison_cell_08_19_altavista.jpg
+casino/casino_0027.jpg
+fastfood_restaurant/Blimpie_Columbia_002.jpg
+hospitalroom/hospital_room_08_07_altavista.jpg
+buffet/15_The_Buffet_small.jpg
+tv_studio/estudio_de_television_01_04_altavista.jpg
+classroom/244class.jpg
+pantry/bob_connie_kitchen_pantry_after_02.jpg
+greenhouse/segu_est.jpg
+mall/mall22.jpg
+meeting_room/c4.jpg
+stairscase/L_Opera_Escalier_pr.jpg
+studiomusic/lime_grove_music_studio_bob_foley.jpg
+children_room/dsc_0090_16_.jpg
+garage/ddt_3_03_garage_interior.jpg
+stairscase/3Miguel_Angel_Vestibule_of_the_Laurentian_Library.jpg
+grocerystore/P3260270.jpg
+nursery/nursery___crib.jpg
+operating_room/surgery_room_37_18_altavista.jpg
+pantry/12.jpg
+subway/subway_0418.jpg
+corridor/p1010810_c.jpg
+inside_subway/metropolitana_55_12_flickr.jpg
+clothingstore/freeClothing.jpg
+florist/p1_1.jpg
+laundromat/Laundromatyu.jpg
+gameroom/CA_97_5_294_22_l.jpg
+jewelleryshop/joyeros.jpg
+nursery/f3eda62a_8161_459e_9154_08c87eca8f96_player.jpg
+tv_studio/estudio_fotografico_84_.jpg
+auditorium/9_auditorium_20balcony_20contemporary_20_the_20carlu__20.jpg
+casino/casino_0011.jpg
+dining_room/d16.jpg
+deli/deli_152_23_flickr.jpg
+lobby/lobby_122222.jpg
+subway/subway_0285.jpg
+toystore/speelgoed_78_15_flickr.jpg
+auditorium/auditorium_reserved_seating_003_sized_1__45.jpg
+laundromat/lavanderia01.jpg
+kitchen/kitchen089.jpg
+restaurant/restaurant_09_10_altavista.jpg
+auditorium/658_1_457_1__14.jpg
+locker_room/locker_room_google_0135.jpg
+prisoncell/hi_res.jpg
+gameroom/AA_A9_GAMEROOM.jpg
+artstudio/artist_work_place_07_07_altavista.jpg
+garage/Garage_Inside_44.jpg
+locker_room/locker_room_google_0186.jpg
+grocerystore/Grocery02.jpg
+casino/casino_0224.jpg
+library/library_bookshelves_large.jpg
+mall/p282857_Dsseldorf_Shopping_Mall.jpg
+casino/casino_0436.jpg
+museum/museo_72_07_flickr.jpg
+library/68522859_a36fa01d31.jpg
+casino/casino_0434.jpg
+hairsalon/radius_main_17Mar2008101648939000.jpg
+buffet/109484501_3d010b4367.jpg
+library/scaihs_bookstore2.jpg
+bedroom/indoor_0588.jpg
+bowling/bowling_0003.jpg
+tv_studio/xleague_tv_studio_with_steven_tu_76_.jpg
+airport_inside/airport_inside_0295.jpg
+deli/deli_103_09_flickr.jpg
+corridor/c21.jpg
+laundromat/lavanderia_72_12_flickr.jpg
+dentaloffice/dentist1.jpg
+movietheater/102_1__2.jpg
+airport_inside/airport_inside_0523.jpg
+dentaloffice/dentaloffice06.jpg
+computerroom/comproom348.jpg
+stairscase/int18.jpg
+computerroom/hank_comproom_lg.jpg
+dentaloffice/dentista_109_09_flickr.jpg
+meeting_room/n457001.jpg
+videostore/video_store470.jpg
+restaurant_kitchen/restaurant_kitchen_google_0023.jpg
+artstudio/artist_studio_33_16_altavista.jpg
+warehouse/warehouse_0191.jpg
+lobby/Hall1Planta.jpg
+movietheater/salle_cinema.jpg
+trainstation/gare_102_04_flickr.jpg
+mall/center_point.jpg
+mall/791.jpg
+computerroom/computerroom08.jpg
+elevator/elevator_google_0095.jpg
+corridor/pasillo2_c.jpg
+computerroom/open_computer_room.jpg
+kindergarden/DSC05012.jpg
+buffet/AsianDeliCounterWeb.jpg
+casino/casino_0046.jpg
+operating_room/operating_room_24_20_altavista.jpg
+stairscase/room192.jpg
+videostore/videoclub_03_19_flickr.jpg
+bakery/bakery_07_10_yahoo.jpg
+dining_room/dining16.jpg
+restaurant_kitchen/restaurant_kitchen_google_0017.jpg
+florist/florist_29_08_flickr.jpg
+subway/subway_0043.jpg
+auditorium/auditorium44_113.jpg
+bowling/bowling_0175.jpg
+airport_inside/airport_inside_0071.jpg
+fastfood_restaurant/26338834.jpg
+tv_studio/victor_tv_studio_121_.jpg
+gameroom/sala_de_juegos_17_01_altavista.jpg
+lobby/lobby22345.jpg
+movietheater/cinema_altkirch_3_46.jpg
+locker_room/locker_room_google_0054.jpg
+computerroom/scuola06_2.jpg
+lobby/pinelakeLOBBY01large.jpg
+waitingroom/development_lab_wait_room_chairs.jpg
+bakery/best_bakery_10_17_altavista.jpg
+artstudio/artist_studio_49_10_altavista.jpg
+fastfood_restaurant/2274247982_b8a09af8c5.jpg
+waitingroom/hg_waiting_room_v.jpg
+bathroom/room270.jpg
+closet/url5678.jpg
+jewelleryshop/sanfrancisco_poodle_ga_45_.jpg
+livingroom/or_02_04_0211_14_l.jpg
+hairsalon/peluqueria1.jpg
+bedroom/indoor_0085.jpg
+subway/subway_0366.jpg
+florist/floreria_05_13_flickr.jpg
+closet/elfaDecorBrchWhtDreamCloset_l.jpg
+trainstation/gare_133_22_flickr.jpg
+dining_room/lv_02_04_10917_23a_l.jpg
+cloister/florence_Santa_Maria_Novella_Cloister.jpg
+warehouse/warehouse_0081.jpg
+laboratorywet/wet_lab_30_06_altavista.jpg
+dentaloffice/dentista_128_15_flickr.jpg
+laboratorywet/wet_lab_51_06_altavista.jpg
+inside_subway/metropolitana_54_11_flickr.jpg
+meeting_room/n457014.jpg
+poolinside/pool_inside_16_03_altavista.jpg
+bathroom/100_0281.jpg
+inside_subway/inside_subway_0092.jpg
+stairscase/lest_b.jpg
+prisoncell/7_Jail_Cells.jpg
+elevator/elevator_google_0005.jpg
+bowling/bowling_0080.jpg
+cloister/cloister2s.jpg
+prisoncell/carcel_139_19_flickr.jpg
+grocerystore/supermarche467.jpg
+fastfood_restaurant/2008_02_mcdonalds_thumb.jpg
+dining_room/dining006.jpg
+inside_subway/inside_subway_0223.jpg
+bakery/bakery_display_case.jpg
+restaurant/restaurant_30_06_altavista.jpg
+classroom/classroom03.jpg
+prisoncell/Prison04.jpg
+waitingroom/Waiting_Room_sized.jpg
+florist/florist_64_05_flickr.jpg
+hospitalroom/Elijah_040.jpg
+shoeshop/1.jpg
+subway/subway_0336.jpg
+tv_studio/tv_studio_09_20_altavista.jpg
+mall/GUM_Department_Store.jpg
+dentaloffice/KovacsLSC1_web.jpg
+movietheater/sala_de_cine_01_18_altavista.jpg
+closet/1.jpg
+trainstation/train_station_34_15_altavista.jpg
+bathroom/dublin___apartamento___29_03_2007_006.jpg
+fastfood_restaurant/ElRapido.jpg
+gameroom/WedSocial_Graceland_GameRoom_2.jpg
+jewelleryshop/joyeria_23_07_altavista.jpg
+lobby/savoy_int_vestibule.jpg
+movietheater/movietheater_google_0016.jpg
+shoeshop/zapateria_03_20_flickr.jpg
+office/interior003.jpg
+kindergarden/toddler3.jpg
+library/bookstore_more_books.jpg
+corridor/indoor_0233.jpg
+meeting_room/n457002.jpg
+inside_bus/inside_bus_050.jpg
+deli/deli_43_10_altavista.jpg
+meeting_room/n457011.jpg
+prisoncell/jail_cell_jpg.jpg
+classroom/int57.jpg
+locker_room/locker_room_google_0097.jpg
+subway/subway_0204.jpg
+nursery/nursery6.jpg
+kindergarden/two1.jpg
+fastfood_restaurant/taco_bell_waikiki_counter.jpg
+trainstation/train_station_05_20_altavista.jpg
+greenhouse/ART2901025.jpg
+bedroom/indoor_0557.jpg
+casino/casino_0039.jpg
+laboratorywet/wet_lab_40_18_altavista.jpg
+deli/new_deli_27_08_altavista.jpg
+bowling/bowling_0182.jpg
+prisoncell/JailCells.jpg
+gameroom/sala_de_juegos_17_14_altavista.jpg
+operating_room/operating_room_23_02_altavista.jpg
+pantry/pantry_20_09_flickr.jpg
+restaurant/restaurant_02_14_altavista.jpg
+shoeshop/zapateria_09_15_flickr.jpg
+trainstation/gare_148_21_flickr.jpg
+casino/casino_0215.jpg
+museum/museum_42_03_altavista.jpg
+nursery/dsc00680_778004.jpg
+operating_room/surgery_room_02_20_altavista.jpg
+closet/MainPageCloset2.jpg
+fastfood_restaurant/NYBCinside1.jpg
+tv_studio/tv_studio_2b_71_.jpg
+warehouse/warehouse_0394.jpg
+inside_subway/inside_subway_0396.jpg
+poolinside/piscine2.jpg
+grocerystore/shop18.jpg
+artstudio/art_painting_studio_31_09_altavista.jpg
+warehouse/warehouse_0488.jpg
+concert_hall/p09_symphony.jpg
+movietheater/sala_de_cine_06_19_altavista.jpg
+bathroom/room316.jpg
+hospitalroom/hospitalroom1.jpg
+library/fine_arts.jpg
+library/image_preview.jpg
+toystore/Peluqueria_043.jpg
+videostore/02_02.jpg
+inside_bus/inside_bus_056.jpg
+gameroom/salle_de_jeux_05_19_altavista.jpg
+hairsalon/salon_page.jpg
+meeting_room/n457007.jpg
+videostore/videoteca_06_20_flickr.jpg
+elevator/elevator_google_0063.jpg
+florist/fleuriste_008.jpg
+videostore/videoclub_07_04_flickr.jpg
+laundromat/404776986_34fc3c3d65.jpg
+toystore/toys_store_43_15_altavista.jpg
+bar/bar_0183.jpg
+bookstore/bookstore_41_05_flickr.jpg
+movietheater/2421694668_810471b4cc_1__7.jpg
+gameroom/OR_97_3_5172_33_l.jpg
+bedroom/b17.jpg
+bowling/bowling_0189.jpg
+operating_room/operating_room_11_07_altavista.jpg
+buffet/133_3369_IMG.jpg
+concert_hall/hall.jpg
+dining_room/dining35.jpg
+office/office_13.jpg
+fastfood_restaurant/food_450.jpg
+lobby/int52.jpg
+toystore/UMW_Rummage_Before_Boutique_with_dolls_780356.jpg
+dentaloffice/tworivers23.jpg
+restaurant/restaurante_04_17_altavista.jpg
+toystore/CIMG3313.jpg
+restaurant/restaurant_05_04_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0048.jpg
+movietheater/scr_bluetheatre2jan19.jpg
+classroom/Classroom4.jpg
+laboratorywet/wet_lab_18_02_altavista.jpg
+buffet/31248686_d2f7aa4f63.jpg
+toystore/jugueteria_14_15_flickr.jpg
+bar/bar_0362.jpg
+bookstore/Libreria_08_03_altavista.jpg
+tv_studio/1189186334_extras_video_1_8_.jpg
+closet/custom_closet.jpg
+kitchen/kitchen055.jpg
+studiomusic/recording_studio.jpg
+airport_inside/airport_inside_0040.jpg
+children_room/SD_00_03_4446_23_l.jpg
+bedroom/indoor_0047.jpg
+deli/deli_02_21_yahoo.jpg
+pantry/23_org_Pantry.jpg
+trainstation/estacion_de_tren_04_17_altavista.jpg
+warehouse/warehouse_0111.jpg
+bakery/boulangerie_19_13_yahoo.jpg
+dining_room/Dining4.jpg
+kindergarden/preschool_crafts.jpg
+bowling/bowling_0109.jpg
+casino/casino_0004.jpg
+concert_hall/DInsidefromstage.jpg
+bar/bar_0216.jpg
+corridor/va_04_01_5000_32_l.jpg
+garage/GarageInside2.jpg
+artstudio/art_painting_studio_16_08_altavista.jpg
+bowling/bowling_0031.jpg
+buffet/208671604_b7839a0955.jpg
+videostore/video_store.jpg
+clothingstore/bg_149.jpg
+church_inside/churchinterior02.jpg
+mall/mall35.jpg
+office/n457028.jpg
+buffet/buffet678.jpg
+bathroom/indoor_0279.jpg
+restaurant/restaurant_51_11_altavista.jpg
+nursery/shakery_square.jpg
+buffet/P1011257_fs.jpg
+church_inside/292054.jpg
+tv_studio/set_camera_465x370_98_.jpg
+videostore/videoteca_13_12_altavista.jpg
+meeting_room/n457022.jpg
+operating_room/operating_room_23_11_altavista.jpg
+kitchen/kitchen054.jpg
+bar/bar_0116.jpg
+hairsalon/PELUQUERIA_EROTICA_1155_3.jpg
+laundromat/img_2196was.jpg
+studiomusic/Beach_Studio.jpg
+prisoncell/pariscellR_450x348.jpg
+hairsalon/salon_karin_pc080164.jpg
+restaurant_kitchen/restaurant_kitchen_google_0033.jpg
+classroom/Classroom11.jpg
+gameroom/AT_04_05_5000_58_l.jpg
+movietheater/sala_cine2.jpg
+computerroom/mr_ordinateur.jpg
+corridor/IMG_0065.jpg
+casino/casino_0160.jpg
+shoeshop/eaed369ae9edc95c6c795ba27783.jpg
+elevator/elevator_google_0008.jpg
+auditorium/auditorium09_104.jpg
+museum/museum_01_01_altavista.jpg
+tv_studio/0421_6_.jpg
+corridor/p1010063_c.jpg
+corridor/img_0005.jpg
+mall/metcalf_south_09.jpg
+bedroom/indoor_0341.jpg
+dining_room/dining025.jpg
+airport_inside/airport_inside_0169.jpg
+corridor/pasillo.jpg
+restaurant/Salle_restaurant_reduit.jpg
+closet/gallery_1_large_schulte_closets.jpg
+corridor/corridora1.jpg
+nursery/chambre_enfant_apres.jpg
+locker_room/locker_room_google_0015.jpg
+children_room/LV_00_03_2844_08_l.jpg
+jewelleryshop/30446026.jpg
+pantry/pantry_775384.jpg
+gameroom/AT_01_2B_5492_21A_l.jpg
+bookstore/manga_at_the_bookstore.jpg
+dining_room/fw_97_2_0861_5_l.jpg
+pantry/2323232327Ffp3323Enu3D32473E33C83E83B83EWSNRCG3D32323B93B844425nu0mrj1_87161114_std.jpg
+toystore/toys_store_48_16_altavista.jpg
+tv_studio/tv_studio_01_18_altavista.jpg
+museum/museum_149_08_flickr.jpg
+studiomusic/JUK30_JP6_Hifi_RackLit.jpg
+church_inside/malbis_church_altar_big.jpg
+elevator/elevator_google_0075.jpg
+florist/florist_40_12_altavista.jpg
+mall/mall27.jpg
+buffet/ImpBuffet_0268.jpg
+deli/new_deli_21_15_altavista.jpg
+hairsalon/Image016_17.jpg
+bakery/bakery_23_06_yahoo.jpg
+inside_bus/inside_bus_046.jpg
+locker_room/locker_room_google_0220.jpg
+operating_room/surgery_room_50_15_altavista.jpg
+lobby/6059968_lobby.jpg
+restaurant_kitchen/restaurant_kitchen_google_0015.jpg
+clothingstore/MVC_014F.jpg
+artstudio/homeoff006.jpg
+studiomusic/djban_curso_dj_01.jpg
+museum/museum_116_08_flickr.jpg
+kitchen/kitchen15.jpg
+casino/casino_0235.jpg
+studiomusic/Estudio_Musica_1.jpg
+deli/deli_110_20_flickr.jpg
+dentaloffice/farr_11.jpg
+shoeshop/zapateria_04_18_flickr.jpg
+children_room/web_playroom_70_.jpg
+children_room/2369460826_37998bb932_7_.jpg
+dentaloffice/dentista_09_05_altavista.jpg
+pantry/pantry_91_15_flickr.jpg
+trainstation/room213.jpg
+bar/bar_0126.jpg
+greenhouse/letter_greenhouse.jpg
+pantry/web_pantr1.jpg
+dining_room/sa_97_4_757_21_l.jpg
+nursery/nursery5.jpg
+laboratorywet/wet_lab_45_04_altavista.jpg
+lobby/Raffles_Marina_lobby.jpg
+pantry/pantry_140_10_flickr.jpg
+tv_studio/tv_studio_11_16_altavista.jpg
+garage/onsite_insidebg.jpg
+movietheater/prod_photo1_377_1146674705_1__32.jpg
+buffet/450407910_0c165a37aa.jpg
+church_inside/Kirche_Mitterdorf_0050_web.jpg
+closet/closet_ts.jpg
+garage/gar7.jpg
+waitingroom/sala_de_espera_02_04_altavista.jpg
+clothingstore/Lacys_6.jpg
+buffet/june_29_FOOD_BUFFET_002.jpg
+clothingstore/STORE_032.jpg
+laboratorywet/wet_lab_10_14_altavista.jpg
+toystore/magasin_jouet_39_19_altavista.jpg
+casino/casino_0476.jpg
+waitingroom/waitingroom.jpg
+livingroom/l6.jpg
+inside_subway/inside_subway_0277.jpg
+fastfood_restaurant/HK_Pizza_Hut.jpg
+inside_bus/inside_bus_013.jpg
+florist/florist_15_14_altavista.jpg
+gameroom/smallsp001.jpg
+classroom/Wicoff_Classroom_1.jpg
+corridor/p1010073_c.jpg
+deli/deli_149_08_flickr.jpg
+elevator/elevator_google_0026.jpg
+inside_subway/inside_subway_0254.jpg
+warehouse/warehouse_0176.jpg
+laundromat/lavanderia_53_15_flickr.jpg
+kitchen/kitchen033.jpg
+auditorium/amphi_gb2_1_1__22.jpg
+locker_room/locker_room_google_0199.jpg
+dining_room/dining013.jpg
+kindergarden/classroom12.jpg
+laundromat/lavanderia_51_19_flickr.jpg
+livingroom/living24.jpg
+bowling/bowling_0042.jpg
+restaurant/restaurant_29_06_altavista.jpg
+gameroom/gameroom_c1.jpg
+gameroom/salle_de_jeux_03_12_altavista.jpg
+waitingroom/waiting_room_large.jpg
+bakery/bakery_01_17_yahoo.jpg
+bathroom/interior017.jpg
+gameroom/OR_99_9_0039_06_l.jpg
+warehouse/warehouse_0006.jpg
+airport_inside/airport_inside_0204.jpg
+artstudio/art_painting_studio_04_17_altavista.jpg
+bedroom/roomscan2.jpg
+prisoncell/Men_Jail2.jpg
+laundromat/Ricks_laundromat_pictures_april_2007_133.jpg
+pantry/pantry_87_18_flickr.jpg
+warehouse/warehouse_0084.jpg
+elevator/elevator_google_0054.jpg
+grocerystore/super_market.jpg
+laundromat/3170849.jpg
+deli/deli_111_14_flickr.jpg
+grocerystore/Supermercado1.jpg
+subway/subway_0173.jpg
+corridor/allee2yp.jpg
+library/bibliotheque_0908.jpg
+pantry/pantry_43_23_flickr.jpg
+meeting_room/conference2.jpg
+pantry/pantry_48_07_flickr.jpg
+nursery/nursery_005.jpg
+shoeshop/zapateria_27_21_flickr.jpg
+kindergarden/DSC000512.jpg
+classroom/classroom5.jpg
+florist/11528159612.jpg
+florist/ildo_encabo_150206_c_ok.jpg
+bathroom/indoor_0124.jpg
+elevator/elevator_google_0006.jpg
+tv_studio/35_20_.jpg
+museum/museo_157_13_flickr.jpg
+nursery/completed_nursery_010.jpg
+restaurant_kitchen/restaurant_kitchen_google_0037.jpg
+bowling/bowling_0149.jpg
+dining_room/room503.jpg
+inside_subway/inside_subway_0169.jpg
+museum/museo_137_20_flickr.jpg
+toystore/59516206_45f74119d6.jpg
+laboratorywet/wet_lab_12_17_altavista.jpg
+bedroom/b29.jpg
+bookstore/librairie_gif.jpg
+museum/museo_158_20_flickr.jpg
+concert_hall/ven_chall_big.jpg
+florist/floreria_08_21_flickr.jpg
+computerroom/ordinateurs.jpg
+concert_hall/photo2.jpg
+locker_room/locker_room_google_0112.jpg
+mall/lakeside_center_42.jpg
+concert_hall/milwaukeetheatre.jpg
+nursery/babyroomshelves.jpg
+videostore/videoclub_09_19_flickr.jpg
+airport_inside/airport_inside_0107.jpg
+locker_room/locker_room_google_0066.jpg
+toystore/speelgoed_45_01_flickr.jpg
+closet/MasterSuiteLaminateWI.jpg
+airport_inside/airport_inside_0163.jpg
+hairsalon/mfotos_peluqueria_001.jpg
+church_inside/P1000169.jpg
+buffet/buffetmetro_533.jpg
+stairscase/N457080.jpg
+movietheater/cine_sony.jpg
+gameroom/room397.jpg
+office/ins26.jpg
+fastfood_restaurant/quiznos020508a.jpg
+bedroom/indoor_0215.jpg
+prisoncell/Jail_DSC00095.jpg
+church_inside/kirche_innen_2.jpg
+dentaloffice/dental_office_20_20_altavista.jpg
+library/New_York_Public_Library5.jpg
+buffet/1600963137_2dc4c3f005.jpg
+laundromat/lavanderia_19_19_flickr.jpg
+hairsalon/salon1.jpg
+deli/deli_121_18_flickr.jpg
+mall/abasto_mall.jpg
+tv_studio/tv_studio_03_03_altavista.jpg
+laundromat/maytagLAUNDNORTHVIEW.jpg
+office/despacho_medico_2.jpg
+bar/bar_0081.jpg
+classroom/classroom12.jpg
+deli/deli_27_12_yahoo.jpg
+jewelleryshop/rewardsstore2_27_.jpg
+nursery/photo_5353117.jpg
+dining_room/int294.jpg
+greenhouse/invernadero01.jpg
+jewelleryshop/img_5204_36_.jpg
+bookstore/Libreria_27_16_altavista.jpg
+laundromat/lavanderia_60_01_flickr.jpg
+florist/florist_28_12_flickr.jpg
+operating_room/operating_room_25_02_altavista.jpg
+fastfood_restaurant/Subway1.jpg
+gym/gym11.jpg
+kindergarden/classroom_october.jpg
+cloister/claustro_san_francisco.jpg
+hospitalroom/Afghan_Hospital_Room_sized.jpg
+movietheater/movietheater_google_0057.jpg
+church_inside/FreeFoto_castle_30_36.jpg
+bakery/boulangerie_32_16_yahoo.jpg
+movietheater/projection_hippo_1__59.jpg
+office/office10.jpg
+bowling/bowling_0055.jpg
+nursery/2502867662_5fc6c074f4.jpg
+tv_studio/tv_studio4_117_.jpg
+library/meura1.jpg
+pantry/pantry_97_19_flickr.jpg
+classroom/classroom86.jpg
+bookstore/bookstore_02.jpg
+garage/Garage104_w560h420.jpg
+shoeshop/ZAPATERIA43.jpg
+trainstation/gare_63_02_flickr.jpg
+hairsalon/Salon254.jpg
+kitchen/int362.jpg
+fastfood_restaurant/rss_d.jpg
+jewelleryshop/sjstore2_28_.jpg
+shoeshop/gallery342.jpg
+gym/gimnasio_17_08_altavista.jpg
+restaurant/restaurant_31_10_altavista.jpg
+garage/Garage_After.jpg
+studiomusic/60984.jpg
+gameroom/AT_01_6B_5479_25_l.jpg
+kitchen/int423.jpg
+children_room/playroom_1_34_.jpg
+classroom/sala_de_clases.jpg
+tv_studio/dscn9703_41_.jpg
+artstudio/art_painting_studio_01_13_altavista.jpg
+grocerystore/zoom_1_1188095.jpg
+dining_room/int468.jpg
+subway/subway_0172.jpg
+kitchen/cdmc1146.jpg
+children_room/playroom6_31_.jpg
+inside_bus/inside_bus_016.jpg
+nursery/mayalau_robot_nursery.jpg
+operating_room/surgery_room_08_16_altavista.jpg
+bedroom/indoor_0113.jpg
+church_inside/kirche_innen.jpg
+bowling/bowling_0027.jpg
+meeting_room/c20.jpg
+jewelleryshop/joyeria_01g.jpg
+inside_bus/inside_bus_007.jpg
+warehouse/warehouse_0040.jpg
+grocerystore/supermarkt_fr.jpg
+locker_room/locker_room_google_0046.jpg
+tv_studio/21lg_15_.jpg
+closet/closet_2.jpg
+gym/Gym2_png.jpg
+poolinside/pool_inside_24_13_altavista.jpg
+greenhouse/Greenhouse_2.jpg
+stairscase/CA_97_1_289_24A_l.jpg
+dentaloffice/dental_office_01_04_altavista.jpg
+bowling/bowling_0166.jpg
+dining_room/dining41.jpg
+bakery/panaderia_49_21_yahoo.jpg
+closet/closet01.jpg
+subway/subway_0224.jpg
+auditorium/amphi01_1__77.jpg
+dentaloffice/dental_office_49_03_altavista.jpg
+library/library05.jpg
+casino/casino_0049.jpg
+pantry/11.jpg
+bathroom/room315.jpg
+concert_hall/KnightHallMiami460.jpg
+inside_bus/inside_bus_011.jpg
+movietheater/auditorium609_37.jpg
+inside_subway/inside_subway_0259.jpg
+bathroom/b1.jpg
+closet/Clothed_Closet_photo_300px_22Mar00.jpg
+inside_subway/inside_subway_0191.jpg
+poolinside/poolMain.jpg
+trainstation/gare_100_19_flickr.jpg
+dentaloffice/dental_office_17_06_altavista.jpg
+lobby/sLobby16.jpg
+concert_hall/concert_Hall.jpg
+florist/florist_19_14_altavista.jpg
+church_inside/283421883_0a184e7b4d.jpg
+library/112630581_f21ae30872.jpg
+closet/Master-Closet.jpg
+jewelleryshop/20040407a01.jpg
+deli/deli_59_09_flickr.jpg
+gameroom/317_salle_de_jeux.jpg
+hospitalroom/Hospital_Room_30.jpg
+meeting_room/n457004.jpg
+cloister/2474769210_7847df4894.jpg
+bakery/panaderia_49_08_yahoo.jpg
+movietheater/cinema2_47.jpg
+bakery/boulangerie_01_05_yahoo.jpg
+nursery/url.jpg
+shoeshop/zapateria_07_11_flickr.jpg
+garage/XF_HOMES_400.jpg
+laundromat/LV_02_03_9714_21_l.jpg
+meeting_room/n457037.jpg
+greenhouse/Fabricated_Metal_Plastic_Tube_Greenhouse.jpg
+subway/subway_0337.jpg
+laboratorywet/laboratorio_quimica_12_15_altavista.jpg
+meeting_room/conf02.jpg
+studiomusic/DSCN3237M.jpg
+clothingstore/Bookstore_Interior_rdax_90.jpg
+lobby/sLobby10.jpg
+bar/bar_0066.jpg
+classroom/Laura_Lander_SMART_Classroom.jpg
+gameroom/Gameroom7.jpg
+airport_inside/airport_inside_0253.jpg
+bedroom/indoor_0267.jpg
+church_inside/metropolitana_160_23_flickr.jpg
+laundromat/lavanderia_09_22_flickr.jpg
+livingroom/iship.jpg
+studiomusic/DCOM_Music_lg_nws_2164_5043.jpg
+videostore/videostore2.jpg
+nursery/babys_room_crib_714240.jpg
+bakery/boulangerie_31_05_yahoo.jpg
+clothingstore/Lulas_017_VG6D.jpg
+bar/bar_0372.jpg
+dining_room/d13.jpg
+clothingstore/home0001.jpg
+kitchen/img_6613.jpg
+winecellar/bodega_44_19_flickr.jpg
+nursery/baby_room_sm.jpg
+waitingroom/icu_waiting_room_1.jpg
+meeting_room/conf27.jpg
+office/office8.jpg
+grocerystore/MG_56_belo_grocery_2.jpg
+bowling/bowling_0088.jpg
+bedroom/b12.jpg
+gameroom/OR_02_05_0481_11_l.jpg
+museum/museo_161_02_flickr.jpg
+nursery/perfect_nursery_shot.jpg
+bakery/new_bakery_16_09_altavista.jpg
+nursery/idkidsc0301_png.jpg
+cloister/cloister_med.jpg
+church_inside/243088.jpg
+florist/florist_41_11_flickr.jpg
+computerroom/informatica.jpg
+videostore/videotheque_02_01_flickr.jpg
+dentaloffice/dentaloffice05.jpg
+nursery/chambre_enfant_avant.jpg
+bedroom/bed2.jpg
+laboratorywet/wet_lab_46_11_altavista.jpg
+buffet/413438433_cdcef3db3e.jpg
+poolinside/piscina_cubierta_02_13_altavista.jpg
+clothingstore/d0001.jpg
+gym/SalleMuscu.jpg
+toystore/toys_store_01_08_altavista.jpg
+hospitalroom/causulty_room.jpg
+movietheater/movie-theater.jpg
+mall/Rome_Shopping_mall.jpg
+warehouse/warehouse_0056.jpg
+museum/museum_41_03_altavista.jpg
+office/ph_02_03_4680_35_l.jpg
+pantry/62277822_SbYbMw5F.jpg
+kindergarden/classroom233.jpg
+stairscase/HO_00_04_5808_09A_l.jpg
+clothingstore/1.jpg
+greenhouse/gewaechshaus_4.jpg
+restaurant_kitchen/restaurant_kitchen_google_0022.jpg
+prisoncell/Photo28120.jpg
+jewelleryshop/1ct1.jpg
+videostore/videoclub_04_17_flickr.jpg
+prisoncell/large_new-jail-cell.jpg
+waitingroom/waiting_room_32_20_altavista.jpg
+nursery/313886124_6ed775cde1.jpg
+computerroom/biblioteca1.jpg
+movietheater/movietheater_google_0051.jpg
+church_inside/steinh2.jpg
+classroom/CLASSE3.jpg
+airport_inside/airport_inside_0176.jpg
+dentaloffice/dentaire_27_16_altavista.jpg
+museum/museum_38_03_altavista.jpg
+pantry/despensa_02_20_altavista.jpg
+operating_room/operating_room_01_20_altavista.jpg
+buffet/413223473_be5a4b6fc3.jpg
+nursery/babyroom003.jpg
+clothingstore/storesshot2.jpg
+museum/museo_01_06_flickr.jpg
+deli/deli_10_13_altavista.jpg
+corridor/c8.jpg
+fastfood_restaurant/dsc00878smdj1.jpg
+garage/Garage inside.jpg
+cloister/claustre.jpg
+gym/gym_21_01_altavista.jpg
+warehouse/warehouse_0204.jpg
+hospitalroom/hospital_room_01_16_altavista.jpg
+restaurant/restaurante_04_20_altavista.jpg
+shoeshop/11511434951.jpg
+museum/museo_33_14_altavista.jpg
+casino/casino_0352.jpg
+garage/pic.jpg
+mall/supermarkt.jpg
+florist/floristeria.jpg
+locker_room/locker_room_google_0013.jpg
+stairscase/PA_07_01_1000_38_m.jpg
+pantry/7.jpg
+gym/gym_01_01_altavista.jpg
+laboratorywet/wet_lab_10_15_altavista.jpg
+lobby/09_Vestibulo.jpg
+restaurant/restaurante_30_02_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0107.jpg
+hairsalon/DSCN3259_modifie_1.jpg
+livingroom/indoor_0260.jpg
+studiomusic/studio_a.jpg
+livingroom/easyst013.jpg
+laboratorywet/wet_lab_34_05_altavista.jpg
+restaurant/IMG_0350.jpg
+restaurant_kitchen/restaurant_kitchen_google_0011.jpg
+tv_studio/lakeview_desk_013_50_.jpg
+prisoncell/jail_hallway.jpg
+casino/casino_0035.jpg
+stairscase/AT_01_6B_5479_32_l.jpg
+deli/deli_10_17_yahoo.jpg
+gameroom/SD_00_06_51275_24_l.jpg
+children_room/VR_06_01_1000_95_l.jpg
+bar/bar_0021.jpg
+videostore/videoteca_07_03_flickr.jpg
+poolinside/room154.jpg
+locker_room/locker_room_google_0019.jpg
+grocerystore/Bashas_Int2_.jpg
+poolinside/0310_piscines_1.jpg
+fastfood_restaurant/KFC_Interior_1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0036.jpg
+closet/0207_closet.jpg
+shoeshop/pmv810_en.jpg
+subway/subway_0117.jpg
+bowling/bowling_0041.jpg
+clothingstore/bookstore_photo.jpg
+stairscase/treppe_neu_g.jpg
+studiomusic/control.jpg
+winecellar/wine_cellar_02_13_altavista.jpg
+waitingroom/salon_accueil.jpg
+concert_hall/concert_hall_lg.jpg
+concert_hall/segerstrom_concert_hall_01_1.jpg
+gameroom/sala_de_juegos_14_06_altavista.jpg
+laundromat/lavanderia_52_19_flickr.jpg
+clothingstore/Mvc_006f.jpg
+fastfood_restaurant/blimpies.jpg
+kindergarden/DSC01105.jpg
+restaurant_kitchen/restaurant_kitchen_google_0077.jpg
+casino/casino_0002.jpg
+inside_subway/inside_subway_0286.jpg
+gameroom/AT_05_05_5000_43_l.jpg
+gym/int837.jpg
+inside_subway/metropolitana_19_20_flickr.jpg
+bedroom/indoor_0285.jpg
+jewelleryshop/silver_shop_11.jpg
+computerroom/aut_0003.jpg
+livingroom/living69.jpg
+pantry/pantry_12_11_altavista.jpg
+subway/subway_0061.jpg
+mall/mall23.jpg
+casino/casino_0034.jpg
+operating_room/operating_room_11_12_altavista.jpg
+church_inside/as_kirche.jpg
+elevator/elevator_google_0069.jpg
+livingroom/l10.jpg
+subway/subway_0323.jpg
+dining_room/n190003.jpg
+winecellar/bodega_107_06_flickr.jpg
+clothingstore/100_0086.jpg
+artstudio/famous_painters_studio_01_12_altavista.jpg
+tv_studio/2d_1_.jpg
+mall/HoustonGalleria_XMas.jpg
+pantry/pantry_149_06_flickr.jpg
+pantry/WhiteWIPantry.jpg
+waitingroom/waiting.jpg
+dining_room/or_02_01_0743_30_l.jpg
+fastfood_restaurant/32_The_Angkor_Fast_Food_Restaurant.jpg
+dentaloffice/dental_office_01_12_altavista.jpg
+stairscase/N28.jpg
+dentaloffice/dentista_123_04_flickr.jpg
+poolinside/pool_inside_26_10_altavista.jpg
+bedroom/indoor_0289.jpg
+dentaloffice/dental_office_19_20_altavista.jpg
+florist/florist_32_09_flickr.jpg
+trainstation/train_station_32_10_altavista.jpg
+deli/deli_59_06_flickr.jpg
+restaurant/bistro_49_08_altavista.jpg
+museum/museo_03_01_flickr.jpg
+tv_studio/philhulettlecture_95_.jpg
+computerroom/IM000834.jpg
+bar/bar_0594.jpg
+kindergarden/Lower_Kindergarten.jpg
+children_room/reading_circle_time_37_.jpg
+buffet/dessert_buffet17_11_2007_9_14_28_PM.jpg
+bar/bar_0483.jpg
+office/int61.jpg
+bakery/panetteria_13_16_altavista.jpg
+dentaloffice/IMG_0130_jpg_450x450.jpg
+locker_room/locker_room_google_0003.jpg
+mall/mall25.jpg
+bathroom/bath303.jpg
+jewelleryshop/garnetsDSC00059.jpg
+gym/GymInt1.jpg
+hairsalon/salon345.jpg
+restaurant_kitchen/restaurant_kitchen_google_0034.jpg
+closet/closet.jpg
+jewelleryshop/boutiqueoo.jpg
+pantry/03_pantry_storage_organization_lg.jpg
+bedroom/bedroom27.jpg
+winecellar/cave_champagne_07_11_altavista.jpg
+museum/museum_02_09_altavista.jpg
+toystore/jugueteria_02_08_altavista.jpg
+poolinside/schwimmbad333.jpg
+toystore/jugueteria_21_03_flickr.jpg
+dining_room/dining22.jpg
+operating_room/surgery_room_09_10_altavista.jpg
+restaurant/home_12.jpg
+livingroom/living29.jpg
+toystore/jugueteria_05_03_flickr.jpg
+dentaloffice/dental_office_21_02_altavista.jpg
+bathroom/bath166.jpg
+cloister/1526793682_7d53006762.jpg
+garage/SantaRosaGarage_small_.jpg
+meeting_room/n457021.jpg
+videostore/P1020026.jpg
+kindergarden/lokilani_room_1.jpg
+concert_hall/Music_Concert_Hall_3.jpg
+office/or_02_03_0212_11_l.jpg
+bookstore/Librairie_02.jpg
+children_room/PO_06_02_2000_71_l.jpg
+classroom/P1010077.jpg
+cloister/claustroreyes.jpg
+closet/child2.jpg
+videostore/videoclub_04_09_flickr.jpg
+children_room/dramatic_play_room_42_.jpg
+cloister/Pamplona_catedral_claustro.jpg
+laundromat/MVC_003F.jpg
+movietheater/movietheater_google_0052.jpg
+livingroom/roomscan17.jpg
+buffet/322497200_a22d028e6f.jpg
+waitingroom/waitingarea.jpg
+gym/gimnasio_09_15_altavista.jpg
+warehouse/warehouse_0371.jpg
+greenhouse/2026_2006_Grimm_s_Gardens_Greenhouse.jpg
+jewelleryshop/jewelry_store_interior_design_751036_19_.jpg
+elevator/elevator_google_0048.jpg
+meeting_room/c10.jpg
+meeting_room/n457013.jpg
+buffet/NOR_BuffetFood_300x225_300x225.jpg
+hairsalon/11549402671.jpg
+winecellar/wine_storage_26_12_altavista.jpg
+pantry/pantry_85_06_flickr.jpg
+deli/deli_06_15_yahoo.jpg
+library/ins22.jpg
+greenhouse/greenhouse8.jpg
+laundromat/oaklandlaundromat_main_full.jpg
+gym/gimnasio_167_12_flickr.jpg
+garage/Garage_3_view_3_interior.jpg
+jewelleryshop/joyeria_rometsch03.jpg
+bakery/boulangerie_36_01_altavista.jpg
+operating_room/surgery_room_17_15_altavista.jpg
+bar/bar_0261.jpg
+mall/ins23.jpg
+waitingroom/WtRoomJan06.jpg
+bedroom/indoor_0338.jpg
+restaurant_kitchen/restaurant_kitchen_google_0090.jpg
+mall/wafi_shopping_center.jpg
+trainstation/gare_80_11_flickr.jpg
+clothingstore/cupido_vestiti.jpg
+nursery/cotsl.jpg
+shoeshop/zapateria10.jpg
+concert_hall/baxter3.jpg
+shoeshop/zapateria_23_03_flickr.jpg
+elevator/elevator_google_0024.jpg
+clothingstore/77_bookstore.jpg
+subway/metropolitana_20_02_altavista.jpg
+cloister/claustro34.jpg
+meeting_room/conf22.jpg
+deli/deli_98_21_flickr.jpg
+computerroom/COMPUTER_ROOM2.jpg
+museum/museum_20_19_altavista.jpg
+auditorium/3_10_08auditorium2_1__7.jpg
+laboratorywet/laboratorio_quimica_10_01_altavista.jpg
+pantry/Close_Mesh_Pantry_w_Drawer.jpg
+subway/subway_0310.jpg
+warehouse/warehouse_0186.jpg
+church_inside/st_anne_church_budapest_inside.jpg
+auditorium/auditorium3_l_1__111.jpg
+garage/garage66.jpg
+library/biblio_livre.jpg
+livingroom/living88.jpg
+auditorium/auditorium2_l_1__108.jpg
+bedroom/linama_014.jpg
+deli/new_deli_39_04_altavista.jpg
+movietheater/movietheater_google_0037.jpg
+dentaloffice/dental_office_11_02_altavista.jpg
+laundromat/laundromat_shark_perspectiv.jpg
+casino/casino_0025.jpg
+church_inside/blasii_kirche_nordhausen.jpg
+corridor/couloir06.jpg
+greenhouse/Gewaechshaus.jpg
+laundromat/kachel10.jpg
+subway/subway_0066.jpg
+clothingstore/boutique6.jpg
+computerroom/computerroom04.jpg
+classroom/classroom7.jpg
+concert_hall/Overture_Hall_1.jpg
+shoeshop/zapateria_26_20_flickr.jpg
+florist/floreria_04_03_flickr.jpg
+restaurant/restaurant_11_07_altavista.jpg
+toystore/toys_store_12_18_altavista.jpg
+meeting_room/c13.jpg
+closet/MasterSuiteLrg.jpg
+greenhouse/celosie_02.jpg
+mall/crocker_galleria_735089.jpg
+restaurant_kitchen/restaurant_kitchen_google_0051.jpg
+office/office20.jpg
+livingroom/n14m.jpg
+movietheater/sallecine_72.jpg
+dentaloffice/dentista_45_10_altavista.jpg
+operating_room/surgery_room_07_13_altavista.jpg
+kitchen/kitchenblack.jpg
+inside_bus/inside_bus_087.jpg
+jewelleryshop/2711107.jpg
+gameroom/8a_gameroom2.jpg
+greenhouse/ESTUFA.jpg
+bathroom/bath181.jpg
+grocerystore/shop12.jpg
+poolinside/pool_inside_01_14_altavista.jpg
+subway/subway_0286.jpg
+kitchen/cdmc1170.jpg
+operating_room/operating_room_05_20_altavista.jpg
+florist/florist_02_06_altavista.jpg
+inside_bus/inside_bus_059.jpg
+kindergarden/Preschool_classroom78.jpg
+hospitalroom/IMG_0625.jpg
+poolinside/Pool_inside_birdcage_1641Pas2202.jpg
+winecellar/bodega_100_24_flickr.jpg
+library/la_bibliotheque_de_la_tour_du_valat.jpg
+bathroom/indoor_0342.jpg
+inside_subway/inside_subway_0057.jpg
+buffet/Maritimo_Restaurant_Buffet.jpg
+church_inside/metropolitana_83_13_flickr.jpg
+dentaloffice/office3.jpg
+gym/gym04.jpg
+bathroom/indoor_0465.jpg
+operating_room/surgery_room_17_07_altavista.jpg
+poolinside/buddysbi.jpg
+closet/lamCloset.jpg
+computerroom/Room_2520116E.jpg
+auditorium/amphitheatre_bastille_1__23.jpg
+bar/bar_0296.jpg
+laundromat/100_0125kleinNEW.jpg
+movietheater/findingnemo1_480x320_1__20.jpg
+kindergarden/DSC000552.jpg
+florist/tienda_005.jpg
+gym/southwaterGym.jpg
+florist/floristeria1.jpg
+kitchen/int34.jpg
+restaurant/salle_restaurant2.jpg
+inside_subway/inside_subway_0055.jpg
+gym/biosite_gym.jpg
+artstudio/art_painting_studio_04_20_altavista.jpg
+bakery/bakery_19_10_yahoo.jpg
+church_inside/CatholicChurchInteriorCapeMayNJ.jpg
+pantry/WhiteRaisedPanelRI_Pantry.jpg
+prisoncell/1_jail_cell.jpg
+inside_bus/inside_bus_006.jpg
+meeting_room/c2.jpg
+airport_inside/airport_inside_0294.jpg
+bar/bar_0011.jpg
+church_inside/church13.jpg
+closet/master_SCI132.jpg
+inside_subway/inside_subway_0243.jpg
+dentaloffice/dental_room.jpg
+laboratorywet/Wet_lab.jpg
+winecellar/1184099831156_02.jpg
+florist/florist_02_02_altavista.jpg
+buffet/buffet_FoodLine1.jpg
+poolinside/lignon_piscine.jpg
+bedroom/b2.jpg
+bakery/best_bakery_02_07_altavista.jpg
+hairsalon/peluqueria.jpg
+waitingroom/waiting_room_closeup_1.jpg
+greenhouse/greenhouse842.jpg
+subway/subway_0272.jpg
+cloister/cloister1ms.jpg
+movietheater/image_preview_1__51.jpg
+nursery/colorful_mod_nursery_amazing_wall_painting_techniques_8178.jpg
+mall/Moscow2006ssIMG_7450.jpg
+clothingstore/Paris_Boutique_Inside_Store.jpg
+florist/florist_35_17_altavista.jpg
+shoeshop/pht_mag_02.jpg
+waitingroom/sala_de_espera_04_16_altavista.jpg
+garage/here_is_a_closer_look_inside_the_garage.jpg
+locker_room/locker_room_google_0180.jpg
+bedroom/IMG_1555.jpg
+stairscase/hall117.jpg
+bowling/bowling_0059.jpg
+clothingstore/wares2.jpg
+mall/CP67791.jpg
+mall/800px_Interior_mall_of_america.jpg
+deli/deli_131_13_flickr.jpg
+mall/mall08.jpg
+fastfood_restaurant/guest3.jpg
+inside_bus/inside_bus_073.jpg
+movietheater/rade88fb_1__60.jpg
+warehouse/warehouse_0161.jpg
+deli/new_deli_03_01_altavista.jpg
+dining_room/dining003.jpg
+library/fibiba1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0049.jpg
+florist/anaisflor480.jpg
+bakery/bakery_51_21_yahoo.jpg
+studiomusic/studio14.jpg
+florist/florist_interior.jpg
+restaurant_kitchen/restaurant_kitchen_google_0064.jpg
+bar/bar_0106.jpg
+children_room/our_house_043_48_.jpg
+closet/closet_after_2.jpg
+kitchen/room3.jpg
+restaurant_kitchen/restaurant_kitchen_google_0080.jpg
+bathroom/indoor_0493.jpg
+restaurant_kitchen/restaurant_kitchen_google_0102.jpg
+bookstore/JR64407_ArtProst_bookstore.jpg
+operating_room/surgery_room_43_11_altavista.jpg
+bedroom/b26.jpg
+waitingroom/general_waiting_area.jpg
+restaurant/int131.jpg
+shoeshop/zapateria_15_23_flickr.jpg
+cloister/cc_cloister_3.jpg
+closet/Closet_main_page_415x319.jpg
+inside_subway/inside_subway_0040.jpg
+bedroom/indoor_0331.jpg
+bar/bar_0180.jpg
+livingroom/l2.jpg
+church_inside/metropolitana_41_08_flickr.jpg
+meeting_room/c16.jpg
+studiomusic/ControlRoomSm.jpg
+tv_studio/pb030044_53_.jpg
+nursery/15806.jpg
+studiomusic/int769.jpg
+inside_subway/inside_subway_0146.jpg
+bar/bar_0364.jpg
+hospitalroom/Hospital_room_ubt.jpg
+bar/bar_0398.jpg
+restaurant_kitchen/restaurant_kitchen_google_0085.jpg
+airport_inside/airport_inside_0036.jpg
+hospitalroom/int180.jpg
+hospitalroom/int197.jpg
+computerroom/biblioteca_salamultimedia_g.jpg
+concert_hall/Feature0202_04x.jpg
+bowling/bowling_0208.jpg
+winecellar/wine_cellar_48_12_altavista.jpg
+computerroom/computer_room.jpg
+kitchen/kitchen014.jpg
+meeting_room/pz707.jpg
+elevator/elevator_google_0080.jpg
+bakery/bakery_25_11_yahoo.jpg
+mall/main_boutique_b.jpg
+movietheater/6_voyager_magazine_256322_1__12.jpg
+computerroom/computerroom01.jpg
+laboratorywet/laboratorio_quimica_03_15_altavista.jpg
+trainstation/gare_22_22_flickr.jpg
+inside_subway/inside_subway_0401.jpg
+bar/bar_0298.jpg
+mall/mall10.jpg
+toystore/jugueteria_20_11_flickr.jpg
+artstudio/artist_studio_01_05_altavista.jpg
+elevator/elevator_google_0029.jpg
+kindergarden/daycare03142008062.jpg
+office/n457026.jpg
+closet/MasterSuiteBoyBR.jpg
+bedroom/b10.jpg
+dining_room/int553.jpg
+operating_room/surgery_room_16_19_altavista.jpg
+operating_room/operating_room_06_10_altavista.jpg
+subway/subway_0181.jpg
+bakery/boulangerie_12_13_yahoo.jpg
+classroom/NFA128_classroom.jpg
+studiomusic/6176_2.jpg
+bathroom/b7.jpg
+airport_inside/airport_inside_0008.jpg
+buffet/seafoodbuffet.jpg
+inside_subway/inside_subway_0094.jpg
+inside_subway/metropolitana_39_04_flickr.jpg
+waitingroom/photo_office_tour_1.jpg
+airport_inside/airport_inside_0225.jpg
+casino/casino_0449.jpg
+restaurant/restaurant_27_10_altavista.jpg
+cloister/Claustro_de_San_Isidoro_0.jpg
+inside_subway/inside_subway_0167.jpg
+kindergarden/rocking_chair_area_large2.jpg
+hospitalroom/DSC01602.jpg
+meeting_room/n457006.jpg
+inside_subway/inside_subway_0339.jpg
+dentaloffice/dentista_94_08_flickr.jpg
+fastfood_restaurant/x_panda.jpg
+bowling/bowling_0136.jpg
+hairsalon/387_photoCommerce_1.jpg
+tv_studio/estudio_fabricio_ojeda_87_.jpg
+laboratorywet/wet_lab_16_03_altavista.jpg
+garage/Hafdal_Garage_008crop.jpg
+laboratorywet/laboratorio_quimica_01_13_altavista.jpg
+shoeshop/zapateria3.jpg
+bookstore/bookstore_21_07_flickr.jpg
+hairsalon/Photo6.jpg
+office/int230.jpg
+warehouse/warehouse_0130.jpg
+bowling/bowling_0188.jpg
+library/int91.jpg
+bedroom/b16.jpg
+bakery/panaderia_35_06_yahoo.jpg
+church_inside/innenansicht_kirche.jpg
+fastfood_restaurant/dunkin_donuts.jpg
+deli/deli_81_07_flickr.jpg
+garage/garage4_1.jpg
+grocerystore/grocery_store01.jpg
+hospitalroom/hospital_room_33_10_altavista.jpg
+pantry/despensa_11_18_flickr.jpg
+corridor/couloir.jpg
+inside_bus/inside_bus_038.jpg
+locker_room/locker_room_google_0164.jpg
+garage/bens_garage.jpg
+greenhouse/04_06Greenhouse.jpg
+subway/subway_0270.jpg
+deli/deli_80_01_flickr.jpg
+movietheater/sallevideok.jpg
+prisoncell/JailCell2.jpg
+warehouse/warehouse_0101.jpg
+studiomusic/music_studio1.jpg
+livingroom/living25.jpg
+grocerystore/800px_Fett_supermarkt.jpg
+shoeshop/zapateria_09_04_flickr.jpg
+laboratorywet/AA049672.jpg
+studiomusic/room222.jpg
+operating_room/operating_table_05_02_altavista.jpg
+meeting_room/conf21.jpg
+bedroom/indoor_0448.jpg
+shoeshop/zapateria_02_22_flickr.jpg
+waitingroom/Waiting_Area.jpg
+classroom/CEC_208_classroom.jpg
+restaurant/restaurant_18_19_altavista.jpg
+classroom/classroom_full.jpg
+poolinside/piscina_cubierta_10_12_altavista.jpg
+bedroom/b21.jpg
+classroom/dark_empty_classroom.jpg
+hairsalon/salon3-gr.jpg
+meeting_room/tc_conference_room.jpg
+studiomusic/studio99.jpg
+waitingroom/waiting_room_39_03_altavista.jpg
+tv_studio/plato_de_television_01_11_altavista.jpg
+clothingstore/boutique55.jpg
+gym/gimnasio_22_05_altavista.jpg
+inside_bus/inside_bus_098.jpg
+kindergarden/two2.jpg
+deli/deli_08_12_yahoo.jpg
+locker_room/locker_room_google_0045.jpg
+laboratorywet/laboratorio_quimica_11_01_altavista.jpg
+poolinside/pool_inside.jpg
+winecellar/bodega_102_04_flickr.jpg
+poolinside/2141886.jpg
+fastfood_restaurant/BurgerKing.jpg
+corridor/p1010062_c.jpg
+jewelleryshop/interior.jpg
+office/o10.jpg
+winecellar/wine_cellar_46_03_altavista.jpg
+elevator/elevator_google_0062.jpg
+mall/room402.jpg
+waitingroom/sample18.jpg
+bookstore/bookstore_24_24_flickr.jpg
+corridor/c2.jpg
+bakery/The_12_Bakery.jpg
+trainstation/train_station_15_19_altavista.jpg
+computerroom/Our_Computer_Room_2007.jpg
+meeting_room/c3.jpg
+church_inside/metropolitana_102_20_flickr.jpg
+dining_room/dining29.jpg
+buffet/buffet07.jpg
+meeting_room/c12.jpg
+casino/casino_0320.jpg
+gym/gimnasio_17_07_altavista.jpg
+pantry/pantry_35_12_flickr.jpg
+bar/bar_0374.jpg
+clothingstore/dresses.jpg
+library/Bibliotheque02.jpg
+hospitalroom/IMG_1026.jpg
+computerroom/lab2.jpg
+greenhouse/invernadero_1111.jpg
+stairscase/N457073.jpg
+computerroom/aula_informat1.jpg
+elevator/elevator_google_0041.jpg
+greenhouse/serre_4.jpg
+dining_room/indoor_0582.jpg
+buffet/buffet04.jpg
+bookstore/bookstore_41_02_altavista.jpg
+casino/casino_0470.jpg
+restaurant/restaurant_10_09_altavista.jpg
+corridor/n457055.jpg
+kitchen/indoor_0558.jpg
+stairscase/N457090.jpg
+closet/WH_WI.jpg
+airport_inside/airport_inside_0064.jpg
+winecellar/bodega_88_08_flickr.jpg
+dentaloffice/dental_office_02_12_altavista.jpg
+hospitalroom/hospital_room_sm.jpg
+meeting_room/conf24.jpg
+restaurant/restaurante_04_14_altavista.jpg
+laundromat/lavanderia_106_03_flickr.jpg
+airport_inside/airport_inside_0032.jpg
+warehouse/warehouse_0325.jpg
+locker_room/locker_room_google_0092.jpg
+nursery/chambrebebe2.jpg
+prisoncell/prison_cell_04_01_altavista.jpg
+cloister/london_westminster_cloister.jpg
+office/n457029.jpg
+operating_room/hospital room_30_06_altavista.jpg
+toystore/jugueteria_15_13_flickr.jpg
+church_inside/kirche_01.jpg
+library/Dsc00613_3.jpg
+locker_room/locker_room_google_0192.jpg
+bookstore/Libreria_46_17_altavista.jpg
+lobby/Dolphin_01l_lobby_fountain.jpg
+greenhouse/greenhouse_652.jpg
+kitchen/cdmc1119.jpg
+clothingstore/KIK.jpg
+kitchen/kitchen102.jpg
+office/office13.jpg
+deli/deli_120_17_flickr.jpg
+grocerystore/1760032753_ceceee30e7.jpg
+pantry/White_Pantry_lg_logo.jpg
+shoeshop/fashion.jpg
+airport_inside/airport_inside_0337.jpg
+bakery/boulangerie_06_16_yahoo.jpg
+elevator/elevator_google_0071.jpg
+restaurant/restaurante_37_06_altavista.jpg
+inside_bus/inside_bus_032.jpg
+lobby/recibidor10.jpg
+waitingroom/surroundings1_large.jpg
+casino/casino_0003.jpg
+elevator/elevator_google_0034.jpg
+grocerystore/supermarche1.jpg
+lobby/sLobby15.jpg
+lobby/lobby25.jpg
+locker_room/locker_room_google_0128.jpg
+computerroom/salle_informatique2.jpg
+concert_hall/csi.jpg
+restaurant_kitchen/restaurant_kitchen_google_0093.jpg
+auditorium/auditorium015_103.jpg
+stairscase/N190092.jpg
+meeting_room/conf09.jpg
+office/room472.jpg
+hairsalon/aula_parrucchiere.jpg
+museum/metropolitana_11_01_altavista.jpg
+pantry/despensa_140_11_flickr.jpg
+computerroom/biblioteca.jpg
+locker_room/locker_room_google_0191.jpg
+computerroom/DSCN1030.jpg
+jewelleryshop/banner55.jpg
+laundromat/laundry_II.jpg
+restaurant_kitchen/restaurant_kitchen_google_0038.jpg
+bookstore/bookstore_45_11_flickr.jpg
+kindergarden/Classroom_pic_8_23_07_002.jpg
+deli/deli_02_03_yahoo.jpg
+artstudio/art_painting_studio_16_06_altavista.jpg
+closet/Open_Closet.jpg
+warehouse/warehouse_0078.jpg
+greenhouse/20070417klpcnatun_229_Ies_SCO.jpg
+studiomusic/Sala_de_actuacion.jpg
+elevator/elevator_google_0033.jpg
+meeting_room/conf10.jpg
+deli/deli_106_23_flickr.jpg
+greenhouse/greenhouse167.jpg
+waitingroom/waiting_room_36_19_altavista.jpg
+bedroom/indoor_0431.jpg
+bowling/bowling_0209.jpg
+clothingstore/american_shorts.jpg
+mall/A_Grand_240905.jpg
+winecellar/sacristia.jpg
+airport_inside/airport_inside_0391.jpg
+buffet/1430398034_7ab3fed17f.jpg
+kindergarden/100_0034.jpg
+warehouse/warehouse_0486.jpg
+clothingstore/0009.jpg
+concert_hall/11_19_2005_NGL_19opacHALL_GB61OCUJ6_1.jpg
+nursery/visuel2.jpg
+restaurant_kitchen/restaurant_kitchen_google_0062.jpg
+laundromat/laundry_room_large.jpg
+livingroom/lv_02_04_10917_04a_l.jpg
+locker_room/locker_room_google_0067.jpg
+pantry/pantry_15.jpg
+tv_studio/tv_studio_32_12_altavista.jpg
+concert_hall/Concert_Hall_1.jpg
+shoeshop/2574_1914_DSCN2351.jpg
+artstudio/artist_studio_49_17_altavista.jpg
+bowling/bowling_0177.jpg
+corridor/p1010074_c.jpg
+inside_bus/inside_bus_040.jpg
+gameroom/salle_jeux.jpg
+warehouse/warehouse_0021.jpg
+inside_bus/inside_bus_069.jpg
+nursery/1323nursery5_med.jpg
+library/BIB_bibliothek.jpg
+studiomusic/int805.jpg
+subway/subway_0219.jpg
+videostore/videoteca_06_17_flickr.jpg
+church_inside/churchinside01.jpg
+dining_room/d11.jpg
+dentaloffice/dentista_99_23_flickr.jpg
+deli/deli_28_07_altavista.jpg
+clothingstore/The_Boutique.jpg
+office/n457050.jpg
+meeting_room/c5.jpg
+videostore/videoclub_29_18_altavista.jpg
+winecellar/wine_storage_04_03_altavista.jpg
+bakery/boulangerie_10_10_yahoo.jpg
+library/Library_P2150016.jpg
+shoeshop/zapateria.jpg
+casino/casino_0302.jpg
+toystore/toys_store_16_05_altavista.jpg
+concert_hall/Concert_Hall2_1.jpg
+hairsalon/salondecoiffure9215oq7.jpg
+library/Bibliotheque6.jpg
+livingroom/smallsp008.jpg
+bookstore/librairie2_g.jpg
+florist/flower_shop_spring_2006.jpg
+kindergarden/classroom_north_bmp.jpg
+buffet/buffet02.jpg
+winecellar/wine_cellar_05_16_altavista.jpg
+computerroom/Computer_Classroom.jpg
+operating_room/operating_room_49_20_altavista.jpg
+bowling/bowling_0061.jpg
+kindergarden/tots6.jpg
+church_inside/metropolitana_115_18_flickr.jpg
+corridor/n190039.jpg
+concert_hall/Concert Hall.jpg
+inside_bus/inside_bus_092.jpg
+kitchen/cdmc1299.jpg
+church_inside/metropolitana_151_07_flickr.jpg
+hairsalon/hair_salon1.jpg
+lobby/lobby51.jpg
+bathroom/IMG_1252.jpg
+locker_room/locker_room_google_0050.jpg
+trainstation/gare_03_12_altavista.jpg
+dining_room/cdmc1295.jpg
+clothingstore/boutique42.jpg
+dining_room/dsc00627.jpg
+nursery/baby_room_decoration_lg.jpg
+shoeshop/zapato_2.jpg
+studiomusic/blossom_music_studio_2.jpg
+office/homeoff014.jpg
+closet/075381028905.jpg
+fastfood_restaurant/Camille_s_027.jpg
+locker_room/locker_room_google_0141.jpg
+church_inside/metropolitana_149_08_flickr.jpg
+meeting_room/room451.jpg
+shoeshop/zapateria_16_08_flickr.jpg
+bookstore/bookstore_57_04_flickr.jpg
+closet/closet_4.jpg
+shoeshop/shoes_shop_01_01_altavista.jpg
+elevator/elevator_google_0038.jpg
+livingroom/Living31.jpg
+artstudio/artist_studio_41_05_altavista.jpg
+tv_studio/estudio_de_television_01_02_flickr.jpg
+buffet/e02_buffet.jpg
+bookstore/Librairie_48_15_altavista.jpg
+dentaloffice/1730803206_3f16248ecb.jpg
+videostore/videoclub_03_24_flickr.jpg
+bakery/boulangerie_13_20_yahoo.jpg
+clothingstore/boutique2.jpg
+closet/NFD_30ClosetMaid.jpg
+poolinside/pool_inside_25_20_altavista.jpg
+restaurant/bistro_22_16_altavista.jpg
+shoeshop/shoes_shop_48_08_altavista.jpg
+mall/PublicP117C_L.jpg
+restaurant_kitchen/restaurant_kitchen_google_0016.jpg
+artstudio/painters_studio_03_18_altavista.jpg
+kitchen/kitchen35.jpg
+winecellar/bodega_07_14_yahoo.jpg
+pantry/pantry_02_18_altavista.jpg
+concert_hall/120703.jpg
+kitchen/kitchen060.jpg
+laboratorywet/wet_lab_13_03_altavista.jpg
+livingroom/roomscan27.jpg
+videostore/videotheque_02_05_flickr.jpg
+waitingroom/rujin_femme.jpg
+casino/casino_0042.jpg
+elevator/elevator_google_0100.jpg
+children_room/FW_97_2_0861_19_l.jpg
+locker_room/locker_room_google_0098.jpg
+restaurant/food_Bistro_450.jpg
+garage/aug_outside04.jpg
+kindergarden/2Preschool.jpg
+tv_studio/52014180_110805_crw_3248_kteh_27_.jpg
+bakery/bakery_06_11_altavista.jpg
+videostore/blockbuster_32_13_altavista.jpg
+locker_room/locker_room_google_0084.jpg
+computerroom/CEJBA_sala_camputadoras.jpg
+bathroom/room317.jpg
+gameroom/P6170172.jpg
+artstudio/art_painting_studio_01_15_altavista.jpg
+greenhouse/conservatory_greenhouse_big.jpg
+grocerystore/grocery_3.jpg
+restaurant_kitchen/restaurant_kitchen_google_0001.jpg
+concert_hall/W020070919331447037125.jpg
+hospitalroom/hospital_room_38_10_altavista.jpg
+livingroom/va_02_01_6306_03_l.jpg
+classroom/30_AvH_112_classroom.jpg
+prisoncell/robben_island.jpg
+bedroom/indoor_0061.jpg
+nursery/replace_orange_400x302.jpg
+winecellar/bodega_78_08_flickr.jpg
+dentaloffice/1796458857_21fc169bd0.jpg
+inside_bus/inside_bus_100.jpg
+mall/Shopping-mall.jpg
+concert_hall/crbst_pict0027.jpg
+tv_studio/2244288989_47ec1d796b_17_.jpg
+grocerystore/kays_1.jpg
+buffet/1351747750_8bbafedfd9.jpg
+buffet/buffet57.jpg
+cloister/san_millan_claustro.jpg
+kitchen/kitchen036.jpg
+mall/IMG_0111_Takashimayafoyer.jpg
+winecellar/bodega_01_10_flickr.jpg
+laboratorywet/laboratorio_quimica_14_01_altavista.jpg
+kitchen/2335_1.jpg
+bowling/bowling_0141.jpg
+fastfood_restaurant/fast_food_restaurant_pef05022.jpg
+poolinside/pool_inside_300_x_253_1_.jpg
+prisoncell/jailcell234.jpg
+studiomusic/MusicStudio.jpg
+waitingroom/photo_hwhc_waiting.jpg
+auditorium/amphi_1__81.jpg
+dentaloffice/dentista_109_05_flickr.jpg
+winecellar/cave_vin_25_17_altavista.jpg
+bowling/bowling_0143.jpg
+restaurant/coin_sympa.jpg
+auditorium/la_grand_1__62.jpg
+restaurant_kitchen/restaurant_kitchen_google_0018.jpg
+inside_bus/inside_bus_041.jpg
+garage/Basement_2_.jpg
+locker_room/locker_room_google_0131.jpg
+stairscase/hall21.jpg
+casino/casino_0005.jpg
+operating_room/surgery_room_08_03_altavista.jpg
+classroom/web_lalemant.jpg
+office/judges_office.jpg
+bedroom/madison_room.jpg
+artstudio/art_painting_studio_31_14_altavista.jpg
+airport_inside/airport_inside_0155.jpg
+poolinside/piscine_interieur_2.jpg
+restaurant_kitchen/restaurant_kitchen_google_0097.jpg
+subway/subway_0308.jpg
+clothingstore/bestshopyet_full.jpg
+children_room/AT_04_02_3000_55_l.jpg
+locker_room/locker_room_google_0068.jpg
+lobby/01_priv_ent.jpg
+movietheater/sala_de_cine_21_05_altavista.jpg
+grocerystore/Spirituosen_im_supermarkt_1.jpg
+lobby/lobby223233.jpg
+kitchen/kitchen99.jpg
+laboratorywet/wetlab2.jpg
+laundromat/PO_06_02_2000_70_l.jpg
+stairscase/S32.jpg
+livingroom/int122.jpg
+florist/16944_7439_6.jpg
+hairsalon/bild5_gross.jpg
+inside_subway/inside_subway_0015.jpg
+livingroom/indoor_0479.jpg
+artstudio/artist_studio_14_12_altavista.jpg
+cloister/Mosteiro_da_Batalha_Claustro_2.jpg
+children_room/playroom_500_67_.jpg
+prisoncell/cellDM1405_468x300.jpg
+restaurant_kitchen/restaurant_kitchen_google_0041.jpg
+tv_studio/tvstudio_120_.jpg
+locker_room/locker_room_google_0175.jpg
+bar/bar_0036.jpg
+laundromat/100_2490_357122904_std.jpg
+greenhouse/main.jpg
+office/homeoff011.jpg
+classroom/photo_classroom.jpg
+greenhouse/greenhouse2gtr.jpg
+shoeshop/zapateria_08_03_flickr.jpg
+artstudio/artist_studio_43_07_altavista.jpg
+mall/_69D9FF75_39DD_4F94_9FF4_6F01F5798173_.jpg
+airport_inside/airport_inside_0175.jpg
+corridor/p1010089_c.jpg
+bedroom/indoor_0133.jpg
+subway/subway_0263.jpg
+artstudio/art_painting_studio_13_16_altavista.jpg
+florist/c04652600522c7ad139144ca0e2b_3_4.jpg
+gameroom/LV_00_01_5962_21_l.jpg
+subway/subway_0318.jpg
+movietheater/1190197963img_0239_1__3.jpg
+nursery/dsc_0713_thumb_480xauto.jpg
+corridor/IMG_3275.jpg
+gameroom/gameroom.jpg
+movietheater/theater_brady_450.jpg
+laundromat/PB_99_4_7760_35A_l.jpg
+museum/museo_134_21_flickr.jpg
+bowling/bowling_0140.jpg
+casino/casino_0478.jpg
+hairsalon/Hair_Salon_Greensboro_NC_27406_235115.jpg
+videostore/blockbuster_24_07_altavista.jpg
+kindergarden/kindergarten_2.jpg
+kitchen/indoor_0281.jpg
+toystore/toys_store_21_19_altavista.jpg
+garage/1.jpg
+deli/deli_13_07_flickr.jpg
+lobby/lobby33.jpg
+bathroom/b3.jpg
+florist/f_floristeria_04g.jpg
+clothingstore/Purple_Tulip_Boutique_Photo.jpg
+videostore/videoteca_06_03_flickr.jpg
+clothingstore/shop01.jpg
+jewelleryshop/store3_48_.jpg
+mall/mallarizonamills01.jpg
+nursery/baby_room_2.jpg
+livingroom/room136.jpg
+winecellar/bodega_152_04_flickr.jpg
+casino/casino_0021.jpg
+florist/florist_73_06_flickr.jpg
+studiomusic/851_bandroom.jpg
+laboratorywet/wet_lab_39_17_altavista.jpg
+tv_studio/nice_casino_50_16_altavista.jpg
+dining_room/dining9.jpg
+meeting_room/int200.jpg
+children_room/VA_02_05_7656_19A_l.jpg
+videostore/videotheque_01_22_flickr.jpg
+bakery/bakery34.jpg
+dentaloffice/dental_chair.jpg
+fastfood_restaurant/chick_fil_a.jpg
+winecellar/cave_champagne_05_15_altavista.jpg
+closet/url.jpg
+gym/gym09.jpg
+inside_bus/inside_bus_033.jpg
+inside_subway/inside_subway_0240.jpg
+office/d53.jpg
+restaurant/restaurante_04_06_altavista.jpg
+elevator/elevator_google_0040.jpg
+kitchen/kitchen061.jpg
+artstudio/artist_studio_43_03_altavista.jpg
+bedroom/b30.jpg
+gameroom/HO_06_02_2000_99_l.jpg
+inside_subway/inside_subway_0250.jpg
+meeting_room/conference1.jpg
+subway/subway_0127.jpg
+jewelleryshop/7777.jpg
+bedroom/indoor_0186.jpg
+tv_studio/peter_morse_teaching_unimelb_preview_55_.jpg
+lobby/20076262_Collection_Lobby_02_w.jpg
+casino/casino_0121.jpg
+waitingroom/Concourse.jpg
+operating_room/operating_room_34_11_altavista.jpg
+cloister/claustro_interior.jpg
+florist/florist_32_21_flickr.jpg
+clothingstore/428460833_e89f97664b_b.jpg
+laundromat/lavanderia_107_04_flickr.jpg
+hospitalroom/LLIT_OBERT.jpg
+cloister/claustro234.jpg
+shoeshop/redwing.jpg
+pantry/KitchenPantry.jpg
+videostore/img_76381_renta.jpg
+auditorium/inauguration_amphitheatre_1__151.jpg
+trainstation/gare_129_07_flickr.jpg
+hospitalroom/Birthing_Class7.jpg
+fastfood_restaurant/539w.jpg
+florist/cb72f48b619b1ff77bd11478d.jpg
+garage/garage_workshop.jpg
+pantry/section_pantry.jpg
+jewelleryshop/299846537.jpg
+waitingroom/waiting_room_49_19_altavista.jpg
+studiomusic/RecordingStudio.jpg
+winecellar/bodega_40_09_yahoo.jpg
+auditorium/lar22_main_auditorium_a_copy_61.jpg
+hairsalon/windor_hair_salon_189_380.jpg
+classroom/IMG_2226.jpg
+office/n457053.jpg
+greenhouse/Invernadero.jpg
+livingroom/l5.jpg
+church_inside/St_Germain_des_Pr_s_autel.jpg
+airport_inside/airport_inside_0232.jpg
+corridor/n190054.jpg
+bedroom/indoor_0567.jpg
+waitingroom/CRL_Waitingarea.jpg
+operating_room/surgery_room_25_11_altavista.jpg
+dining_room/dining10.jpg
+hospitalroom/hospital_room_36_11_altavista.jpg
+studiomusic/solarstudio.jpg
+hospitalroom/hospital_room_30_05_altavista.jpg
+elevator/elevator_google_0053.jpg
+nursery/baby_room_2_sized.jpg
+shoeshop/t050dh02.jpg
+warehouse/warehouse_0359.jpg
+casino/casino_0177.jpg
+operating_room/surgery_room_09_20_altavista.jpg
+garage/10_GARAJE_3_JPG.jpg
+artstudio/art_painting_studio_32_18_altavista.jpg
+dining_room/easyst048.jpg
+corridor/IMG_3081.jpg
+laundromat/Ricks_laundromat_pictures_april_2007_139.jpg
+florist/florist_21_16_flickr.jpg
+jewelleryshop/3607308_scaled_416x312.jpg
+tv_studio/tv_studio_05_12_altavista.jpg
+buffet/ov_banquet_buffet2.jpg
+meeting_room/conference_room.jpg
+grocerystore/gs_image_Grocery_LEED_09_10.jpg
+trainstation/gare_67_14_flickr.jpg
+operating_room/surgery_room_09_12_altavista.jpg
+lobby/sLobby18.jpg
+bookstore/Libreria_44_19_altavista.jpg
+livingroom/or_02_03_0212_36_l.jpg
+videostore/videoclub_04_03_flickr.jpg
+bakery/bakery_09_11_yahoo.jpg
+warehouse/warehouse_0011.jpg
+locker_room/locker_room_google_0232.jpg
+shoeshop/75421584_9554abbb01.jpg
+library/library_chess.jpg
+museum/museum_44_15_altavista.jpg
+dining_room/int130.jpg
+waitingroom/wroom2.jpg
+bar/bar_0086.jpg
+hairsalon/peluqueria03.jpg
+stairscase/N457075.jpg
+dentaloffice/dentaire_03_19_altavista.jpg
+trainstation/gare_51_05_flickr.jpg
+tv_studio/estudio_rbs_tv_pelotas_45_.jpg
+shoeshop/172402.jpg
+deli/deli_129_10_flickr.jpg
+prisoncell/prison_cell_36_02_altavista.jpg
+prisoncell/P2170478.jpg
+artstudio/painters_studio_08_03_altavista.jpg
+bathroom/indoor_0566.jpg
+hospitalroom/hospital_room_1.jpg
+bedroom/b22.jpg
+lobby/00320003.jpg
+stairscase/D05b.jpg
+bowling/bowling_0033.jpg
+locker_room/locker_room_google_0218.jpg
+office/office4.jpg
+waitingroom/PDR_0026.jpg
+restaurant_kitchen/restaurant_kitchen_google_0047.jpg
+toystore/5.jpg
+restaurant_kitchen/restaurant_kitchen_google_0056.jpg
+buffet/23142_1177445820.jpg
+kindergarden/playroom.jpg
+mall/mall37.jpg
+movietheater/p1010962_1__25.jpg
+stairscase/OR_99_5_9379_27_l.jpg
+warehouse/warehouse_0231.jpg
+mall/West_End_Mall_DSC_0550_m.jpg
+bookstore/3e7e40981ddd4cdb055c7ffe4c2af5d8.jpg
+toystore/south_haven_michigan_toy_educational_store4.jpg
+bakery/panetteria_01_13_altavista.jpg
+church_inside/metropolitana_75_05_flickr.jpg
+gym/gym13.jpg
+studiomusic/datos_adjuntos.jpg
+artstudio/painters_studio_19_05_altavista.jpg
+office/office12.jpg
+bakery/panaderia_49_18_yahoo.jpg
+restaurant/bistro_01_06_altavista.jpg
+waitingroom/PHOTO22.jpg
+museum/museum_07_15_altavista.jpg
+subway/subway_0260.jpg
+closet/master_closet.jpg
+greenhouse/088_invernadero.jpg
+restaurant/bistro_31_02_altavista.jpg
+garage/home_garage_cabinets.jpg
+studiomusic/mixingdesk.jpg
+laboratorywet/laboratorio_quimica_13_12_altavista.jpg
+elevator/elevator_google_0001.jpg
+meeting_room/n457008.jpg
+movietheater/movietheater_google_0011.jpg
+warehouse/warehouse_0498.jpg
+deli/deli_04_14_altavista.jpg
+winecellar/wine_cellar_45_01_altavista.jpg
+subway/subway_0504.jpg
+airport_inside/airport_inside_0497.jpg
+deli/deli_31_04_altavista.jpg
+lobby/Marshall_McLuhan_Salon_1.jpg
+computerroom/sala_informatica.jpg
+prisoncell/url.jpg
+artstudio/art_painting_studio_13_20_altavista.jpg
+office/eagle_office.jpg
+poolinside/pool_inside_04_11_altavista.jpg
+cloister/Cloister92.jpg
+florist/floreria_09_04_flickr.jpg
+laboratorywet/wet-lab.jpg
+museum/museo_03_24_flickr.jpg
+airport_inside/airport_inside_0043.jpg
+deli/deli_148_16_flickr.jpg
+grocerystore/supermarche_1.jpg
+kitchen/kitchen045.jpg
+subway/subway_0185.jpg
+deli/deli_28_22_flickr.jpg
+laboratorywet/wet_lab_11_02_altavista.jpg
+locker_room/locker_room_google_0213.jpg
+restaurant/restaurant_32_19_altavista.jpg
+classroom/groupe_scolaire_2.jpg
+videostore/gn704.jpg
+operating_room/surgery_room_09_01_altavista.jpg
+greenhouse/horti_estufa.jpg
+kindergarden/Preschool_Kindergarten_Classroom_full.jpg
+garage/3_5_08_garage.jpg
+videostore/club_video_26_08_altavista.jpg
+prisoncell/jail_cell321.jpg
+corridor/img_9683_c.jpg
+greenhouse/jardin_celeste_nouv.jpg
+jewelleryshop/12907.jpg
+artstudio/art_studio_01_01_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0019.jpg
+kitchen/int42.jpg
+mall/mall38.jpg
+laundromat/Laundromat_013.jpg
+winecellar/bodega_153_13_flickr.jpg
+clothingstore/fashionfix_drift21.jpg
+classroom/IM000820.jpg
+greenhouse/greenhouseoi1.jpg
+clothingstore/fall_2006_B_146.jpg
+clothingstore/mob989_1158475595.jpg
+mall/latham_circle_mall_16.jpg
+bedroom/b13.jpg
+kindergarden/classroom223.jpg
+dentaloffice/dental_office_40_05_altavista.jpg
+inside_bus/inside_bus_009.jpg
+bedroom/cimg8169.jpg
+bookstore/Libreria_02_01_altavista.jpg
+bakery/panaderia_15_06_yahoo.jpg
+bowling/bowling_0171.jpg
+computerroom/board05e.jpg
+museum/museo_10_06_flickr.jpg
+elevator/elevator_google_0019.jpg
+closet/082806_the_stash_closet.jpg
+nursery/lpbedding_hero.jpg
+winecellar/wine_storage_05_20_altavista.jpg
+computerroom/SALA_DE_INFORMaTICA.jpg
+locker_room/locker_room_google_0163.jpg
+winecellar/wine_cellar_37_13_altavista.jpg
+tv_studio/16580_2_9_.jpg
+poolinside/Inside-Pool.jpg
+airport_inside/airport_inside_0549.jpg
+florist/florist_01_18_altavista.jpg
+subway/subway_0098.jpg
+fastfood_restaurant/arbys4.jpg
+classroom/118463509_99bde44e96.jpg
+garage/garaje4567.jpg
+livingroom/room502.jpg
+movietheater/movietheater_google_0021.jpg
+kitchen/k11.jpg
+dentaloffice/img_op_room_bg.jpg
+fastfood_restaurant/1213796_gross_burger_king_0.jpg
+trainstation/gare_04_18_flickr.jpg
+gym/pacific_newport_gym.jpg
+airport_inside/airport_inside_0194.jpg
+bar/bar_0080.jpg
+cloister/IMG_0433.jpg
+livingroom/indoor_0597.jpg
+closet/section_closet.jpg
+kitchen/cdmc1128.jpg
+garage/Garage_Grid_10.jpg
+buffet/137902351_6f2025ac9d.jpg
+artstudio/art_painting_studio_47_02_altavista.jpg
+toystore/toys_store_34_07_altavista.jpg
+trainstation/gare_97_23_flickr.jpg
+warehouse/warehouse_0151.jpg
+shoeshop/zapateria_20_22_flickr.jpg
+videostore/videoclub_09_17_flickr.jpg
+concert_hall/konzertsaal.jpg
+gameroom/sala_de_juegos_03_20_altavista.jpg
+bedroom/easyst031.jpg
+buffet/url_1.jpg
+dentaloffice/dental_office_08_12_altavista.jpg
+movietheater/movie_THeater.jpg
+pantry/Warm_Cognac_Pantry.jpg
+museum/museum_27_08_altavista.jpg
+trainstation/estacion_de_ferrocarriles_35_20_altavista.jpg
+airport_inside/airport_inside_0099.jpg
+bathroom/room319.jpg
+nursery/bali_nursery.jpg
+buffet/358396421_aa2d3f6f03.jpg
+bookstore/Bookstore111.jpg
+restaurant/salle63.jpg
+prisoncell/Jail.jpg
+meeting_room/conference7.jpg
+gameroom/Gameroom3.jpg
+trainstation/gare_144_17_flickr.jpg
+prisoncell/jackson_jail_1.jpg
+hospitalroom/int173.jpg
+bakery/boulangerie_17_17_yahoo.jpg
+toystore/n8.jpg
+locker_room/locker_room_google_0113.jpg
+movietheater/sala-31.jpg
+laundromat/laund_doc_010.jpg
+dentaloffice/dental_office_13_13_altavista.jpg
+fastfood_restaurant/url.jpg
+poolinside/catalogue_piscine_interieur.jpg
+dentaloffice/dentista_oficina_01_01_flickr.jpg
+livingroom/living49.jpg
+inside_subway/metropolitana_128_13_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0108.jpg
+concert_hall/luzerne.jpg
+auditorium/06salle_1__2.jpg
+prisoncell/323011538894332.jpg
+gym/983000854_2bfd6a9ccf.jpg
+airport_inside/airport_inside_0211.jpg
+gameroom/gameroom2_600x448.jpg
+casino/casino_0285.jpg
+fastfood_restaurant/subway_gif.jpg
+laundromat/lavanderia_40_18_flickr.jpg
+laundromat/wasmachine.jpg
+deli/deli_84_07_flickr.jpg
+studiomusic/int597.jpg
+shoeshop/zapateria_15_19_flickr.jpg
+clothingstore/main_store_pic_01.jpg
+mall/2038935077_84f209ff2b.jpg
+bedroom/room405.jpg
+kitchen/cdmc1144.jpg
+church_inside/metropolitana_71_22_flickr.jpg
+hospitalroom/hospital_room_02_18_altavista.jpg
+inside_subway/inside_subway_0163.jpg
+poolinside/Pool_Inside_Out.jpg
+bathroom/n190042.jpg
+livingroom/l8.jpg
+children_room/img_3808_24_.jpg
+florist/floreria_05_01_flickr.jpg
+auditorium/auditorium68_115.jpg
+dining_room/cdmc1195.jpg
+locker_room/locker_room_google_0210.jpg
+fastfood_restaurant/restaurant_panda.jpg
+waitingroom/celibre_waiting_room.jpg
+hairsalon/17630_7927_qsoms.jpg
+inside_subway/inside_subway_0397.jpg
+prisoncell/153430565_b7c67fd743.jpg
+restaurant_kitchen/restaurant_kitchen_google_0044.jpg
+gameroom/int92.jpg
+restaurant_kitchen/restaurant_kitchen_google_0005.jpg
+classroom/file_279474_23340.jpg
+fastfood_restaurant/universitycenter056.jpg
+gym/gimnasio_18_01_altavista.jpg
+church_inside/metropolitana_14_19_flickr.jpg
+tv_studio/tv_studio_01_03_altavista.jpg
+bakery/bakery_02_03_altavista.jpg
+children_room/VA_05_03_8000_49_l.jpg
+jewelleryshop/boutique66.jpg
+corridor/corridora8.jpg
+meeting_room/room291.jpg
+restaurant/gaststaette15.jpg
+inside_subway/inside_subway_0273.jpg
+meeting_room/conf19.jpg
+children_room/OR_99_1_4913_31_l.jpg
+casino/casino_0017.jpg
+tv_studio/tv_studio_48_15_altavista.jpg
+bowling/bowling_0201.jpg
+airport_inside/airport_inside_0302.jpg
+buffet/296063760_c41c08fab3.jpg
+office/homeoff015.jpg
+artstudio/painters_studio_13_13_altavista.jpg
+buffet/buffet001.jpg
+tv_studio/37048_c738e97b_cefe_433b_8ba1_37b1e54b5396_21_.jpg
+buffet/413438464_9118ab17b8.jpg
+children_room/playroom7_65_.jpg
+mall/deira_city_centre_dubai_08.jpg
+trainstation/gare_139_21_flickr.jpg
+inside_bus/inside_bus_074.jpg
+laundromat/laundry_room1.jpg
+deli/deli_138_13_flickr.jpg
+studiomusic/Pegnotti_estudio_River.jpg
+bakery/bakery_17_17_yahoo.jpg
+dining_room/room411.jpg
+mall/34970_1_0012.jpg
+florist/florist_23_20_flickr.jpg
+poolinside/47220_pool_inside8.jpg
+waitingroom/sLobby23.jpg
+movietheater/salle1_1__66.jpg
+museum/museo_67_01_flickr.jpg
+fastfood_restaurant/Pizza_hut_express.jpg
+grocerystore/grocery2.jpg
+stairscase/dining044.jpg
+classroom/int115.jpg
+meeting_room/conf18.jpg
+bookstore/bookstore_15_05_altavista.jpg
+computerroom/computer_room_1.jpg
+garage/garage_pics_003_1_.jpg
+hairsalon/348_img159643_365652.jpg
+bedroom/indoor_0330.jpg
+nursery/nursery10.jpg
+operating_room/operating_room_17_04_altavista.jpg
+bowling/bowling_0015.jpg
+casino/casino_0492.jpg
+garage/hpgarageinside.jpg
+subway/subway_0317.jpg
+tv_studio/2004092000530101_12_.jpg
+winecellar/wine_cellar_27_11_altavista.jpg
+grocerystore/grocery23.jpg
+cloister/Cloister456.jpg
+livingroom/va_02_03_7115_16_l.jpg
+warehouse/warehouse_0136.jpg
+artstudio/art_painting_studio_25_15_altavista.jpg
+gym/gimnasio_60_11_flickr.jpg
+prisoncell/prison_cell_16_16_altavista.jpg
+subway/subway_0277.jpg
+subway/subway_0503.jpg
+bar/bar_0429.jpg
+livingroom/l7.jpg
+movietheater/salle_cinema_metz_1__64.jpg
+subway/subway_0273.jpg
+laboratorywet/senior_wet_lab_1.jpg
+greenhouse/1412_mb_file_0a8c5.jpg
+lobby/sLobby21.jpg
+warehouse/warehouse_0416.jpg
+concert_hall/dekelboum2.jpg
+studiomusic/Jw1qBartists1166828911.jpg
+auditorium/amphi1_1__79.jpg
+laboratorywet/wet_lab_26_05_altavista.jpg
+locker_room/locker_room_google_0130.jpg
+garage/basement_garage.jpg
+restaurant/restaurant_16_05_altavista.jpg
+nursery/c0020759_baby_room1_large.jpg
+grocerystore/dogfooddisplaypiggb7xe.jpg
+videostore/blockbuster_49_08_flickr.jpg
+kitchen/kitchen137.jpg
+auditorium/4875_amphitheatre_5_1__11.jpg
+videostore/video_store_43_09_altavista.jpg
+dining_room/dining46.jpg
+garage/salmon_garage_after_gif.jpg
+locker_room/locker_room_google_0011.jpg
+classroom/Classroom9.jpg
+kindergarden/SA_Pre_K_PS_Classroom_pictures_002.jpg
+lobby/sLobby12.jpg
+bar/bar_0031.jpg
+hairsalon/SalonCoiffureMontelimar4.jpg
+livingroom/room1.jpg
+inside_subway/inside_subway_0257.jpg
+shoeshop/zapateria_09_11_flickr.jpg
+studiomusic/int807.jpg
+bakery/best_bakery_02_06_altavista.jpg
+hairsalon/hair_salon_hl.jpg
+laundromat/alex_winch8.jpg
+shoeshop/zapateria_22_08_flickr.jpg
+livingroom/pb_99_1_0532_33_l.jpg
+operating_room/operating_room_05_11_altavista.jpg
+bar/bar_0407.jpg
+subway/subway_0045.jpg
+lobby/lobby3456.jpg
+church_inside/1348333936_c97997d450.jpg
+closet/closet2i.jpg
+hospitalroom/00040220.jpg
+dining_room/dining015.jpg
+dining_room/d1.jpg
+stairscase/maison_moissac_82_2.jpg
+subway/subway_0261.jpg
+toystore/speelgoed_66_02_flickr.jpg
+tv_studio/burkebushbillm1967_30_.jpg
+grocerystore/400_F_2072702_0czrOPPRxph5STUVfX3QxpCrEk80sG.jpg
+gameroom/HO_00_01_4523_26A_l.jpg
+waitingroom/waiting_room_03_13_altavista.jpg
+winecellar/wine_cellar_main.jpg
+buffet/31248717_88518f1e6d.jpg
+artstudio/painters_studio_41_20_altavista.jpg
+greenhouse/greenhouse2_1.jpg
+locker_room/locker_room_google_0197.jpg
+stairscase/LV_98_3_8762_18_l.jpg
+airport_inside/airport_inside_0092.jpg
+studiomusic/djban_estudio_musical.jpg
+children_room/dscn0208_15_.jpg
+church_inside/metropolitana_31_10_flickr.jpg
+inside_bus/inside_bus_072.jpg
+winecellar/wine_cellar_35_06_altavista.jpg
+gameroom/Salle_expositions_jeux_d_echecs_02.jpg
+waitingroom/pictureb_waitingroom.jpg
+videostore/blockbuster_23_20_flickr.jpg
+livingroom/cdmc1298.jpg
+prisoncell/oldJail_Run.jpg
+trainstation/estacion_de_ferrocarriles_49_09_altavista.jpg
+corridor/n457064.jpg
+toystore/jugueteria_16_08_flickr.jpg
+airport_inside/airport_inside_0239.jpg
+lobby/Art_Steinman_800_567.jpg
+trainstation/gare_140_03_flickr.jpg
+cloister/2611191511_4deb4bcf31.jpg
+locker_room/locker_room_google_0036.jpg
+prisoncell/justice_7.jpg
+laboratorywet/wet_lab_35_20_altavista.jpg
+pantry/pantry_57_22_flickr.jpg
+garage/lot_16_garage.jpg
+poolinside/LOU_HURS_pooli_1.jpg
+warehouse/warehouse_0225.jpg
+florist/florist_shop.jpg
+lobby/halld_entree_500x354.jpg
+trainstation/gare_99_08_flickr.jpg
+meeting_room/n457038.jpg
+casino/casino_0316.jpg
+dentaloffice/dentista_93_04_flickr.jpg
+nursery/nursery1a_1.jpg
+shoeshop/panel_zapatos.jpg
+dentaloffice/dental_office_47_13_altavista.jpg
+dining_room/d6.jpg
+restaurant/restaurant_08_17_altavista.jpg
+fastfood_restaurant/Arbys_2.jpg
+bakery/boulangerie_35_01_altavista.jpg
+dentaloffice/aboutus_image1.jpg
+laboratorywet/laboratorio_quimica_15_03_altavista.jpg
+museum/galleria.jpg
+locker_room/locker_room_google_0072.jpg
+inside_subway/inside_subway_0220.jpg
+cloister/cloister_cc_miladus.jpg
+clothingstore/boutique9.jpg
+kitchen/kitchen17.jpg
+restaurant/restaurant_23_05_altavista.jpg
+gym/GYM_C.jpg
+locker_room/locker_room_google_0093.jpg
+operating_room/operating_room_39_02_altavista.jpg
+livingroom/living74.jpg
+bedroom/b27.jpg
+corridor/p1010090_c.jpg
+inside_subway/inside_subway_0418.jpg
+jewelleryshop/jewelry_dealer_business_38_.jpg
+corridor/corridora2.jpg
+church_inside/kirche_stettfeld_i.jpg
+clothingstore/CP67794.jpg
+livingroom/l9.jpg
+stairscase/room228.jpg
+trainstation/train_station_02_20_altavista.jpg
+gym/gym_37_06_altavista.jpg
+airport_inside/airport_inside_0224.jpg
+toystore/jugueteria_25_08_yahoo.jpg
+pantry/pantry_12_20_flickr.jpg
+prisoncell/Penh2.jpg
+fastfood_restaurant/3.jpg
+pantry/pantry_05_24_flickr.jpg
+bookstore/bookstore_21_14_flickr.jpg
+elevator/elevator_google_0017.jpg
+airport_inside/airport_inside_0288.jpg
+bar/bar_0206.jpg
+computerroom/Room_002s.jpg
+warehouse/warehouse_0066.jpg
+operating_room/operating_room_07_14_altavista.jpg
+library/librairie.jpg
+fastfood_restaurant/hut1.jpg
+casino/casino_0040.jpg
+kindergarden/housekeeping_center_18202041_std.jpg
+bakery/panaderia_07_02_yahoo.jpg
+kindergarden/51122_1124224733_6.jpg
+toystore/jugueteria_19_18_flickr.jpg
+artstudio/art_painting_studio_21_17_altavista.jpg
+videostore/videoclub_10_12_flickr.jpg
+clothingstore/0020.jpg
+nursery/cmag0308_babyrooms02.jpg
+subway/subway_0498.jpg
+bathroom/indoor_0258.jpg
+tv_studio/estudio_de_television_83_.jpg
+inside_subway/inside_subway_0177.jpg
+greenhouse/2_wallington_greenhouse_470x353.jpg
+prisoncell/cell4.jpg
+restaurant/restaurante_24_15_altavista.jpg
+gym/southglade_gym_2.jpg
+jewelleryshop/Interior1.jpg
+kitchen/kitchen5.jpg
+operating_room/operating_room_26_19_altavista.jpg
+artstudio/painters_studio_03_12_altavista.jpg
+hairsalon/DSCN3262_modifie_1.jpg
+airport_inside/airport_inside_0570.jpg
+kitchen/kitchen031.jpg
+stairscase/room476.jpg
+cloister/BAC09297.jpg
+jewelleryshop/joyeria_10_20_altavista.jpg
+videostore/blockbuster_46_07_flickr.jpg
+lobby/9dVestibule_2_After_.jpg
+artstudio/artistic_studio_01_08_altavista.jpg
+bowling/bowling_0091.jpg
+fastfood_restaurant/hut4.jpg
+airport_inside/airport_inside_0013.jpg
+shoeshop/za4.jpg
+museum/museo_149_10_flickr.jpg
+hairsalon/BIG_20080418112453.jpg
+kindergarden/PreschoolKids.jpg
+florist/florist_02_18_flickr.jpg
+cloister/east_cloister320.jpg
+florist/floreria_09_24_flickr.jpg
+trainstation/train_station_24_08_altavista.jpg
+hairsalon/salon3.jpg
+studiomusic/Music_Studio.jpg
+hairsalon/296614426_3b58446e42.jpg
+inside_bus/inside_bus_066.jpg
+bookstore/bookstore_49_17_altavista.jpg
+cloister/build1385.jpg
+auditorium/auditorium3_1__36.jpg
+bowling/bowling_0050.jpg
+closet/Maple_Tower_Doors.jpg
+grocerystore/610x.jpg
+inside_subway/inside_subway_0088.jpg
+artstudio/artistic_studio_05_19_altavista.jpg
+casino/casino_0047.jpg
+artstudio/art_painting_studio_05_06_altavista.jpg
+hairsalon/p01_10_07_1833.jpg
+kitchen/kitchen177.jpg
+mall/Galleria_003.jpg
+cloister/Moissac_cloister.jpg
+locker_room/locker_room_google_0189.jpg
+trainstation/gare_138_18_flickr.jpg
+auditorium/auditorium8_1__119.jpg
+concert_hall/news_palms_web505.jpg
+church_inside/betischurch_interior.jpg
+gameroom/119gameroombig.jpg
+museum/museo_134_07_flickr.jpg
+computerroom/garantia.jpg
+hairsalon/suburbia_hair_3.jpg
+laboratorywet/laboratorio_quimica_14_03_altavista.jpg
+church_inside/kirche_sao_lourenco_almancil.jpg
+hospitalroom/CIMG0952.jpg
+gym/gimnasio_24_03_altavista.jpg
+toystore/toys_store_23_18_altavista.jpg
+bar/bar_0130.jpg
+bar/bar_0001.jpg
+corridor/quiet_corridor_c.jpg
+waitingroom/sLobby02.jpg
+bookstore/Librairie_45_19_altavista.jpg
+kindergarden/IMG_2327_t600.jpg
+airport_inside/airport_inside_0183.jpg
+stairscase/0307280855117les8.jpg
+trainstation/gare_15_04_flickr.jpg
+hospitalroom/Ben_001.jpg
+kindergarden/PRESCHOOL_PLAYMAT2.jpg
+airport_inside/airport_inside_0190.jpg
+livingroom/easyst022.jpg
+kitchen/iclock.jpg
+lobby/uploads_images_photos_images_fullsize_hotellobby.jpg
+shoeshop/moder.jpg
+shoeshop/Browns2.jpg
+videostore/2vhs.jpg
+concert_hall/Schermerhorn.jpg
+elevator/elevator_google_0061.jpg
+deli/deli_118_06_flickr.jpg
+bakery/bakery_32_04_yahoo.jpg
+shoeshop/zapateria_25_17_flickr.jpg
+kitchen/cdmc1175.jpg
+movietheater/movietheater_google_0026.jpg
+stairscase/N67.jpg
+winecellar/bodega_vino_01_17_altavista.jpg
+cloister/salisbury_cloister_350.jpg
+poolinside/pool_inside_06_10_altavista.jpg
+studiomusic/wideshot_main_studio.jpg
+nursery/seeing_stripes_beautiful_brown_and_blue_baby_boys_nursery_10422.jpg
+fastfood_restaurant/OrangeIn.jpg
+stairscase/stairs04.jpg
+inside_subway/inside_subway_0029.jpg
+florist/fleuriste2.jpg
+waitingroom/Aug29_2007.jpg
+bathroom/el_cuarto_de_bano.jpg
+classroom/IPODIUM.jpg
+museum/museo_83_02_flickr.jpg
+stairscase/int697.jpg
+bakery/bakery7.jpg
+auditorium/booker_20twashingtonhs_auditorium450b_1__48.jpg
+clothingstore/ins32.jpg
+kitchen/k8.jpg
+tv_studio/tv_studio_2_112_.jpg
+greenhouse/20070418klpcnaecl_364_Ies_SCO.jpg
+grocerystore/9d37cca1_088e_4812_a319_9f8d3fcf37a1.jpg
+church_inside/oberkirche01.jpg
+clothingstore/Kleidung1.jpg
+shoeshop/zapateria_21_03_flickr.jpg
+toystore/Spielzeug_56_09_flickr.jpg
+movietheater/3511628962884727_0.jpg
+children_room/AT_01_3B_5486_10_l.jpg
+classroom/classroom_710755.jpg
+subway/subway_0358.jpg
+kitchen/kitchen125.jpg
+cloister/afm_cloister.jpg
+auditorium/11472676233attendees_in_the_main_auditorium_1_1__3.jpg
+dining_room/dining032.jpg
+florist/Flower_shop_Kuala_Lumpur.jpg
+library/28_06_06_Bibliotheque_Municipale_19_2.jpg
+operating_room/operating_room_20_04_altavista.jpg
+poolinside/piscine_interieur_3.jpg
+hospitalroom/DSC01127.jpg
+restaurant/restaurant_19_16_altavista.jpg
+operating_room/surgery_room_16_17_altavista.jpg
+bar/bar_0151.jpg
+computerroom/electronica.jpg
+bookstore/Librairie_22_12_altavista.jpg
+florist/florist_40_04_altavista.jpg
+prisoncell/fatherscell_01.jpg
+restaurant_kitchen/restaurant_kitchen_google_0078.jpg
+kindergarden/PreschoolClassroom1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0061.jpg
+dentaloffice/1626665740_37aaacaff5.jpg
+dining_room/d9.jpg
+jewelleryshop/joyeria10.jpg
+videostore/video_store_19_05_altavista.jpg
+bookstore/spellbinding_bookstore.jpg
+restaurant_kitchen/restaurant_kitchen_google_0067.jpg
+gym/gimnasio_10_08_altavista.jpg
+hairsalon/salon6.jpg
+movietheater/ccs_3_1__19.jpg
+bathroom/b10.jpg
+gameroom/VA_04_02_6000_24_l.jpg
+church_inside/kirche_uebergang.jpg
+prisoncell/15208484cellblock.jpg
+casino/casino_0010.jpg
+mall/4Larcomar_Shopping_Center.jpg
+bathroom/indoor_0461.jpg
+gym/gym001.jpg
+livingroom/living53.jpg
+airport_inside/airport_inside_0261.jpg
+closet/Cognac_RI_Cropped_Shot.jpg
+meeting_room/n457020.jpg
+meeting_room/conf15.jpg
+pantry/pantry_12_11_flickr.jpg
+videostore/video_store_04_15_altavista.jpg
+closet/thumb_l_31.jpg
+laundromat/lavanderia_47_23_flickr.jpg
+library/library03.jpg
+hospitalroom/hospital_room_37_19_altavista.jpg
+laundromat/Catskill_Hall_Laundry_Room.jpg
+bar/bar_0038.jpg
+trainstation/gare_95_19_flickr.jpg
+bar/bar_0570.jpg
+casino/casino_0424.jpg
+livingroom/int114.jpg
+dentaloffice/dentista_65_14_flickr.jpg
+waitingroom/MeetingPlace.jpg
+deli/deli_18_02_yahoo.jpg
+trainstation/gare_107_03_flickr.jpg
+kitchen/cdmc1126.jpg
+dining_room/dining039.jpg
+restaurant_kitchen/restaurant_kitchen_google_0079.jpg
+inside_subway/inside_subway_0428.jpg
+church_inside/metropolitana_97_12_flickr.jpg
+artstudio/painters_studio_31_18_altavista.jpg
+artstudio/art_painting_studio_44_08_altavista.jpg
+dining_room/va_02_04_7112_05_l.jpg
+restaurant/restaurant_01_09_altavista.jpg
+stairscase/N190008.jpg
+tv_studio/dscn2300_copia_40_.jpg
+fastfood_restaurant/Taco_Bell_9.jpg
+greenhouse/spr2007_greenhouse_filling_up.jpg
+hospitalroom/IMG_6996.jpg
+winecellar/bodega_vino_11_12_altavista.jpg
+inside_subway/inside_subway_0202.jpg
+grocerystore/800px_Obst_supermarkt.jpg
+bedroom/homeoff005.jpg
+computerroom/Mvc_001f.jpg
+gameroom/LV_02_04_10915_17_l.jpg
+laundromat/lavanderia_62_16_flickr.jpg
+studiomusic/BB_Studio_1_Mar2005_800.jpg
+nursery/1662_z_1.jpg
+winecellar/wine_storage_42_02_altavista.jpg
+greenhouse/greenhouse276.jpg
+office/despacho2.jpg
+laboratorywet/wetlab.jpg
+stairscase/OR_97_1_5167_13_l.jpg
+bookstore/ins15.jpg
+lobby/sLobby28.jpg
+stairscase/va_02_04_7114_21a_l.jpg
+bookstore/shakespearebookshop.jpg
+classroom/classroom83.jpg
+bowling/bowling_0084.jpg
+kindergarden/lehuaroom.jpg
+nursery/101345g_1.jpg
+bedroom/b19.jpg
+bookstore/Bookstore1_2.jpg
+gym/Gym05.jpg
+hairsalon/large_img_nj.jpg
+tv_studio/tv_studio_18_01_altavista.jpg
+bowling/bowling_0070.jpg
+stairscase/D05a.jpg
+poolinside/piscina_cubierta_03_04_altavista.jpg
+fastfood_restaurant/barinfireworks.jpg
+operating_room/surgery_room_28_08_altavista.jpg
+dining_room/dining03.jpg
+bowling/bowling_0043.jpg
+restaurant_kitchen/restaurant_kitchen_google_0058.jpg
+meeting_room/conf06.jpg
+auditorium/star_20auditorium_202_20k_1__71.jpg
+warehouse/warehouse_0211.jpg
+cloister/Index_claustro.jpg
+restaurant/restaurant_05_09_altavista.jpg
+lobby/Fairmont_Lobby.jpg
+inside_subway/inside_subway_0373.jpg
+auditorium/auditorium_seating_1__33.jpg
+cloister/claustro_pano_w.jpg
+museum/museum_13_08_flickr.jpg
+tv_studio/picfornewsletteraug82003sftechtvset_56_.jpg
+children_room/western_playroom_71_.jpg
+lobby/lobby9909.jpg
+museum/museo_162_24_flickr.jpg
+kindergarden/Toddler_room.jpg
+closet/closet26.jpg
+hospitalroom/int211.jpg
+library/library02.jpg
+prisoncell/jail_cell32.jpg
+museum/museo_90_19_flickr.jpg
+warehouse/warehouse_0031.jpg
+corridor/corbusier_1_leg.jpg
+airport_inside/airport_inside_0362.jpg
+grocerystore/grocery.jpg
+livingroom/in108.jpg
+waitingroom/Salle_attente_clinilab_4.jpg
+gameroom/P6170163.jpg
+laundromat/DSC01042.jpg
+nursery/ss_100446680.jpg
+videostore/video_store_2_1.jpg
+studiomusic/studio_2.jpg
+fastfood_restaurant/snack.jpg
+jewelleryshop/DSC01829.jpg
+office/office2.jpg
+stairscase/lobby30.jpg
+livingroom/l3.jpg
+museum/museum_38_17_altavista.jpg
+grocerystore/shop04.jpg
+laundromat/1209023191.jpg
+greenhouse/greenhousetr_2.jpg
+concert_hall/MAMusicBuildingView1_Small_.jpg
+jewelleryshop/95_14.jpg
+poolinside/swimming_pool_inside.jpg
+gameroom/sallejeux78.jpg
+corridor/corridor1.jpg
+airport_inside/airport_inside_0182.jpg
+office/ins9.jpg
+deli/deli_14_16_yahoo.jpg
+fastfood_restaurant/PH_ROCHESTER_INT3.jpg
+shoeshop/zapateria_24_23_flickr.jpg
+garage/mso1011_LadderBike_bef1_w609.jpg
+bedroom/strongcpl_t.jpg
+office/despacho1_400.jpg
+corridor/hall_c.jpg
+corridor/south_hallway_from_front_c.jpg
+jewelleryshop/joyeria_157_15_flickr.jpg
+kitchen/kitchen189.jpg
+trainstation/gare_144_03_flickr.jpg
+concert_hall/phbalcony.jpg
+florist/florist_26_02_flickr.jpg
+hairsalon/coiffure.jpg
+restaurant/restaurant_43_20_altavista.jpg
+warehouse/warehouse_0181.jpg
+office/o1.jpg
+casino/casino_0015.jpg
+garage/garaje_norte_este.jpg
+elevator/elevator_google_0082.jpg
+florist/florist_41_17_altavista.jpg
+shoeshop/zapatos_tematica.jpg
+inside_subway/inside_subway_0143.jpg
+poolinside/phil3.jpg
+mall/70_12_03_01.jpg
+kindergarden/pre3.jpg
+artstudio/artist_work_place_24_16_altavista.jpg
+cloister/cloisters.jpg
+greenhouse/greenhouse2ln1.jpg
+warehouse/warehouse_0166.jpg
+bakery/bakery_21_08_yahoo.jpg
+concert_hall/nemzeti_hangversenyterem.jpg
+stairscase/AT_01_6B_5490_20_l.jpg
+nursery/2190204970_7b449af783_o.jpg
+restaurant/restaurante_35_12_altavista.jpg
+stairscase/273_2_zoom_1_aminta_grand_hotel_sorrento_lounge.jpg
+bookstore/Librairie_27_01_altavista.jpg
+florist/florist_38_21_flickr.jpg
+kitchen/int365.jpg
+grocerystore/supermarche3_1.jpg
+bathroom/bath17.jpg
+artstudio/art_painting_studio_23_01_altavista.jpg
+library/Bibliothek_kalocsa.jpg
+airport_inside/airport_inside_0106.jpg
+bathroom/room299.jpg
+corridor/n457047.jpg
+mall/West_End_Mall_2_DSC01799_m.jpg
+bar/bar_0016.jpg
+waitingroom/Greatclips_wait.jpg
+children_room/portland_114_36_.jpg
+bakery/bakery_04_03_altavista.jpg
+trainstation/train_station_14_13_altavista.jpg
+movietheater/auditorium_resized_18.jpg
+bakery/boulangerie_01_06_yahoo.jpg
+kitchen/indoor_0263.jpg
+cloister/eandl.jpg
+clothingstore/p0011.jpg
+shoeshop/2008050303001187_375.jpg
+hairsalon/friseur1.jpg
+florist/florist_39_19_altavista.jpg
+closet/Closet_After_1_.jpg
+kindergarden/classroom.jpg
+gameroom/6.jpg
+concert_hall/vhstage.jpg
+livingroom/indoor_0073.jpg
+winecellar/cave_vin_41_15_altavista.jpg
+operating_room/operating_room_26_01_altavista.jpg
+office/office18.jpg
+elevator/elevator_google_0089.jpg
+hospitalroom/DSC_0097.jpg
+stairscase/escalier377.jpg
+church_inside/QuitoChurch.jpg
+gym/gimnasio_137_08_flickr.jpg
+kitchen/int347.jpg
+laundromat/lavanderia_43_13_flickr.jpg
+bedroom/indoor_0110.jpg
+bar/bar_0235.jpg
+prisoncell/Police_1.jpg
+stairscase/spk_murnau_treppe1_big.jpg
+hospitalroom/My_hospital_Room.jpg
+inside_bus/inside_bus_004.jpg
+grocerystore/big_Grocery_Store.jpg
+kitchen/kitchen143.jpg
+elevator/elevator_google_0066.jpg
+greenhouse/serreyu.jpg
+waitingroom/7.jpg
+bookstore/Libreria_48_03_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0014.jpg
+dentaloffice/Dental.jpg
+children_room/AT_01_2B_5493_35_l.jpg
+greenhouse/greenhouse_1.jpg
+closet/closet_1.jpg
+laboratorywet/wet_lab_03_15_altavista.jpg
+bowling/bowling_0178.jpg
+auditorium/auditorium39_112.jpg
+meeting_room/c18.jpg
+waitingroom/deco5_png.jpg
+bar/bar_0054.jpg
+office/home_office_after.jpg
+subway/underground_56_07_flickr.jpg
+greenhouse/serre_printemps.jpg
+clothingstore/946590115_035579bce7_b.jpg
+bar/bar_0061.jpg
+bookstore/index_librairie.jpg
+prisoncell/scrnewjailcell.jpg
+toystore/Spielzeug_41_05_flickr.jpg
+church_inside/kirche76.jpg
+grocerystore/grocery74.jpg
+warehouse/warehouse_0131.jpg
+gym/gym_42_12_altavista.jpg
+clothingstore/common.jpg
+concert_hall/UMass_EX_3.jpg
+waitingroom/waiting_room_31_12_altavista.jpg
+hospitalroom/DSC_0454.jpg
+concert_hall/cscseats.jpg
+gym/gimnasio_38_16_flickr.jpg
+winecellar/cave_champagne_09_20_altavista.jpg
+corridor/2326_2.jpg
+toystore/jugueteria_18_12_flickr.jpg
+artstudio/art_painting_studio_32_17_altavista.jpg
+laundromat/lavanderia_101_20_flickr.jpg
+library/library5.jpg
+museum/museo_14_11_altavista.jpg
+warehouse/warehouse_0050.jpg
+jewelleryshop/joyeria_66_11_flickr.jpg
+elevator/elevator_google_0058.jpg
+artstudio/painters_studio_18_10_altavista.jpg
+airport_inside/airport_inside_0303.jpg
+corridor/p1010067_c.jpg
+auditorium/baird_1__141.jpg
+classroom/scuola06_4.jpg
+clothingstore/1470195165_8499fd04bf.jpg
+classroom/salle_reunion_joliot_b.jpg
+mall/Scarpe_Italiane_Milan_Italy.jpg
+subway/subway_0267.jpg
+artstudio/artist_studio_30_06_altavista.jpg
+bookstore/Libreria_03_09_altavista.jpg
+deli/deli_148_17_flickr.jpg
+kitchen/indoor_0542.jpg
+deli/deli_21_12_yahoo.jpg
+library/43407107_204b8504b5.jpg
+tv_studio/studio11_102_.jpg
+dentaloffice/dentista_75_19_flickr.jpg
+florist/florist_46_10_flickr.jpg
+laundromat/o_laundromat.jpg
+museum/museo_151_05_flickr.jpg
+operating_room/operating_room_25_01_altavista.jpg
+church_inside/underground_55_06_flickr.jpg
+auditorium/websterauditorium_75.jpg
+kindergarden/image4251.jpg
+stairscase/int36.jpg
+tv_studio/set_tv_99_.jpg
+auditorium/auditorium_ambiance_494x326_95.jpg
+florist/floreria_05_17_flickr.jpg
+videostore/blockbuster_04_14_altavista.jpg
+bathroom/room31.jpg
+bar/bar_0047.jpg
+studiomusic/control_console_right_1.jpg
+bathroom/bano3_2.jpg
+hairsalon/peluqueria1_2.jpg
+waitingroom/url_1.jpg
+elevator/elevator_google_0087.jpg
+videostore/videoteka_04_03_altavista.jpg
+church_inside/methodist_june04_02s.jpg
+winecellar/bodega2.jpg
+nursery/chambre_enfant2R.jpg
+clothingstore/boutique_wide.jpg
+elevator/elevator_google_0011.jpg
+locker_room/locker_room_google_0188.jpg
+meeting_room/conf04.jpg
+trainstation/gare_145_04_flickr.jpg
+gym/fieldhouse_weightroom.jpg
+corridor/corridora5.jpg
+fastfood_restaurant/CamilesCafe01.jpg
+bar/bar_0146.jpg
+laundromat/waschsalon_klein.jpg
+library/ins18.jpg
+bathroom/b2.jpg
+cloister/Claustro_de_San_Juan_de_los_Reyes_II.jpg
+hospitalroom/hospital_room_10.jpg
+warehouse/warehouse_0206.jpg
+casino/casino_0012.jpg
+elevator/elevator_google_0010.jpg
+computerroom/Lab_de_Informatica_1.jpg
+bar/bar_0041.jpg
+florist/floreria_08_16_flickr.jpg
+movietheater/10_auditorium_1__1.jpg
+closet/WH_Raised_Panel_RI.jpg
+trainstation/gare_165_15_flickr.jpg
+dining_room/d15a.jpg
+hospitalroom/ashley2007_birth_002.jpg
+kitchen/cdmc1167.jpg
+studiomusic/trabajo_238115785.jpg
+library/library466.jpg
+restaurant/int655.jpg
+hairsalon/dscn2934.jpg
+cloister/kelso_cloister.jpg
+grocerystore/a20071138236957.jpg
+elevator/elevator_google_0027.jpg
+kindergarden/events7.jpg
+movietheater/2535570691_3518c2a636_1__8.jpg
+bathroom/room267.jpg
+clothingstore/Louise_Billgert_35277_RGB_72DPI_2.jpg
+grocerystore/Rachel_at_grocery_store.jpg
+deli/deli_100_17_flickr.jpg
+videostore/blockbuster_42_21_flickr.jpg
+florist/florist_52_08_flickr.jpg
+kindergarden/tourKINDERGARTEN.jpg
+toystore/Spielzeug_62_10_flickr.jpg
+airport_inside/airport_inside_0113.jpg
+shoeshop/Shoe_side_of_shop_SVL.jpg
+subway/subway_0140.jpg
+auditorium/costa_atlantica_navire_amphitheatre_1__144.jpg
+operating_room/surgery_room_14_09_altavista.jpg
+stairscase/Balcony_Epoch.jpg
+pantry/despensa_133_09_flickr.jpg
+poolinside/pool_inside_36_06_altavista.jpg
+prisoncell/jailtour002.jpg
+deli/deli_45_23_flickr.jpg
+gym/gym2.jpg
+laboratorywet/labmartiniempty.jpg
+bar/bar_0482.jpg
+classroom/classroom2.jpg
+classroom/118463700_ead3ee32e3.jpg
+children_room/kids_in_the_playroom_44_.jpg
+bookstore/bookstore_31_03_flickr.jpg
+clothingstore/crystal_shop.jpg
+corridor/hall50.jpg
+prisoncell/Jailcell2323.jpg
+bowling/bowling_0048.jpg
+church_inside/pantry_55_13_flickr.jpg
+computerroom/IM000835.jpg
+children_room/AT_04_04_2000_78_l.jpg
+dining_room/easyst034.jpg
+poolinside/piscina_cubierta_03_03_altavista.jpg
+church_inside/kirche_mogelsberg.jpg
+hairsalon/11571232651.jpg
+laundromat/noosa_124.jpg
+bowling/bowling_0053.jpg
+dining_room/d2.jpg
+bedroom/child4.jpg
+inside_bus/inside_bus_091.jpg
+toystore/toys_store_43_03_altavista.jpg
+warehouse/warehouse_0046.jpg
+children_room/PO_06_03_3000_76_l.jpg
+jewelleryshop/newyork_caron_boutique.jpg
+jewelleryshop/park_jewellers.jpg
+library/neilson_hays_library02.jpg
+fastfood_restaurant/B_CInside.jpg
+warehouse/warehouse_0196.jpg
+buffet/food_on_table.jpg
+dining_room/dining048.jpg
+inside_subway/inside_subway_0113.jpg
+shoeshop/shoes_shop_29_20_altavista.jpg
+inside_bus/inside_bus_089.jpg
+greenhouse/green01.jpg
+kindergarden/classroom2.jpg
+buffet/buffet06.jpg
+garage/tractor_barn_inside.jpg
+grocerystore/shop16.jpg
+lobby/AT_04_03_2001_03_l.jpg
+library/library4.jpg
+locker_room/locker_room_google_0065.jpg
+bookstore/bookstore_10_02_altavista.jpg
+computerroom/computer_lab333.jpg
+grocerystore/organic_food_for_web.jpg
+laboratorywet/wet_lab_06_07_altavista.jpg
+dentaloffice/dentista_85_07_flickr.jpg
+toystore/Spielzeug_145_06_flickr.jpg
+auditorium/auditorium_mc2_1__94.jpg
+jewelleryshop/dsc00562_12_.jpg
+bowling/bowling_0009.jpg
+waitingroom/waiting_room_32_10_altavista.jpg
+auditorium/salle_amphitheatre3_1__170.jpg
+restaurant_kitchen/restaurant_kitchen_google_0021.jpg
+bar/bar_0025.jpg
+bowling/bowling_0107.jpg
+warehouse/warehouse_0121.jpg
+computerroom/computer_room07.jpg
+corridor/pasillo_interior_1_t.jpg
+inside_bus/inside_bus_027.jpg
+nursery/2007_05_01_replace3.jpg
+florist/c04652600522c7ad139144ca0e2b_1_4.jpg
+lobby/sLobby29.jpg
+toystore/store3sm.jpg
+laboratorywet/laboratorio_quimica_12_16_altavista.jpg
+museum/museum_31_15_altavista.jpg
+auditorium/affich_1__76.jpg
+classroom/SALA_DE_AULA_DCNAT.jpg
+cloister/esglesiavic21of1cc1.jpg
+dentaloffice/dentista_32_04_altavista.jpg
+closet/WC_Hutch.jpg
+dining_room/dining31.jpg
+trainstation/gare_160_22_flickr.jpg
+artstudio/art_painting_studio_25_03_altavista.jpg
+casino/casino_0083.jpg
+corridor/coll_couloir.jpg
+bookstore/bookstore_36_02_flickr.jpg
+livingroom/indoor_0463.jpg
+nursery/monkey_nursery_2.jpg
+pantry/pantry_76_14_flickr.jpg
+office/n457045.jpg
+warehouse/warehouse_0018.jpg
+bowling/bowling_0024.jpg
+garage/20071218200319_garaje.jpg
+auditorium/auditorium_101.jpg
+fastfood_restaurant/442a2fd659407_81_1.jpg
+children_room/dsc02536_main_full_14_.jpg
+gym/salle_cardio_grand.jpg
+toystore/Spielzeug_41_09_flickr.jpg
+church_inside/Interieur_Gris.jpg
+waitingroom/waiting_room_04_02_altavista.jpg
+pantry/pantry_63_16_flickr.jpg
+warehouse/warehouse_0102.jpg
+waitingroom/waitingroom1.jpg
+inside_subway/inside_subway_0020.jpg
+locker_room/locker_room_google_0106.jpg
+nursery/img_nursery_planner.jpg
+locker_room/locker_room_google_0103.jpg
+tv_studio/dscn0726_39_.jpg
+concert_hall/allenroom.jpg
+trainstation/train_station_03_08_altavista.jpg
+stairscase/N457074.jpg
+subway/subway_0109.jpg
+bedroom/b3.jpg
+winecellar/wine_cellar_30_20_altavista.jpg
+greenhouse/greenhouse_452.jpg
+hospitalroom/hospital061113_3_560.jpg
+hospitalroom/SUDEEP_HOSPITAL3.jpg
+children_room/HO_00_02_5271_23_l.jpg
+hospitalroom/P1000698.jpg
+meeting_room/conf13.jpg
+restaurant_kitchen/restaurant_kitchen_google_0069.jpg
+waitingroom/patient_waiting_room.jpg
+florist/floreria_05_11_flickr.jpg
+subway/subway_0012.jpg
+toystore/a1_toystore1.jpg
+museum/museo_163_01_flickr.jpg
+jewelleryshop/1p.jpg
+nursery/baby_room_012.jpg
+jewelleryshop/inst_ilum_nego_joyeria.jpg
+bookstore/librairie_wallonie_bruxelles_003.jpg
+prisoncell/jzleoben_21.jpg
+bookstore/bookstore_41_18_altavista.jpg
+closet/BedroomCloset.jpg
+clothingstore/ClothingStore.jpg
+buffet/413224656_cd51fb5f4d.jpg
+stairscase/N26m.jpg
+jewelleryshop/1_1_.jpg
+lobby/IM004853_JPG.jpg
+inside_bus/inside_bus_015.jpg
+children_room/AT_98_3_945_14_l.jpg
+toystore/speelgoed_66_08_flickr.jpg
+winecellar/bodega_17_19_flickr.jpg
+cloister/claustro_de_la_catedral_1224_2.jpg
+hairsalon/thumb52.jpg
+museum/museo_105_12_flickr.jpg
+warehouse/warehouse_0076.jpg
+winecellar/bodega_135_18_flickr.jpg
+children_room/OR_99_4_4922_07A_l.jpg
+gameroom/AT_00_01_8142_36A_l.jpg
+laboratorywet/wet_lab_11_19_altavista.jpg
+elevator/elevator_google_0036.jpg
+cloister/96847179_5961f50b85.jpg
+dining_room/dining023.jpg
+shoeshop/zapateria_22_10_flickr.jpg
+prisoncell/prison_cell_07_02_altavista.jpg
+tv_studio/antena_3_noticias_2004_noticias_3_rafaga_11052004_dvd30015_26_01_29_.jpg
+inside_subway/inside_subway_0235.jpg
+poolinside/schwimmen03_g.jpg
+greenhouse/greenhouse_main.jpg
+concert_hall/City_Halls.jpg
+kitchen/kitchen032.jpg
+buffet/buffet08.jpg
+bakery/best_bakery_01_04_altavista.jpg
+restaurant/restaurante_19_15_altavista.jpg
+elevator/elevator_google_0060.jpg
+casino/casino_0144.jpg
+library/ins21.jpg
+movietheater/14333_dsc02540_1__4.jpg
+winecellar/bodega_64_22_flickr.jpg
+trainstation/gare_20_08_flickr.jpg
+inside_bus/inside_bus_017.jpg
+bookstore/Libreria_20_14_altavista.jpg
+studiomusic/Music_Studio_150_dpi.jpg
+pantry/pantry_59_17_flickr.jpg
+corridor/c11.jpg
+grocerystore/h_3_1103585_1209394189.jpg
+shoeshop/f338.jpg
+inside_subway/inside_subway_0156.jpg
+kindergarden/Preschool_Classroom.jpg
+winecellar/wine_cellar_24_11_altavista.jpg
+bathroom/indoor_0513.jpg
+bowling/bowling_0152.jpg
+computerroom/373437852_4e3926fe0c.jpg
+nursery/babyroom005.jpg
+restaurant_kitchen/restaurant_kitchen_google_0060.jpg
+computerroom/jpg_im17.jpg
+hospitalroom/WFUniversity_Hospital.jpg
+poolinside/pool_inside_01_17_altavista.jpg
+greenhouse/fotos2433.jpg
+museum/museum_43_04_altavista.jpg
+clothingstore/meatpack_boutique2.jpg
+buffet/image_services_restaurant_buffet_1.jpg
+bathroom/bathroom35.jpg
+buffet/Buffet_of_Portuguese_food.jpg
+bathroom/bath98.jpg
+kindergarden/Picture_042.jpg
+bowling/bowling_0157.jpg
+bedroom/rose_bed_room.jpg
+classroom/Imagen_008.jpg
+lobby/lobby34.jpg
+bar/bar_0046.jpg
+cloister/claustro_catedral_oporto.jpg
+computerroom/ComputerRoom_full.jpg
+deli/deli_147_24_flickr.jpg
+florist/florist_31_08_flickr.jpg
+prisoncell/415957860_b226b6b23e.jpg
+casino/casino_0016.jpg
+garage/garage.jpg
+deli/deli_128_21_flickr.jpg
+kitchen/cdmc1164.jpg
+bathroom/indoor_0045.jpg
+fastfood_restaurant/pizza_hut_big.jpg
+auditorium/amphivide_1__87.jpg
+bar/bar_0285.jpg
+locker_room/locker_room_google_0195.jpg
+inside_bus/inside_bus_060.jpg
+meeting_room/conf01.jpg
+lobby/sLobby22.jpg
+museum/museo_01_13_altavista.jpg
+stairscase/AT_98_3_0944_36_l.jpg
+tv_studio/tibetantv_studio48_1_75_.jpg
+museum/museo_08_13_altavista.jpg
+nursery/IM_137611_1.jpg
+corridor/p1010066_c.jpg
+bar/bar_0458.jpg
+casino/casino_0097.jpg
+florist/image002.jpg
+poolinside/141821195_M.jpg
+jewelleryshop/Interior_2.jpg
+bowling/bowling_0020.jpg
+office/room205.jpg
+office/n457030.jpg
+restaurant/restaurante_35_05_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0057.jpg
+bathroom/indoor_0264.jpg
+kindergarden/Preschool_art.jpg
+warehouse/warehouse_0207.jpg
+movietheater/121880878_93cb1c9058.jpg
+gym/gimnasio_68_19_flickr.jpg
+laundromat/lavanderia_77_06_flickr.jpg
+operating_room/operating_room_18_06_altavista.jpg
+elevator/elevator_google_0007.jpg
+kindergarden/preschool_chairs_2006_2.jpg
+buffet/buffet05.jpg
+toystore/jugueteria_19_22_flickr.jpg
+trainstation/gare_94_09_flickr.jpg
+stairscase/Treppe_1.jpg
+classroom/IGLOBE.jpg
+clothingstore/Tibi_Boutique_1_Credit_Ad.jpg
+lobby/lobby0002.jpg
+office/office9.jpg
+mall/1782523123_756a565e97.jpg
+laboratorywet/laboratorio_quimica_14_04_altavista.jpg
+museum/museo_128_11_flickr.jpg
+gameroom/gameroom_1.jpg
+kindergarden/ps_room_475x335.jpg
+library/ins19.jpg
+restaurant_kitchen/restaurant_kitchen_google_0002.jpg
+gym/punttis_gym_overview.jpg
+bookstore/bookstore_142_11_flickr.jpg
+library/biblio01.jpg
+casino/casino_0129.jpg
+computerroom/computer_room1.jpg
+locker_room/locker_room_google_0124.jpg
+artstudio/artist_studio_36_17_altavista.jpg
+buffet/1684965730_e82d832010_b.jpg
+classroom/salleXL.jpg
+mall/mall09.jpg
+children_room/AT_04_02_3000_46_l.jpg
+corridor/corridora3.jpg
+garage/mso1012_ClothesRackBike_bef_w609.jpg
+laboratorywet/peterfeinph.jpg
+dining_room/dining3.jpg
+library/792089_e681119c26.jpg
+movietheater/CYP0101072_P.jpg
+kitchen/kitchen78.jpg
+concert_hall/events1.jpg
+fastfood_restaurant/chipolte2.jpg
+movietheater/domealbertville1.jpg
+nursery/000000.jpg
+movietheater/INP172655C_P.jpg
+studiomusic/studio16.jpg
+church_inside/prty3dfhxo3.jpg
+deli/deli_162_20_flickr.jpg
+livingroom/living82.jpg
+office/homeoff001.jpg
+gym/gimnasio_18_07_altavista.jpg
+winecellar/wine_cellar_expo.jpg
+subway/subway_0456.jpg
+inside_bus/inside_bus_023.jpg
+kitchen/cdmc1178.jpg
+pantry/pantry_117_01_flickr.jpg
+elevator/elevator_google_0031.jpg
+fastfood_restaurant/114543829_e8ef2f7e7e.jpg
+corridor/pasillo_edificio_escuela__480x640_c.jpg
+hairsalon/url.jpg
+bar/bar_0201.jpg
+hospitalroom/5816CareForPatient.jpg
+dining_room/int682.jpg
+studiomusic/estudio1b.jpg
+gym/gimnasio_68_20_flickr.jpg
+laboratorywet/wet_lab_12_10_altavista.jpg
+toystore/jugueteria_01_17_flickr.jpg
+corridor/p1010079_c.jpg
+concert_hall/url.jpg
+stairscase/stairs06.jpg
+grocerystore/2007_03_wfo11.jpg
+studiomusic/int804.jpg
+shoeshop/192622.jpg
+church_inside/metropolitana_134_02_flickr.jpg
+gameroom/gameroom_inside2.jpg
+laboratorywet/laboratorio_quimica_07_04_altavista.jpg
+movietheater/salle_20cinema_1__62.jpg
+kitchen/kitchen086.jpg
+poolinside/022506D.jpg
+restaurant/restaurante_46_08_altavista.jpg
+tv_studio/be5bd13e_1fb4_4dde_8d38_e29dda3815cb_81_.jpg
+inside_bus/inside_bus_086.jpg
+livingroom/int566.jpg
+gym/gimnasio_78_14_flickr.jpg
+restaurant_kitchen/restaurant_kitchen_google_0008.jpg
+dining_room/dining005.jpg
+florist/florist_59_21_flickr.jpg
+hairsalon/pagiovanni.jpg
+livingroom/indoor_0326.jpg
+lobby/800px_DirkvdM_panama_hotel_lobby_1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0073.jpg
+stairscase/kenngott_treppe_buche_sondergelaender.jpg
+fastfood_restaurant/quiznos3.jpg
+corridor/IMGP3211.jpg
+shoeshop/zapateria_06_11_flickr.jpg
+buffet/233827470_93eda76dee.jpg
+concert_hall/Music_Concert_Hall_2.jpg
+gameroom/fac_gameroom.jpg
+studiomusic/novedades639.jpg
+auditorium/auditor_1__90.jpg
+restaurant_kitchen/restaurant_kitchen_google_0045.jpg
+lobby/SD_00_01_51257_09_l.jpg
+auditorium/p1010008_73cb7_1__65.jpg
+restaurant/Restaurant_2.jpg
+computerroom/Computer8i7.jpg
+locker_room/locker_room_google_0240.jpg
+airport_inside/airport_inside_0100.jpg
+laundromat/4_vono.jpg
+laboratorywet/laboratorio_quimica_17_12_altavista.jpg
+concert_hall/g_vigoenfotos_1934d.jpg
+hospitalroom/hospital_room_08_14_altavista.jpg
+tv_studio/studio09_63_.jpg
+auditorium/auditorium_560_43.jpg
+bowling/bowling_0077.jpg
+trainstation/gare_148_17_flickr.jpg
+office/home_office.jpg
+laundromat/lavanderia_25_07_flickr.jpg
+shoeshop/shoes_shop_18_19_altavista.jpg
+airport_inside/airport_inside_0274.jpg
+gym/web_cardio_theatre_gym.jpg
+kindergarden/100_1356_0096.jpg
+concert_hall/asplundh_concert_hall.jpg
+laundromat/lavanderia_96_20_flickr.jpg
+computerroom/cyb_salle_pc_1.jpg
+closet/graphic_home.jpg
+office/corneroffice.jpg
+kitchen/kitchen006.jpg
+locker_room/locker_room_google_0061.jpg
+subway/subway_0073.jpg
+library/opacs.jpg
+kitchen/dsc04183.jpg
+videostore/videoclub_01_15_flickr.jpg
+bookstore/Librairie_28_01_altavista.jpg
+tv_studio/tv_studio_21_02_altavista.jpg
+grocerystore/APRIL242002FakeGroceryStore.jpg
+artstudio/art_painting_studio_10_15_altavista.jpg
+pantry/pantry_165_16_flickr.jpg
+warehouse/warehouse_0467.jpg
+library/Day100006web.jpg
+bathroom/room318.jpg
+inside_subway/inside_subway_0037.jpg
+waitingroom/salle_attente3.jpg
+poolinside/spa_480x320.jpg
+hospitalroom/01HospitalRoom.jpg
+kitchen/kitchen136.jpg
+movietheater/p1010975_1__28.jpg
+winecellar/wine_storage_16_09_altavista.jpg
+bowling/bowling_0139.jpg
+gameroom/gameroom_05_400.jpg
+laboratorywet/wet_lab_30_15_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0091.jpg
+movietheater/tmpa4d7c0f.jpg
+dining_room/indoor_0315.jpg
+bookstore/Libreria_19_03_altavista.jpg
+bedroom/int855.jpg
+jewelleryshop/281208.jpg
+waitingroom/lobby2.jpg
+auditorium/6a00d834515beb69e200e55378baa58834_800wi_1__16.jpg
+bookstore/Libreria_15_07_altavista.jpg
+computerroom/COMPUTER_2520ROOM_2520PICTURE2.jpg
+grocerystore/shop30.jpg
+laboratorywet/wet_lab_43_17_altavista.jpg
+bowling/bowling_0086.jpg
+greenhouse/ferns4.jpg
+operating_room/surgery_room_30_14_altavista.jpg
+closet/closet_organizer.jpg
+gym/gimnasio_167_13_flickr.jpg
+cloister/cloister1.jpg
+meeting_room/i_f_small_conference_room.jpg
+pantry/pantry_33_15_flickr.jpg
+casino/casino_0228.jpg
+kindergarden/langlib.jpg
+lobby/marina_terra_hotel_lobby.jpg
+buffet/warwick_buffet_cater_catering_food_1960_1960s_retro_kf5837.jpg
+cloister/Cloister221.jpg
+movietheater/sala_de_cine4.jpg
+nursery/rowans_nursery_baby_room_1.jpg
+toystore/jugueteria_08_21_flickr.jpg
+nursery/nursery2thumb.jpg
+bathroom/IMG_1313.jpg
+shoeshop/zapateria_04_02_flickr.jpg
+videostore/StoreWeb.jpg
+jewelleryshop/12_1.jpg
+prisoncell/prison_cell_05_14_altavista.jpg
+classroom/earthquake_relief1.jpg
+bakery/bakery_02_03_yahoo.jpg
+office/ins2.jpg
+shoeshop/shoes_shop_47_04_altavista.jpg
+trainstation/estacion_de_ferrocarriles_44_19_altavista.jpg
+library/inside01.jpg
+kindergarden/pre_school_6_66104926_std.jpg
+buffet/cimg3556_1.jpg
+lobby/lobby5.jpg
+pantry/02_pantry_storage_organization_lg.jpg
+subway/subway_0242.jpg
+bookstore/bookstore_full.jpg
+poolinside/piscina_cubierta_11_11_altavista.jpg
+waitingroom/11.jpg
+laundromat/lavanderia_77_05_flickr.jpg
+dentaloffice/dental_office_15_17_altavista.jpg
+inside_subway/inside_subway_0115.jpg
+hairsalon/6988.jpg
+lobby/sLobby11.jpg
+shoeshop/facade_gd.jpg
+children_room/AT_99_6_8883_12_l.jpg
+tv_studio/tv_studio_40_01_altavista.jpg
+trainstation/gare_32_02_flickr.jpg
+fastfood_restaurant/Siem_Reap_airport_Dairy_Queen.jpg
+bar/bar_0231.jpg
+casino/casino_0001.jpg
+nursery/7_chambre_enfant360.jpg
+mall/ShopView_Gesundbrunnen.jpg
+museum/museo_138_19_flickr.jpg
+airport_inside/airport_inside_0123.jpg
+grocerystore/groceries3_main_Full.jpg
+toystore/toys_store_16_01_altavista.jpg
+office/o8.jpg
+garage/IMG_2145.jpg
+livingroom/living71.jpg
+locker_room/locker_room_google_0043.jpg
+bathroom/indoor_0078.jpg
+dentaloffice/dentista_119_22_flickr.jpg
+elevator/elevator_google_0015.jpg
+livingroom/roomscan11.jpg
+computerroom/cip_pool.jpg
+elevator/elevator_google_0042.jpg
+operating_room/surgery_room_07_19_altavista.jpg
+airport_inside/airport_inside_0371.jpg
+elevator/elevator_google_0084.jpg
+office/o7.jpg
+operating_room/surgery_room_31_13_altavista.jpg
+closet/closet9713.jpg
+livingroom/room368.jpg
+corridor/p1010077_c.jpg
+grocerystore/store_fruit_counter.jpg
+lobby/Locker_Room.jpg
+airport_inside/airport_inside_0316.jpg
+kitchen/kitchen004.jpg
+fastfood_restaurant/DSC00476.jpg
+livingroom/room498.jpg
+auditorium/b76521a_3966ea3_b_1__139.jpg
+bedroom/indoor_0057.jpg
+prisoncell/prison_cell_baby_child.jpg
+bedroom/masterbed2.jpg
+casino/casino_0362.jpg
+inside_subway/inside_subway_0053.jpg
+greenhouse/greenhouse_fullgrowth.jpg
+lobby/MBASE_historia.jpg
+bar/bar_0426.jpg
+bookstore/Libreria_17_03_altavista.jpg
+grocerystore/08082003_aisle.jpg
+bowling/bowling_0001.jpg
+clothingstore/st_joseph_michigan_shopping_fashion_boutique_clothing3.jpg
+dentaloffice/dentista_03_17_altavista.jpg
+subway/subway_0355.jpg
+inside_subway/inside_subway_0018.jpg
+museum/museo_16_22_flickr.jpg
+library/Orlando_library_090.jpg
+cloister/lacock_cloister.jpg
+corridor/n457061.jpg
+inside_bus/inside_bus_012.jpg
+hospitalroom/DSC01811.jpg
+office/int77.jpg
+library/Fairfield_Pub_Library_A.jpg
+lobby/Le_Meridien_Kathmandu_Hotel_Lobby_Sep_2005.jpg
+poolinside/piscina_cubierta_12_11_altavista.jpg
+inside_bus/inside_bus_052.jpg
+toystore/keeling_market20.jpg
+trainstation/train_station_48_05_altavista.jpg
+winecellar/bodega_04_03_altavista.jpg
+concert_hall/1217_2_1000_Buro_Perth_Concert_Hall_2.jpg
+restaurant/restaurant_15_18_altavista.jpg
+buffet/ricetable.jpg
+florist/star_florist.jpg
+airport_inside/airport_inside_0453.jpg
+greenhouse/greenhouse042.jpg
+bakery/bakery_11_14_yahoo.jpg
+garage/garage187.jpg
+jewelleryshop/94_13.jpg
+fastfood_restaurant/6.jpg
+gym/media39989.jpg
+laundromat/lavanderia_53_13_flickr.jpg
+shoeshop/marky_png.jpg
+poolinside/1637_7502M.jpg
+livingroom/living67.jpg
+warehouse/warehouse_0171.jpg
+artstudio/art_painting_studio_51_15_altavista.jpg
+church_inside/Poitiers_Church_of_Notre_Dame_de_la_Grande_IMG_4877.jpg
+hospitalroom/IMG_1313.jpg
+stairscase/IMG_7676.jpg
+toystore/Spielzeug_35_09_flickr.jpg
+hospitalroom/habitacion_hospital_06_10_altavista.jpg
+laboratorywet/laboratorio_quimica_06_05_altavista.jpg
+airport_inside/airport_inside_0244.jpg
+gym/gimnasio_26_15_flickr.jpg
+studiomusic/control1.jpg
+bookstore/Libreria_35_17_altavista.jpg
+hospitalroom/IMG_0042.jpg
+studiomusic/studio21.jpg
+inside_bus/inside_bus_028.jpg
+trainstation/gare_07_11_flickr.jpg
+hairsalon/hair_total.jpg
+shoeshop/3149_1_empresa1.jpg
+artstudio/art_painting_studio_39_06_altavista.jpg
+classroom/salle_24.jpg
+concert_hall/concerthall_empty.jpg
+waitingroom/Waiting_Room_1.jpg
+auditorium/la_salle_de_l_auditorium_imagelarge_1__154.jpg
+trainstation/train_station_37_10_altavista.jpg
+bookstore/bookstore_25_20_altavista.jpg
+inside_subway/inside_subway_0280.jpg
+bar/bar_0131.jpg
+buffet/308782383_1400880090.jpg
+gym/gimnasio_46_18_altavista.jpg
+fastfood_restaurant/colorado_springs_chipotle6.jpg
+buffet/Sunday_Dinner.jpg
+gym/url.jpg
+corridor/p1010078_c.jpg
+mall/mall40.jpg
+prisoncell/jailcell333.jpg
+studiomusic/susustudio.jpg
+inside_subway/inside_subway_0359.jpg
+stairscase/1115735139.jpg
+concert_hall/OnondagaCivicCenter.jpg
+children_room/bec438b5_c449_400d_a0b3_e9f9309c0d7e_player_41_.jpg
+locker_room/locker_room_google_0245.jpg
+restaurant/int60.jpg
+gameroom/salle_de_jeux_09_05_altavista.jpg
+gameroom/gameroom_good.jpg
+mall/alamanda.jpg
+studiomusic/117989573_65294a6fcb.jpg
+gameroom/salle_de_jeux441.jpg
+office/o6.jpg
+classroom/Japanese_classroom.jpg
+grocerystore/WEB2.jpg
+buffet/Buffet_Lettuce_gif.jpg
+tv_studio/cd_teleideal_108_33_.jpg
+bedroom/indoor_0515.jpg
+dining_room/interior005.jpg
+hairsalon/salon1687.jpg
+studiomusic/Studiow560h420.jpg
+restaurant_kitchen/restaurant_kitchen_google_0039.jpg
+trainstation/room212.jpg
+concert_hall/canopy.jpg
+pantry/pantry_106_16_flickr.jpg
+library/1093023.jpg
+children_room/AT_99_1_7838_12A_l.jpg
+gym/fitness_center3.jpg
+stairscase/roomscan29.jpg
+bookstore/125_115_LibrairieNas.jpg
+classroom/Level_6_C_classroom.jpg
+bar/bar_0233.jpg
+grocerystore/167613_3.jpg
+cloister/525066.jpg
+hairsalon/salon10.jpg
+operating_room/surgery_room_30_08_altavista.jpg
+hairsalon/Salon1111.jpg
+restaurant/bistro_restaurant_for.jpg
+bakery/boulangerie_48_07_yahoo.jpg
+studiomusic/music-studio.jpg
+elevator/elevator_google_0050.jpg
+livingroom/living38.jpg
+winecellar/bodega_101_07_flickr.jpg
+locker_room/locker_room_google_0143.jpg
+winecellar/cave_champagne_06_08_altavista.jpg
+restaurant/Bertucci_01_lg.jpg
+prisoncell/036f.jpg
+clothingstore/86_Bookstore1.jpg
+elevator/elevator_google_0102.jpg
+nursery/baby_room_and_jenny_722549.jpg
+bar/bar_0132.jpg
+inside_bus/inside_bus_034.jpg
+pantry/Closet_off_of_kitchen.jpg
+children_room/adler_pink_kids_room.jpg
+library/PCPL_gen.jpg
+corridor/hallway1_c.jpg
+hairsalon/111528037_7494ae335f.jpg
+closet/One_of_2_Closets_in_Master_Bedroom_A_Walk_In_Closet.jpg
+stairscase/N457072.jpg
+movietheater/movietheater_google_0010.jpg
+winecellar/wine_cellar_40_18_altavista.jpg
+bowling/bowling_0090.jpg
+clothingstore/FotoLoj_ID1_2007_3_30_L1030672.jpg
+children_room/kids_playroom_zurich_45_.jpg
+deli/deli_131_15_flickr.jpg
+hairsalon/willkommen.jpg
+bedroom/IMG_2127.jpg
+closet/main_closet.jpg
+restaurant/photos_salle1.jpg
+restaurant_kitchen/restaurant_kitchen_google_0066.jpg
+church_inside/FreeFoto_castle_30_33.jpg
+dentaloffice/dentista_oficina_01_07_flickr.jpg
+lobby/lobby121211.jpg
+bar/bar_0194.jpg
+laboratorywet/wet_lab_08_10_altavista.jpg
+office/despacho3_400.jpg
+stairscase/stairs02.jpg
+bowling/bowling_0058.jpg
+restaurant/restaurant_06_10_altavista.jpg
+concert_hall/west1.jpg
+jewelleryshop/colonialjewelers41_32_.jpg
+restaurant/url_2.jpg
+dentaloffice/dental_office.jpg
+mall/full_shopping_Central_1.jpg
+stairscase/D16a.jpg
+winecellar/wine_cellar_03_03_altavista.jpg
+office/cover_image_dreamoffice.jpg
+locker_room/locker_room_google_0034.jpg
+garage/garage_02.jpg
+gameroom/sala_de_juegos_08_20_altavista.jpg
+kindergarden/preschool_room.jpg
+meeting_room/c11.jpg
+garage/vacation_home_57garage.jpg
+operating_room/operating_room_27_01_altavista.jpg
+buffet/060926buffet_560.jpg
+computerroom/IMG_1144.jpg
+trainstation/estacion_de_ferrocarriles_39_16_altavista.jpg
+bathroom/indoor_0242.jpg
+videostore/blockbuster_38_01_altavista.jpg
+office/va_02_05_9775_04_l.jpg
+buffet/322497197_a67f529fbe.jpg
+artstudio/art_painting_studio_36_06_altavista.jpg
+toystore/jugueteria_15_10_flickr.jpg
+casino/casino_0324.jpg
+concert_hall/ava_theater.jpg
+subway/subway_0288.jpg
+kitchen/cdmc1289.jpg
+laboratorywet/wet_lab_24_11_altavista.jpg
+tv_studio/tv_studio876_69_.jpg
+inside_subway/inside_subway_0175.jpg
+bookstore/Libreria_49_02_altavista.jpg
+laundromat/lavanderia_48_01_flickr.jpg
+subway/subway_0463.jpg
+trainstation/train_station_47_06_altavista.jpg
+deli/deli_63_04_flickr.jpg
+gameroom/AT_99_2_7450_20_l.jpg
+bookstore/OakParkFrontView.jpg
+gameroom/gameroom688.jpg
+movietheater/sala_de_cine_13_03_altavista.jpg
+mall/hillsdale_mall_photo2.jpg
+prisoncell/jail02.jpg
+artstudio/artist_studio_12_14_altavista.jpg
+subway/subway_0257.jpg
+bathroom/bath.jpg
+waitingroom/JubileeMeetingRoom.jpg
+hospitalroom/050622_13x.jpg
+garage/dbl_garage_interior.jpg
+clothingstore/Boutique_Takenoko.jpg
+cloister/525014.jpg
+livingroom/ph_02_03_4675_04_l.jpg
+pantry/pantry_01_11_flickr.jpg
+studiomusic/estudio.jpg
+toystore/url56.jpg
+florist/050621_florist2.jpg
+concert_hall/concertgebouw2005.jpg
+waitingroom/sLobby09.jpg
+museum/museum_33_14_altavista.jpg
+shoeshop/shoes_shop_32_06_altavista.jpg
+warehouse/warehouse_0062.jpg
+concert_hall/slide7.jpg
+library/bibliotheque55.jpg
+children_room/img_0194_21_.jpg
+mall/wMallAmInt2_ep.jpg
+meeting_room/n457018.jpg
+bookstore/Libreria_08_02_altavista.jpg
+concert_hall/concerthall01.jpg
+inside_bus/inside_bus_099.jpg
+museum/museum_10_11_flickr.jpg
+office/office5.jpg
+gameroom/SalleDeJeux.jpg
+movietheater/img_497_819_1__23.jpg
+dining_room/dinner01.jpg
+locker_room/locker_room_google_0205.jpg
+bookstore/bookstore_45_03_altavista.jpg
+grocerystore/url_1.jpg
+bowling/bowling_0103.jpg
+concert_hall/PAC_interior.jpg
+restaurant_kitchen/restaurant_kitchen_google_0024.jpg
+hairsalon/_PZF03ZQH3ZmH0Av0kYGRg.jpg
+laboratorywet/1_analytical_laboratories.jpg
+movietheater/movietheater_google_0042.jpg
+corridor/couloir01.jpg
+toystore/speelgoed_40_18_flickr.jpg
+kindergarden/prek2.jpg
+lobby/sLobby20.jpg
+museum/museo_86_05_flickr.jpg
+computerroom/2632.jpg
+toystore/toys_store_27_19_altavista.jpg
+bakery/boulangerie_30_11_altavista.jpg
+concert_hall/Mecanoo_in_Kaohsiung_Taiwan_3.jpg
+corridor/lv_02_04_10915_20_l.jpg
+studiomusic/int771.jpg
+bathroom/room357.jpg
+restaurant/salle1.jpg
+computerroom/Informatica4.jpg
+children_room/AT_98_5_989_08_l.jpg
+deli/deli_119_04_flickr.jpg
+tv_studio/tv_studio2b_115_.jpg
+videostore/videoclub_09_13_altavista.jpg
+buffet/860304346_f61ad7eb22.jpg
+deli/deli_111_17_flickr.jpg
+shoeshop/Franchise500x375_1.jpg
+artstudio/artist_studio_31_11_altavista.jpg
+garage/garage_inside.jpg
+kitchen/indoor_0440.jpg
+artstudio/art_painting_studio_23_06_altavista.jpg
+inside_bus/inside_bus_039.jpg
+clothingstore/img_3242_tokyo_harajuku_jingu_mae_meiji_dori_mise_fashion_clothing_store_on_meiji_dori_harajuku_jingumae.jpg
+fastfood_restaurant/melvados_gif.jpg
+jewelleryshop/01.jpg
+livingroom/room5.jpg
+tv_studio/tv_am_studio_a_1983_tv_am_org_uk_400p_107_.jpg
+bar/bar_0386.jpg
+dining_room/Dining20.jpg
+concert_hall/sydney_opera_house_concert_hall.jpg
+livingroom/living75.jpg
+laboratorywet/wet_lab_17_14_altavista.jpg
+subway/subway_0351.jpg
+trainstation/gare_125_22_flickr.jpg
+tv_studio/tv_studio_06_08_altavista.jpg
+restaurant_kitchen/restaurant_kitchen_google_0026.jpg
+museum/museum_48_11_altavista.jpg
+children_room/AT_99_2_8171_36_l.jpg
+grocerystore/shop17.jpg
+pantry/Blakes_26_.jpg
+concert_hall/main_concert_hall_within.jpg
+airport_inside/airport_inside_0085.jpg
+hospitalroom/ICU.jpg
+laundromat/470_144925.jpg
+classroom/02_3_Day_Classroom_Overview.jpg
+restaurant/restaurant_09_03_altavista.jpg
+kitchen/kitchen226.jpg
+elevator/elevator_google_0079.jpg
+laundromat/Guest_Laundry_Room.jpg
+livingroom/at_01_6b_5490_30a_l.jpg
+restaurant/BistroMini.jpg
+restaurant_kitchen/restaurant_kitchen_google_0099.jpg
+kindergarden/classroom8.jpg
+office/office6.jpg
+bar/bar_0136.jpg
+elevator/elevator_google_0037.jpg
+locker_room/locker_room_google_0126.jpg
+stairscase/stairs01.jpg
+winecellar/bodega_69_16_flickr.jpg
+bedroom/s61.jpg
+classroom/salle_de_cours_2.jpg
+garage/garage_interior1.jpg
+inside_bus/inside_bus_085.jpg
+deli/deli_45_19_flickr.jpg
+gameroom/salle_de_jeux156.jpg
+casino/casino_0387.jpg
+computerroom/ComputerClassroom2.jpg
+corridor/IMG_9415.jpg
+museum/museo_10_09_altavista.jpg
+operating_room/operating_room_24_16_altavista.jpg
+bar/bar_0279.jpg
+grocerystore/070707_15291.jpg
+jewelleryshop/foto_joyeria.jpg
+stairscase/room511.jpg
+laundromat/lavanderia_53_23_flickr.jpg
+prisoncell/Jail_Cell23.jpg
+bookstore/bookstore_23_21_flickr.jpg
+locker_room/locker_room_google_0244.jpg
+movietheater/CCP0014467_P.jpg
+bar/bar_0302.jpg
+church_inside/metropolitana_36_18_flickr.jpg
+restaurant/chambre_resto_3.jpg
+children_room/children_playroom_12_.jpg
+restaurant_kitchen/restaurant_kitchen_google_0072.jpg
+livingroom/l11.jpg
+pantry/pantry_40_03_flickr.jpg
+closet/Duluth_CherryX.jpg
+jewelleryshop/yampell_sidewall_30_.jpg
+meeting_room/conf28.jpg
+winecellar/cave_champagne_09_14_altavista.jpg
+winecellar/wine_cellar_39_13_altavista.jpg
+closet/MasterSuiteTrad.jpg
+inside_subway/inside_subway_0338.jpg
+bathroom/indoor_0368.jpg
+deli/deli_119_19_flickr.jpg
+dentaloffice/dentaire_01_22_flickr.jpg
+laboratorywet/wet_lab_03_19_altavista.jpg
+office/o2.jpg
+concert_hall/Concertgebouw1.jpg
+bar/bar_0439.jpg
+kindergarden/classroom122.jpg
+nursery/complete_baby_room_furnitures.jpg
+classroom/Classroom010_full.jpg
+computerroom/aula_informatica_gif.jpg
+elevator/elevator_google_0083.jpg
+kitchen/indoor_0262.jpg
+dentaloffice/dentista_117_06_flickr.jpg
+tv_studio/plato_de_television_01_03_altavista.jpg
+restaurant/restaurante_06_08_altavista.jpg
+gym/Gym432.jpg
+bookstore/Libreria_19_02_altavista.jpg
+library/students_library_computers.jpg
+lobby/lobby2998.jpg
+nursery/103ensembleb.jpg
+bathroom/roomscan34.jpg
+classroom/sala_de_aula.jpg
+kindergarden/toddlers.jpg
+prisoncell/carcel_79_22_flickr.jpg
+museum/museum_43_03_altavista.jpg
+trainstation/gare_83_16_flickr.jpg
+florist/florist_03_01_flickr.jpg
+gameroom/game_room.jpg
+videostore/videoclub_07_15_flickr.jpg
+stairscase/int696.jpg
+church_inside/Kirche45.jpg
+warehouse/warehouse_0126.jpg
+dining_room/dining017.jpg
+restaurant/restaurant_17_17_altavista.jpg
+trainstation/gare_115_16_flickr.jpg
+greenhouse/invernaderos_fotos_015.jpg
+elevator/elevator_google_0055.jpg
+livingroom/l12.jpg
+movietheater/movietheater_google_0006.jpg
+bakery/bakery_02_20_yahoo.jpg
+inside_subway/inside_subway_0154.jpg
+bakery/bakery_14_17_yahoo.jpg
+dentaloffice/dentista_121_23_flickr.jpg
+laboratorywet/laboratorio_quimica_01_18_flickr.jpg
+church_inside/Columb_Eglise_int1.jpg
+garage/9_large.jpg
+buffet/central_buffet_inside.jpg
+airport_inside/airport_inside_0141.jpg
+bedroom/at_00_05_8293_15_l.jpg
+clothingstore/501005839_primary.jpg
+restaurant/restaurant_27_17_altavista.jpg
+cloister/Refect_Cloister_Jun04_D3613sAR.jpg
+toystore/toys_store_27_05_altavista.jpg
+garage/IMG_0122.jpg
+nursery/nursery3.jpg
+computerroom/computerroom03.jpg
+movietheater/p1010981_1__30.jpg
+warehouse/warehouse_0194.jpg
+pantry/pantry_87_02_flickr.jpg
+bathroom/room280.jpg
+florist/florist_43_02_altavista.jpg
+prisoncell/7579543Cruise094.jpg
+children_room/playroom1_53_.jpg
+elevator/elevator_google_0016.jpg
+jewelleryshop/5b_tesorini_9_.jpg
+bookstore/bookstore_39_06_altavista.jpg
+trainstation/estacion_de_ferrocarriles_28_09_altavista.jpg
+dining_room/dining058.jpg
+inside_bus/inside_bus_081.jpg
+videostore/video_store_10_15_altavista.jpg
+classroom/DCP_1461grande.jpg
+gym/gym3.jpg
+jewelleryshop/joyeria.jpg
+subway/subway_0094.jpg
+stairscase/int10.jpg
+elevator/elevator_google_0025.jpg
+videostore/videostore.jpg
+tv_studio/tv_studio_18_08_altavista.jpg
+clothingstore/Paris_Boutique_Inside_Photo_three_way_mirro.jpg
+videostore/videoteca_02_18_flickr.jpg
+warehouse/warehouse_0366.jpg
+meeting_room/n457039.jpg
+poolinside/piscina_cubierta_04_14_altavista.jpg
+jewelleryshop/4.jpg
+bedroom/b9.jpg
+bookstore/Libreria_16_18_altavista.jpg
+children_room/90906stacysplayroomafter004_w300h225_9_.jpg
+bakery/bakery_07_17_yahoo.jpg
+closet/closet_open.jpg
+studiomusic/Studio1small.jpg
+clothingstore/336110682_2e01b0f9be.jpg
+kindergarden/IMG_1504_18202246_std.jpg
+concert_hall/StageFulltag.jpg
\ No newline at end of file
diff --git a/aggregate_covariance.m b/aggregate_covariance.m
new file mode 100755
index 0000000..17e5faf
--- /dev/null
+++ b/aggregate_covariance.m
@@ -0,0 +1,40 @@
+% Carl Doersch (cdoersch at cs dot cmu dot edu)
+% compute features for a set of images, and then the sufficient
+% statistics needed for computing the mean and covariance matrix.
+ntotal=0;
+for(i=1:numel(dsidx))
+ params=ds.conf.params;
+ I = im2double(getimg(ds,ds.myiminds(dsidx(i))));
+
+ if(dsfield(params,'imageCanonicalSize'))
+ [IS, scale] = convertToCanonicalSize(I, params.imageCanonicalSize);
+ else
+ IS=I;
+ end
+ pyramid = constructFeaturePyramidForImg(I, params);
+ pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2;
+ [features, levels, indexes] = unentanglePyramid(pyramid, pcs,struct('normalizefeats',false));
+ if(isempty(features))
+ continue;
+ end
+ if(~exist('featsum','var'))
+ featsum=sum(features,1);
+ else
+ featsum=featsum+sum(features,1);
+ end
+ ntotal=ntotal+size(features,1);
+ if(~exist('dotsum','var'))
+ dotsum=features'*features;
+ else
+ dotsum=dotsum+features'*features;
+ end
+end
+if(ntotal==0)
+ return
+end
+ds.n{dsidx(1)}=ntotal;
+ds.featsum{dsidx(1)}=featsum;
+ds.dotsum{dsidx(1)}=dotsum;
+for(i=1:numel(dsidx))
+ ds.imgflags{dsidx(i)}=1;
+end
diff --git a/assigntoclosest.m b/assigntoclosest.m
new file mode 100755
index 0000000..327d24c
--- /dev/null
+++ b/assigntoclosest.m
@@ -0,0 +1,36 @@
+% efficient nearest-neighbors in Euclidean distance.
+% each row of toassign is assigned to the nearest row in targets.
+% closest(i) is the row-index in targets of the closest element
+% for toassign(i,:). outdist(i) is the distance to that point.
+function [closest,outdist]=assigntoclosest(toassign,targets,nonrm)
+ global ds;
+ if(isempty(targets))
+ closest=[];
+ outdist=[];
+ return;
+ end
+ targsq=targets.^2;%sum(targets.^2,2);
+ closest=zeros(size(toassign,1),1);
+ outdist=zeros(size(toassign,1),1);
+ for(i=1:800:size(toassign,1))
+ inds=i:min(i+800-1,size(toassign,1));
+ batch=toassign(inds,:);
+ batchsq=sum(batch.^2,2);
+ inprod=targets*(batch');
+ if(dsbool(ds.conf,'whiteningv2')||(exist('nonrm','var')&&nonrm))
+ dist=inprod;
+ [outdist(inds),closest(inds)]=max(dist,[],1);
+ else
+ %dist=bsxfun(@plus,bsxfun(@minus,batchsq',2*inprod),targsq);
+ normval=sqrt(bsxfun(@rdivide,targsq*(batch'~=0),sum(batch'~=0,1))-bsxfun(@rdivide,(targets*(batch'~=0)).^2,sum(batch'~=0,1).^2));
+ %normval=sqrt(targsq*(batch'~=0)-bsxfun(@rdivide,(targets*(batch'~=0)).^2,sum(batch'~=0,1)));
+
+ normval(normval==0)=1;
+ dist=(-bsxfun(@rdivide,inprod,sum(batch'~=0,1))./normval);
+ %if(any(dist(:))<0)
+ %keyboard;
+ %end
+ [outdist(inds),closest(inds)]=min(dist,[],1);
+ end
+ end
+end
diff --git a/autoclust_opt_init.m b/autoclust_opt_init.m
new file mode 100755
index 0000000..2b3bb39
--- /dev/null
+++ b/autoclust_opt_init.m
@@ -0,0 +1,82 @@
+% Carl Doersch (cdoersch at cs dot cmu dot edu)
+% Initialize each detector in one batch. Initial weight vectors are in
+% ds.detectors{dsidx}, and initial patch features are in ds.initFeats.
+% For the most part, it's just copying the data in ds.initFeats into the
+% detector structure, but it also needs to set the bias. It's important
+% to give a reasonable initial estimate of the bias because if affects the
+% number of patches mined in the early rounds, which can have a big impact
+% on speed.
+
+posPats=dsload('ds.initPatches');
+dsload('ds.initFeats');
+
+% Find the label for this batch and select a set of negative patches from
+% ds.initFeats. These negatives are needed to calibrate each detector in the batch.
+dsload('ds.imgs');
+dsload('ds.classperbatch');
+dsload('ds.batchfordetr');
+myclusts=ds.batchfordetr(ds.batchfordetr(:,2)==dsidx,1);
+neginds=find(idxwithdefault(ds.imgs{ds.conf.currimset}.label,ds.initPatches(:,7),0)~=ds.classperbatch(dsidx));
+rand('seed',dsidx);
+rp=randperm(numel(neginds));
+rp=rp(1:min(numel(rp),5000));
+negPats=ds.initPatches(neginds(rp),:);
+initFeatsNeg=ds.initFeats(neginds(rp),:);
+
+% loop over the detectors, initializing each one. Note that ds.conf.params.graddescfun
+% is called to actually do the initialization.
+alldets=[];
+featstokeep={};
+for(i=1:size(ds.detectors{dsidx}.id,1))
+ % Select a single detector.
+ ctr=effstridx(ds.detectors{dsidx},i);
+ disp(['optimizing: ' num2str(ctr.id)]);
+
+ % Find the initial feature(s) for this patch (in this algorithm, it
+ % will be the single initially sampled patch).
+ data=[ds.initFeats(ds.initPatches(:,6)==myclusts(i),:);initFeatsNeg];
+
+ % Compute whether each patch is a positive (it's associated with this detector)
+ % or a negative (it came from initFeatsNeg).
+ lab=zeros(size(data,1),1);
+ lastpos=sum(ds.initPatches(:,6)==myclusts(i));
+ lab(1:lastpos)=1;
+
+ % Normalize and rescale the detector. TODO: this should probably
+ % be a parameter.
+ ctr.w=ctr.w/norm(ctr.w)*2;
+ ctr.b=.1;
+
+ % Call the gradient descent function to do the initialization.
+ % doGradDescentProj will simply set ctr.b such that the constraint
+ % is satisfied.
+ [ctr_out_tmp,scores]=ds.conf.params.graddescfun(data',lab*2-1,[ctr.w ctr.b]',ones(size(lab')),0);
+ ctr.w=c(ctr_out_tmp(1:end-1))';
+ ctr.b=ctr_out_tmp(end);
+ ctr_out(i)=ctr;
+
+ % Read the scores produced by ds.conf.params.graddescfun for each patch
+ % and select only the ones above -.02. However, make sure that we have
+ % at least numel(ctr.w)/5; too few patches may cause us to degenerate later.
+ sscores=sort(scores,'descend');
+ thr=min(-.02,sscores(min(ceil(numel(ctr.w)/5),numel(sscores))));
+ dets=[posPats(ds.initPatches(:,6)==myclusts(i),:);negPats(scores((lastpos+1):end)>=thr,:)];
+ featstokeep{end+1,1}=data([true(lastpos,1);(scores((lastpos+1):end)>=thr)'],:);
+ dets(:,6)=myclusts(i);
+ alldets=[alldets;dets];
+
+end
+
+% write out the initialized detectors & cache the detections in the
+% proper location. If ds.sys.distproc.localdir is set, write the
+% cached features there. Note that this will "assign" this batch
+% to one particular machine; any other machine that tries to access
+% the cache will fail!
+ds.round.detectors{dsidx}=str2effstr(ctr_out);
+ds.round.prevdets{dsidx}=alldets;
+if(dsfield(ds,'sys','distproc','localdir'))
+ prevfeats=cell2mat(featstokeep);
+ save([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_0.mat'],'prevfeats');
+else
+ ds.round.prevfeats{dsidx}=cell2mat(featstokeep);
+end
diff --git a/autoclust_optimize.m b/autoclust_optimize.m
new file mode 100755
index 0000000..cc014e8
--- /dev/null
+++ b/autoclust_optimize.m
@@ -0,0 +1,155 @@
+dsload('ds.batchfordetr');
+dsload('ds.classperbatch');
+imgs=dsload('ds.imgs{ds.conf.currimset}');
+% load the detections that were used for training on the previous round.
+% prevdets countains the bounding boxes; prevweights contains the alpha's
+% from the paper, and prevfeats is the actual feature vectors.
+prevdets=dsload(['ds.round.prevdets{' num2str(dsidx) '}'],'clear');
+dsload(['ds.round.prevweights{' num2str(dsidx) '}']);
+if(isfield(ds.round,'prevweights'))
+ prevweights=ds.round.prevweights{dsidx};
+ ds.round=rmfield(ds.round,'prevweights');
+else
+ prevweights=ones(size(prevdets,1),1);
+end
+dsload('ds.round.roundid');
+% if there's a local directory, load the features from there (we're guaranteed
+% to be the only machine optimizing this detector). Otherwise they're
+% stored in dswork.
+if(dsfield(ds,'sys','distproc','localdir'))
+ if(ds.round.roundid>5)
+ % if you're running out of disk space you can delete data from old rounds...but note
+ % that this will make it impossible to back up.
+ delete([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid-2) '.mat']);
+ end
+ load([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid-1) '.mat']);
+else
+ prevfeats=dsload(['ds.round.prevfeats{' num2str(dsidx) '}'],'clear');
+end
+
+dsload('ds.round.myiminds');
+mydetrs=ds.batchfordetr(ds.batchfordetr(:,2)==dsidx,1);
+
+% Discard any irrelevant patches from previous rounds. That generally means
+% any patch from an image that we re-ran detection on during hte current round.
+% The first patch in the list for each detector, however, is generally
+% kept (control this behavior with the ds.round.exceptfirst flag). This patch
+% is the one that was randomly sampled to initialize the cluster. This behavior
+% is an artifact from versions of this codebase which treated the initial patch
+% as special and broke if it disappeared. It's probably not needed, but
+% I had this flag set for the experiments in the paper.
+dsload('ds.round.discardprevpatches');
+dsload('ds.round.exceptfirst');
+tokeep=~ismember(prevdets(:,7),ds.round.myiminds);
+[~,candidatepatches]=ismember(mydetrs,prevdets(:,6),'R2012a');
+if(~all(imgs.label(prevdets(candidatepatches,7))==ds.classperbatch(dsidx)))
+ error('classperbatch wrong');
+end
+tokeep(candidatepatches)=true;
+if(dsbool(ds.round,'discardprevpatches'))
+ tokeep(:)=false;
+ if(dsbool(ds.round,'exceptfirst'))
+ tokeep(candidatepatches)=true;
+ end
+end
+discardifnew=prevdets(candidatepatches(tokeep(candidatepatches)),[6:7]);
+dets={prevdets(tokeep,:)};
+feats={prevfeats(tokeep,:)};
+allovlweight={prevweights(tokeep,:)};
+clear prevdets;
+clear prevfeats;
+clear prevweights;
+
+% Load the detections from the current round of detection.
+for(i=1:numel(ds.round.myiminds))
+ if(~isempty(ds.round.newfeat{dsidx,i}.assignedidx))
+ tokeep=~ismember(ds.round.newfeat{dsidx,i}.assignedidx(:,6:7),discardifnew,'rows');
+ dets{end+1}=ds.round.newfeat{dsidx,i}.assignedidx(tokeep,:);
+ feats{end+1}=double(ds.round.newfeat{dsidx,i}.feat(tokeep,:));
+ if(isfield(ds.round.newfeat{dsidx,i},'ovlweights'))
+ allovlweight{end+1}=ds.round.newfeat{dsidx,i}.ovlweights(tokeep,:);
+ else
+ allovlweight{end+1}=ones(size(feats{end},1),1);
+ end
+ end
+ if(mod(i,100)==0)
+ disp(['img ' num2str(i) ' of ' num2str(numel(ds.round.myiminds))])
+ end
+end
+ds.newdets{dsload('ds.round.roundid'),dsidx}=structcell2mat(dets(2:end)');
+
+dets=structcell2mat(dets(:));
+allovlweight=structcell2mat(allovlweight(:));
+feats=structcell2mat(feats(:));
+if(size(feats,1)>500000)
+ error('featsall too big')
+end
+
+% Distribute the detections in this batch by detector id, so we can train one
+% detector at a time.
+[dets feats allovlweight idforcell]=distributeby(dets, feats, allovlweight, dets(:,6));
+if(~all(idforcell==mydetrs(:)))
+ idforcell
+ mydetrs
+ error('something got out of order!');
+end
+
+% load the actual detectors.
+ctrs=dsload(['ds.round.detectors{' num2str(dsidx) '}'],'clear');
+newctrs=zeros(size(ctrs));
+resfeat={};
+resdets={};
+
+ds.round.newfeat={};
+nsv=[];
+for(i=1:numel(mydetrs))
+ a=tic;
+ mymemory;
+ weights=allovlweight{i};
+
+ disp(['optimizing:' num2str(mydetrs(i))]);
+ disp(['total features:' num2str(size(feats{i},1))]);
+
+ % Pull out the detector and optimize it. See doGradientDescentproj.
+ ctr=effstridx(ctrs,i);
+ [newctrtmp,scores]=ds.conf.params.graddescfun(feats{i}',imgs.label(dets{i}(:,7))==ds.classperbatch(dsidx),[ctr.w ctr.b]',weights,dsload('ds.round.roundid'));
+ newctr{i,1}=ctr;
+ newctrtmp=newctrtmp(:)';
+ newctr{i}.w=newctrtmp(1:end-1);
+ newctr{i}.b=newctrtmp(end);
+
+ dets{i}(:,5)=scores(:);
+
+ % discard any detections that have low scores. We keep any detections
+ % with score higher than -.02/round_id, and keep at least as many detections
+ % as the number of dimensions divided by 5. Any less than this and the detections
+ % on the next round could cause the element to overfit to a tiny number of patches
+ % on the next round, and the round after that it will fire all over the place.
+ thr=sort(scores,'descend');
+ thr=min(-.02/dsload('ds.round.ndetrounds'),thr(min(ceil(size(ctr.w,2)/5),numel(thr))));
+ scores(1)=Inf;%make sure we keep the first one, since the rest of the code assumes it's there.
+ feats{i}=feats{i}((scores>=thr)',:);
+ dets{i}=dets{i}(scores>=thr,:);
+ allovlweight{i}=allovlweight{i}(scores>=thr);
+ nsv(i,1)=sum(scores>=thr);
+ toc(a)
+end
+
+% convert the set of detections and features into giant matrices to save.
+dets=cell2mat(dets(:));
+feats=cell2mat(feats(:));
+ds.nextround.prevdets{dsidx}=dets;
+ds.nextround.nsv{dsidx}=nsv;
+% again, if we have local storage, save it locally. Otherwise, save it to dswork.
+if(dsfield(ds,'sys','distproc','localdir'))
+ prevfeats=feats;
+ save([ds.sys.distproc.localdir 'prevfeats' num2str(dsidx) '_' num2str(ds.round.roundid) '.mat'],'prevfeats');
+else
+ ds.nextround.prevfeats{dsidx}=resfeat;
+end
+ds.nextround.detectors{dsidx}=effstrcell2mat(newctr);
+
+dssave();
+ds.nextround=struct();
+ds.round=struct();
+ds.newdets={};
diff --git a/bestInImbb.m b/bestInImbb.m
new file mode 100755
index 0000000..1e1fe22
--- /dev/null
+++ b/bestInImbb.m
@@ -0,0 +1,145 @@
+% The core of the detection code. Don't call this; call detectInIm instead.
+% Note that this supports bounding boxes, but they're not used in the
+% indoor67 code.
+function [posall,distall,clustidall,featsall,flipall,boxidall]=bestInIm(centers,imid,conf)
+ global ds;
+ if(~exist('conf','var'))
+ conf=struct();
+ end
+ conf=overrideConf(ds.conf.params,conf);
+ if(~dsfield(conf,'thresh'))
+ conf.thresh=-Inf;
+ end
+ imfull=im2double(getimg(imid));
+ noprocess=0;
+ boxidall=[];
+ flipall=[];
+ if(dsfield(conf,'detsforclass'))% the flag indicating that we're using Pascal bounding boxes.
+ annot=getannot(imid);
+ bbs=[annot.x1 annot.y1 annot.x2 annot.y2];
+ classes=[annot.label];
+ occl=annot.occluded;
+ difficult=annot.difficult;
+ boxid=annot.boxid;
+ flip=zeros(size(bbs,1),1);
+ bbminsize=[bbs(:,4)-bbs(:,2)+1,bbs(:,3)-bbs(:,1)+1];
+ if(dsbool(conf,'allowoccluded'))
+ occl(:)=false;
+ end
+ valid=(~occl & ismember(classes,conf.detsforclass) & ~difficult & all(bsxfun(@ge,bbminsize,ds.conf.params.patchCanonicalSize),2));
+ bbs(~valid,:)=[];
+ boxid(~valid)=[];
+ flip(~valid)=[];
+ else % in this case, we simply specify one bounding box containing the full image.
+ bbs=[1,1,size(imfull,2),size(imfull,1)];
+ bbminsize=[bbs(:,4)-bbs(:,2)+1,bbs(:,3)-bbs(:,1)+1];
+ if(~all(bbminsize>=ds.conf.params.patchCanonicalSize))
+ bbs=[];
+ end
+ boxid=0;
+ flip=0;
+ end
+ if(dsbool(conf,'flipall')) %add a flipped bounding box.
+ bbs=[bbs;bbs];
+ boxid=[boxid;boxid];
+ flip=[flip;ones(size(flip))];
+ end
+ if(isempty(bbs))
+ posall=[];
+ distall=[];
+ clustidall=[];
+ featsall=[];
+ boxid=[];
+ return
+ end
+ for(bbidx=1:size(bbs,1))
+ im=imfull(bbs(bbidx,2):bbs(bbidx,4),bbs(bbidx,1):bbs(bbidx,3),:);
+ if(flip(bbidx)),im=im(:,end:-1:1,:);end
+ pyramid = constructFeaturePyramid(im, ds.conf.params); % HOG feature pyramid
+ pcs=round(ds.conf.params.patchCanonicalSize/ds.conf.params.sBins)-2;
+ pcs(3)=size(pyramid.features{1},3);
+ pcs(4)=0;
+ conf.imid=imid;
+ % unentangling the fieature pyramid gives us 'features', where each row
+ % is the feature vector for a single patch. levels and indexes specify
+ % where those patches were in the pyramid, and gradsums tells us the strength
+ % of the gradient in each patch so we can get rid of empty ones that are likely
+ % to make our detectors misfire thanks to HOG's normalization.
+ [features, levels, indexes,gradsums] = unentanglePyramid(pyramid, ...
+ pcs,conf);
+
+
+ invalid=(gradsums<9);
+ features(invalid,:)=[];
+ levels(invalid)=[];
+ indexes(invalid,:)=[];
+ gradsums(invalid)=[];
+
+ if(dsbool(conf,'multperim'))
+ % findmatches finds all detections above a certain threshold
+ [assignedidx, dist, clustid]=findmatches(centers,features,conf.thresh,conf);
+ else
+ % assigntoclosest gives us the top detection for each detector.
+ [assignedidx, dist]=assigntoclosest(centers,features,1);
+ if(isempty(dist))
+ clustid=[];
+ else
+ clustid=(1:size(centers,1))';
+ valid=dist>conf.thresh;
+ assignedidx=assignedidx(valid);
+ dist=dist(valid);
+ clustid=clustid(valid);
+ end
+ end
+ patsz=ds.conf.params.patchCanonicalSize;%allsz(resinds(k),:);
+ fsz=(patsz-2*ds.conf.params.sBins)/ds.conf.params.sBins;
+ imgs=getimgs();
+ % convert the pyramid indexes into bounding boxes with pixel coordinates.
+ pos=pyridx2pos(indexes(assignedidx,:),reshape(levels(assignedidx),[],1),fsz,pyramid);
+ % if we allow more than one per image, we need to do non-maximum suppresion.
+ if(dsbool(conf,'multperim'))
+ pos=[pos.x1 pos.y1 pos.x2 pos.y2];
+ [pos,assignedidx,dist,clustidl,clustid]=distributeby(pos,assignedidx,dist,clustid,clustid);
+ for(i=1:numel(pos))
+ [posinds]=myNms([pos{i} dist{i}],ds.conf.params.nmsOverlapThreshold);
+ assignedidx{i}=assignedidx{i}(posinds);
+ dist{i}=dist{i}(posinds);
+ pos{i}=pos{i}(posinds,:);
+ clustidl{i}=clustidl{i}(posinds);
+ end
+ assignedidx=cell2mat(assignedidx);
+ dist=cell2mat(dist);
+ p=cell2mat(pos);
+ if(isempty(p))
+ p=zeros(0,4);
+ end
+ clear pos;
+ pos.x1=p(:,1);pos.x2=p(:,3);pos.y1=p(:,2);pos.y2=p(:,4);
+ clustid=cell2mat(clustidl);
+ end
+ feats=features(assignedidx,:);
+ pos.x1=pos.x1+bbs(bbidx,1)-1;
+ pos.x2=pos.x2+bbs(bbidx,1)-1;
+ pos.y1=pos.y1+bbs(bbidx,2)-1;
+ pos.y2=pos.y2+bbs(bbidx,2)-1;
+ if(flip(bbidx))
+ medval=(bbs(bbidx,3)+bbs(bbidx,1))/2;
+ tmp=medval+(medval-pos.x2);
+ pos.x2=medval+(medval-pos.x1);
+ pos.x1=tmp;
+ end
+
+ posall{bbidx,1}=effstr2str(pos);
+ featsall{bbidx,1}=feats;
+ distall{bbidx,1}=dist;
+ clustidall{bbidx,1}=clustid;
+ boxidall{bbidx,1}=repmat(boxid(bbidx),size(dist,1),1);
+ flipall{bbidx,1}=repmat(flip(bbidx),size(dist,1),1);
+ end
+ posall=str2effstr(cell2mat(posall));
+ featsall=cell2mat(featsall);
+ distall=cell2mat(distall);
+ clustidall=cell2mat(clustidall);
+ boxidall=cell2mat(boxidall);
+ flipall=cell2mat(flipall);
+end
diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo.sln b/clipper/C#/ConsoleDemo/ConsoleDemo.sln
new file mode 100755
index 0000000..0ee75df
--- /dev/null
+++ b/clipper/C#/ConsoleDemo/ConsoleDemo.sln
@@ -0,0 +1,45 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C# Express 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleDemo", "ConsoleDemo\ConsoleDemo.csproj", "{185E6664-6A68-4377-99BE-4D4BFED19298}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66} = {9B062971-A88E-4A3D-B3C9-12B78D15FA66}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clipper_library", "..\clipper_library\clipper_library.csproj", "{9B062971-A88E-4A3D-B3C9-12B78D15FA66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|x86.ActiveCfg = Debug|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Debug|x86.Build.0 = Debug|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Any CPU.ActiveCfg = Release|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|Mixed Platforms.Build.0 = Release|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|x86.ActiveCfg = Release|x86
+ {185E6664-6A68-4377-99BE-4D4BFED19298}.Release|x86.Build.0 = Release|x86
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.ActiveCfg = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj b/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj
new file mode 100755
index 0000000..ab09c30
--- /dev/null
+++ b/clipper/C#/ConsoleDemo/ConsoleDemo/ConsoleDemo.csproj
@@ -0,0 +1,103 @@
+
+>;
+
+ class Program
+ {
+
+ //a very simple class that builds an SVG file with any number of
+ //polygons of the specified formats ...
+ class SVGBuilder
+ {
+
+ public class StyleInfo
+ {
+ public PolyFillType pft;
+ public Color brushClr;
+ public Color penClr;
+ public double penWidth;
+ public int[] dashArray;
+ public Boolean showCoords;
+ public StyleInfo Clone()
+ {
+ StyleInfo si = new StyleInfo();
+ si.pft = this.pft;
+ si.brushClr = this.brushClr;
+ si.dashArray = this.dashArray;
+ si.penClr = this.penClr;
+ si.penWidth = this.penWidth;
+ si.showCoords = this.showCoords;
+ return si;
+ }
+ public StyleInfo()
+ {
+ pft = PolyFillType.pftNonZero;
+ brushClr = Color.AntiqueWhite;
+ dashArray = null;
+ penClr = Color.Black;
+ penWidth = 0.8;
+ showCoords = false;
+ }
+ }
+
+ public class PolyInfo
+ {
+ public Polygons polygons;
+ public StyleInfo si;
+ }
+
+ public StyleInfo style;
+ private List
>;
+
+ public partial class Form1 : Form
+ {
+
+ Assembly _assembly;
+ Stream polyStream;
+
+ private Bitmap mybitmap;
+ private Polygons subjects;
+ private Polygons clips;
+ private Polygons solution;
+
+ //Here we are scaling all coordinates up by 100 when they're passed to Clipper
+ //via Polygon (or Polygons) objects because Clipper no longer accepts floating
+ //point values. Likewise when Clipper returns a solution in a Polygons object,
+ //we need to scale down these returned values by the same amount before displaying.
+ private int scale = 100; //or 1 or 10 or 10000 etc for lesser or greater precision.
+
+ //---------------------------------------------------------------------
+ //---------------------------------------------------------------------
+
+ //a very simple class that builds an SVG file with any number of
+ //polygons of the specified formats ...
+ class SVGBuilder
+ {
+
+ public class StyleInfo
+ {
+ public PolyFillType pft;
+ public Color brushClr;
+ public Color penClr;
+ public double penWidth;
+ public int[] dashArray;
+ public Boolean showCoords;
+ public StyleInfo Clone()
+ {
+ StyleInfo si = new StyleInfo();
+ si.pft = this.pft;
+ si.brushClr = this.brushClr;
+ si.dashArray = this.dashArray;
+ si.penClr = this.penClr;
+ si.penWidth = this.penWidth;
+ si.showCoords = this.showCoords;
+ return si;
+ }
+ public StyleInfo()
+ {
+ pft = PolyFillType.pftNonZero;
+ brushClr = Color.AntiqueWhite;
+ dashArray = null;
+ penClr = Color.Black;
+ penWidth = 0.8;
+ showCoords = false;
+ }
+ }
+
+ public class PolyInfo
+ {
+ public Polygons polygons;
+ public StyleInfo si;
+ }
+
+ public StyleInfo style;
+ private List
>;
+
+
+ //------------------------------------------------------------------------------
+ // PolyTree & PolyNode classes
+ //------------------------------------------------------------------------------
+
+ public class PolyTree : PolyNode
+ {
+ internal List
> m_edges = new List
>();
+ internal bool m_UseFullRange;
+
+ //------------------------------------------------------------------------------
+
+ protected static bool PointsEqual(IntPoint pt1, IntPoint pt2)
+ {
+ return ( pt1.X == pt2.X && pt1.Y == pt2.Y );
+ }
+ //------------------------------------------------------------------------------
+
+ internal bool PointIsVertex(IntPoint pt, OutPt pp)
+ {
+ OutPt pp2 = pp;
+ do
+ {
+ if (PointsEqual(pp2.pt, pt)) return true;
+ pp2 = pp2.next;
+ }
+ while (pp2 != pp);
+ return false;
+ }
+ //------------------------------------------------------------------------------
+
+ internal bool PointInPolygon(IntPoint pt, OutPt pp, bool UseFulllongRange)
+ {
+ OutPt pp2 = pp;
+ bool result = false;
+ if (UseFulllongRange)
+ {
+ do
+ {
+ if ((((pp2.pt.Y <= pt.Y) && (pt.Y < pp2.prev.pt.Y)) ||
+ ((pp2.prev.pt.Y <= pt.Y) && (pt.Y < pp2.pt.Y))) &&
+ new Int128(pt.X - pp2.pt.X) <
+ Int128.Int128Mul(pp2.prev.pt.X - pp2.pt.X, pt.Y - pp2.pt.Y) /
+ new Int128(pp2.prev.pt.Y - pp2.pt.Y))
+ result = !result;
+ pp2 = pp2.next;
+ }
+ while (pp2 != pp);
+ }
+ else
+ {
+ do
+ {
+ if ((((pp2.pt.Y <= pt.Y) && (pt.Y < pp2.prev.pt.Y)) ||
+ ((pp2.prev.pt.Y <= pt.Y) && (pt.Y < pp2.pt.Y))) &&
+ (pt.X - pp2.pt.X < (pp2.prev.pt.X - pp2.pt.X) * (pt.Y - pp2.pt.Y) /
+ (pp2.prev.pt.Y - pp2.pt.Y))) result = !result;
+ pp2 = pp2.next;
+ }
+ while (pp2 != pp);
+ }
+ return result;
+ }
+ //------------------------------------------------------------------------------
+
+ internal bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange)
+ {
+ if (UseFullRange)
+ return Int128.Int128Mul(e1.deltaY, e2.deltaX) ==
+ Int128.Int128Mul(e1.deltaX, e2.deltaY);
+ else return (Int64)(e1.deltaY) * (e2.deltaX) ==
+ (Int64)(e1.deltaX) * (e2.deltaY);
+ }
+ //------------------------------------------------------------------------------
+
+ protected bool SlopesEqual(IntPoint pt1, IntPoint pt2,
+ IntPoint pt3, bool UseFullRange)
+ {
+ if (UseFullRange)
+ return Int128.Int128Mul(pt1.Y - pt2.Y, pt2.X - pt3.X) ==
+ Int128.Int128Mul(pt1.X - pt2.X, pt2.Y - pt3.Y);
+ else return
+ (Int64)(pt1.Y - pt2.Y) * (pt2.X - pt3.X) - (Int64)(pt1.X - pt2.X) * (pt2.Y - pt3.Y) == 0;
+ }
+ //------------------------------------------------------------------------------
+
+ protected bool SlopesEqual(IntPoint pt1, IntPoint pt2,
+ IntPoint pt3, IntPoint pt4, bool UseFullRange)
+ {
+ if (UseFullRange)
+ return Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) ==
+ Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y);
+ else return
+ (Int64)(pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (Int64)(pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0;
+ }
+ //------------------------------------------------------------------------------
+
+ internal ClipperBase() //constructor (nb: no external instantiation)
+ {
+ m_MinimaList = null;
+ m_CurrentLM = null;
+ m_UseFullRange = false;
+ }
+ //------------------------------------------------------------------------------
+
+ //destructor - commented out since I gather this impedes the GC
+ //~ClipperBase()
+ //{
+ // Clear();
+ //}
+ //------------------------------------------------------------------------------
+
+ public virtual void Clear()
+ {
+ DisposeLocalMinimaList();
+ for (int i = 0; i < m_edges.Count; ++i)
+ {
+ for (int j = 0; j < m_edges[i].Count; ++j) m_edges[i][j] = null;
+ m_edges[i].Clear();
+ }
+ m_edges.Clear();
+ m_UseFullRange = false;
+ }
+ //------------------------------------------------------------------------------
+
+ private void DisposeLocalMinimaList()
+ {
+ while( m_MinimaList != null )
+ {
+ LocalMinima tmpLm = m_MinimaList.next;
+ m_MinimaList = null;
+ m_MinimaList = tmpLm;
+ }
+ m_CurrentLM = null;
+ }
+ //------------------------------------------------------------------------------
+
+ public bool AddPolygons(Polygons ppg, PolyType polyType)
+ {
+ bool result = false;
+ for (int i = 0; i < ppg.Count; ++i)
+ if (AddPolygon(ppg[i], polyType)) result = true;
+ return result;
+ }
+ //------------------------------------------------------------------------------
+
+ public bool AddPolygon(Polygon pg, PolyType polyType)
+ {
+ int len = pg.Count;
+ if (len < 3) return false;
+ Polygon p = new Polygon(len);
+ p.Add(new IntPoint(pg[0].X, pg[0].Y));
+ int j = 0;
+ for (int i = 1; i < len; ++i)
+ {
+
+ Int64 maxVal;
+ if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange;
+ if (Math.Abs(pg[i].X) > maxVal || Math.Abs(pg[i].Y) > maxVal)
+ {
+ if (Math.Abs(pg[i].X) > hiRange || Math.Abs(pg[i].Y) > hiRange)
+ throw new ClipperException("Coordinate exceeds range bounds");
+ maxVal = hiRange;
+ m_UseFullRange = true;
+ }
+
+ if (PointsEqual(p[j], pg[i])) continue;
+ else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange))
+ {
+ if (PointsEqual(p[j-1], pg[i])) j--;
+ } else j++;
+ if (j < p.Count)
+ p[j] = pg[i]; else
+ p.Add(new IntPoint(pg[i].X, pg[i].Y));
+ }
+ if (j < 2) return false;
+
+ len = j+1;
+ while (len > 2)
+ {
+ //nb: test for point equality before testing slopes ...
+ if (PointsEqual(p[j], p[0])) j--;
+ else if (PointsEqual(p[0], p[1]) || SlopesEqual(p[j], p[0], p[1], m_UseFullRange))
+ p[0] = p[j--];
+ else if (SlopesEqual(p[j - 1], p[j], p[0], m_UseFullRange)) j--;
+ else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange))
+ {
+ for (int i = 2; i <= j; ++i) p[i - 1] = p[i];
+ j--;
+ }
+ else break;
+ len--;
+ }
+ if (len < 3) return false;
+
+ //create a new edge array ...
+ List
In Clipper Ver 5.1, the ExPolygons structure was replaced with the PolyTree class.
The PolyTreeToExPolygons() function below and its accompanying code may be useful if for some reason you are stuck with using ExPolygons.
+
Delphi ... + | + +
---|
+
+ + + type + TExPolygon = record + Outer: TPolygon; + Holes: TPolygons; + end; + TExPolygons = array of TExPolygon; + + procedure AddOuterPolyNodeToExPolygons(PolyNode: TPolyNode; + var ExPolygons: TExPolygons); + var + I, J, Cnt: Integer; + begin + Cnt := Length(ExPolygons); + SetLength(ExPolygons, Cnt + 1); + ExPolygons[Cnt].Outer := PolyNode.Contour; + SetLength(ExPolygons[Cnt].Holes, PolyNode.ChildCount); + for I := 0 to PolyNode.ChildCount - 1 do + begin + ExPolygons[Cnt].Holes[I] := PolyNode.Childs[I].Contour; + //Add outer polygons contained by (nested within) holes ... + for J := 0 to PolyNode.Childs[I].ChildCount - 1 do + AddOuterPolyNodeToExPolygons(PolyNode.Childs[I].Childs[J], ExPolygons); + end; + end; + + function PolyTreeToExPolygons(PolyTree: TPolyTree): TExPolygons; + var + I: Integer; + begin + Result := nil; + for I := 0 to PolyTree.ChildCount - 1 do + AddOuterPolyNodeToExPolygons(PolyTree.Childs[I], Result); + end; ++ + |
+
C++ ... + | + +
---|
+
+ + + struct ExPolygon { + Polygon outer; + Polygons holes; + }; + + typedef std::vector< ExPolygon > ExPolygons; + + void AddOuterPolyNodeToExPolygons(PolyNode& polynode, ExPolygons& expolygons) + { + size_t cnt = expolygons.size(); + expolygons.resize(cnt + 1); + expolygons[cnt].outer = polynode.Contour; + expolygons[cnt].holes.resize(polynode.ChildCount()); + for (int i = 0; i < polynode.ChildCount(); ++i) + { + expolygons[cnt].holes[i] = polynode.Childs[i]->Contour; + //Add outer polygons contained by (nested within) holes ... + for (int j = 0; j < polynode.Childs[i]->ChildCount(); ++j) + AddOuterPolyNodeToExPolygons(*polynode.Childs[i]->Childs[j], expolygons); + } + } + + void PolyTreeToExPolygons(PolyTree& polytree, ExPolygons& expolygons) + { + expolygons.clear(); + for (int i = 0; i < polytree.ChildCount(); ++i) + AddOuterPolyNodeToExPolygons(*polytree.Childs[i], expolygons); + } ++ + |
+
C# ... + | + +
---|
+
+ + + using ExPolygons = List<ExPolygon>; + using Polygon = List<IntPoint>; + using Polygons = List<List<IntPoint>>; + + public struct ExPolygon { + public Polygon outer; + public Polygons holes; + } + + void AddOuterPolyNodeToExPolygons(PolyNode polynode, ref ExPolygons expolygons) + { + ExPolygon ep = new ExPolygon(); + ep.outer = new Polygon(polynode.Contour); + ep.holes = new Polygons(polynode.ChildCount); + foreach (PolyNode node in polynode.Childs) + { + ep.holes.Add(node.Contour); + //Add outer polygons contained by (nested within) holes ... + foreach (PolyNode n in node.Childs) + AddOuterPolyNodeToExPolygons(n, ref expolygons); + } + expolygons.Add(ep); + } + + void PolyTreeToExPolygons(PolyTree polytree, ref ExPolygons expolygons) + { + expolygons.Clear(); + foreach (PolyNode node in polytree.Childs) + AddOuterPolyNodeToExPolygons(node, ref expolygons); + } ++ + |
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +Overview + | ++ | +
Delphi Code Sample: + | + +
---|
+
+ + uses + graphics32, clipper; + + ... + + var + sub, clp, sol: TPolygons; + begin + + //set up the subject and clip polygons ... + setlength(sub, 3); + sub[0] := GetEllipsePoints(IntRect(100,100,300,300)); + sub[1] := GetEllipsePoints(IntRect(125,130,275,180)); + sub[2] := GetEllipsePoints(IntRect(125,220,275,270)); + + setlength(clp, 1); + clp[0] := GetEllipsePoints(IntRect(140,70,220,320)); + + //display the subject and clip polygons ... + DrawPolygons(img.Bitmap, sub, 0x8033FFFF); + DrawPolygons(img.Bitmap, clp, 0x80FFFF33); + + //get the intersection of the subject and clip polygons ... + with TClipper.Create do + try + AddPolygons(sub, ptSubject); + AddPolygons(clp, ptClip); + Execute(ctIntersection, sol, pftEvenOdd, pftEvenOdd); + finally + free; + end; + + //finally draw the intersection polygons ... + DrawPolygons(img.Bitmap, sol, 0x40808080); ++ + |
+
C++ Code Sample: + | + +
---|
+
+ + #include "clipper.hpp" + + ... + + //from clipper.hpp ... + //typedef long long long64; + //struct IntPoint {long64 X; long64 Y;}; + //typedef std::vector<IntPoint> Polygon; + //typedef std::vector<Polygon> Polygons; + + using namespace ClipperLib; + + + //set up the subject and clip polygons ... + Polygons sub(3); + sub[0] = GetEllipsePoints(IntRect(100,100,300,300)); + sub[1] = GetEllipsePoints(IntRect(125,130,275,180)); + sub[2] = GetEllipsePoints(IntRect(125,220,275,270)); + + Polygons clp(1); + clp[0] = GetEllipsePoints(IntRect(140,70,220,320)); + + //display the subject and clip polygons ... + DrawPolygons(img->Bitmap, sub, 0x8033FFFF); + DrawPolygons(img->Bitmap, clp, 0x80FFFF33); + + //get the intersection of the subject and clip polygons ... + Clipper clpr; + clpr.AddPolygons(sub, ptSubject); + clpr.AddPolygons(clp, ptClip); + Polygons sol; + clpr.Execute(ctIntersection, sol, pftEvenOdd, pftEvenOdd); + + //finally draw the intersection polygons ... + DrawPolygons(img->Bitmap, sol, 0x40808080); ++ + |
+
C# Code Sample: + | + +
---|
+
+ + ... + using ClipperLib; + + ... + using Polygon = List<IntPoint>; + using Polygons = List<List<IntPoint>>; + + ... + + Polygons subjs = new Polygons(3); + Polygons clips = new Polygons(1); + Polygons solution = new Polygons(); + + subjs.Add(GetEllipsePoints(new IntRect(100,100,300,300))); + subjs.Add(GetEllipsePoints(new IntRect(125,130,275,180))); + subjs.Add(GetEllipsePoints(new IntRect(125,220,275,270))); + + clips.Add(GetEllipsePoints(new IntRect(140,70,220,320))); + + DrawPolygons(subjs, 0x8033FFFF); + DrawPolygons(clips, 0x80FFFF33); + + Clipper c = new Clipper(); + c.AddPolygons(subjs, PolyType.ptSubject); + c.AddPolygons(clips, PolyType.ptClip); + c.Execute(ClipType.ctIntersection, solution); + + DrawPolygons(solution, 0x40808080); ++ + |
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +Overview + | ++ | +
Why does Clipper use integer coordinates, not floats?
+ +Initially Clipper did use floating point coordinates but the clipping algorithm wasn't numerically robust. Consequently, very occasionally errors occurred which prevented Clipper from returning a solution. These issues have completely resolved since swapping to integer coordinates.
How do I use floating point coordinates with Clipper?
+ +It's a simple task to multiply your floating point coordinates by a scaling factor (that's typically a power of 10 depending on the desired precision). Then with the solution polygons, divide the returned coordinates by this same scaling factor. Clipper accepts integer coordinates as large as +/-4.6 e18, so it can accommodate very large scaling factors.
Does Clipper handle polygons with holes?
+ +Polygon 'holes' are implied simply by having their orientations opposite that of their container polygons.
Why are there separate fill rules for Subject and Clip polygons?
+ + Because users may want to use different fill rules for these polygons. However it's important to note that these fill rules apply solely within subject and clip polygons to define their respective regions. These rules aren't applied to the clip operation itself where subject and clip polygons are merged into a single solution. If you wish for a fill rule to apply to the merging of subject and clip polygons as well - typically during a UNION operation, then you should UNION all the polygons as subjects without assigning any clip polygons.
Which fill rule does the boolean clipping operation use?
+ + Perhaps the easiest way to explain what happens during clipping is to consider the following. First the subject and clip polygons are filled using their respective fill rules. With the subject polygons, assign a winding count (WC) of +1 to any filled region and a WC of 0 to any unfilled region. Do likewise with the clip polygons. Then the following winding rules apply to the clipping operation ...
♦ Intersection: add subject and clip regions and return those regions where WC == +2
♦ Union: add subject and clip regions and return those regions where WC > 0
♦ Difference: subtract clip from subject regions and return those regions where WC == +1
♦ XOR: subtract clip from subject regions and return those regions where WC != 0
Some solution polygons share a common edge. Is this a bug?
+ + No. However Clipper tries very hard to minimize this by merging polygons that share a common edge.
I have lots of polygons that I want to 'union'. Can I do this in one operation?
+ + Yes. Just add all the polygons as subject polygons to the Clipper object and don't assign any clip polygons.
The OffsetPolygons function is returning tiny artefacts? Could this be a bug?
+ + The precision of the input coordinates may be a problem. The Clipper Library only operates on integer coordinates so if you need better precision than integers, scale the coordinates (eg by a factor of 10) before passing them to the OffsetPolygons function. Then it's a simple matter to reverse the scaling on the output polygons.
The OffsetPolygons function is returning unexpected results? Could this be a bug?
+ + Most likely the orientation of the input polygons is wrong.
Is there an easy way to reverse polygon orientations?
+ + Yes, see ReversePolygons.
Is it possible to get the offset of a line or a polyline?
+ + Yes, just convert the polyline into a 'flat' polygon. Do this by appending to the polyline a reverse copy of the polyline while avoiding duplicate coordinates at each end: c1,c2,...,cn, c(n-1),...,c2. (You don't need to append anything if there are just two vertices forming a single line.)
+
+
+ +var + pts: TPolygon; + ppts: TPolygons; +begin + //define the polyline ... + setlength(pts, 5); + pts[0] := IntPoint(10,10); + pts[1] := IntPoint(100,100); + pts[2] := IntPoint(150,100); + pts[3] := IntPoint(100,10); + pts[4] := IntPoint(10,100); + + //convert the line to a 'flat' polygon ... + len := length(pts); + setLength(pts, len*2 -2); + for i := 1 to len -2 do pts[len-1 +i] := pts[len-1 -i]; + + //do the offsetting ... + setlength(ppts, 1); + ppts[0] := pts; + ppts := OffsetPolygons(ppts, 6, jtSquare, 0); ++ + |
+
My drawings contain lots of ellipses and arcs. How can I perform clipping operations or offsetting on these?
+ + You'll have to convert then to polygons. Many graphics libraries have 'flatten path' routines.
OffsetPolygons, Orientation, ReversePolygons
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +Overview + | ++ | +
The Clipper code library, the "Software" (that includes Delphi, C++ & C# source code, accompanying samples and documentation), has been released under the following license, terms and conditions:
+ + +Boost Software License - Version 1.0 - August 17th, 2003
http://www.boost.org/LICENSE_1_0.txt
Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:
+ + +The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.
+ + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ + + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +Overview + | ++ | +
By requiring integer coordinates for all polygon vertices, the Clipper Library has been able to avoid problems of numerical robustness that otherwise plague geometric computations. Nevertheless, rounding coordinates to integers causes other problems, and these are discussed below.
+
It is important to stress at the outset that rounding causes some unavoidable imprecision by moving vertices fractions of a unit away from their 'true' positions. Fortunately rounding imprecision can be managed effectively by appropriate scaling.
Nevertheless inappropriate scaling can deliver undesirable and perhaps unexpected solutons as demonstrated by the first example on the right. The image shows two polygons (triangles) being merged with a 'union' operation. The region shaded green represents the 'merged' polygon returned by Clipper. It's evident that the bottom-left polygon from the input is missing from the result.
This is perhaps best explained by a very simple overview of how the clipping algorithm is implemented. Imaginary horizontal lines (called scanlines) pass through each and every vertex in the supplied set of polygons (ie both subject and clip polygons). The regions between adjacent scanlines are called scanbeams. Scanbeams are processed in order, starting with the bottom-most scanbeam and proceeding to the top-most. For each scanbeam there is a set of 'active' edges, that is those edges that pass through that scanbeam. The relative positions of active edges at both the bottom and top of a given scanbeam are used to determine the locations of intersections within a scanbeam. To preserve numerical robustness it's necessary to use the rounded coordinates of each edge at each scanline. This rounding effectively causes edges to deviate fractions of a unit horizontally where they cross each scanline.
In the image on the right the edge (2,5) -> (1,3) deviates from its true position at (1.5,4) to (2,4) at scanline Y=4. This edge deviation reduces the bottom-left polygon's area to zero and as a consequence it is discarded.
If the polygon coordinates of these 2 triangles had been scaled up by even just a factor of 2, ie {(2,6), (4,8), (4,10)} and {(2,6), (6,6), (4,8)}, the union operation would have returned a polygon that correctly covers both triangles.
Greater precision can always be achieved by scaling (or increased scaling) of polygon coordinates. The Clipper library accepts integer coordinate values up to ±0x3FFFFFFFFFFFFFFF (± 4.6e+18) in order to accommodate very high degrees of precision.
A 30X 'close up' of the lower points of intersection of these same 2 polygons shows the presence of a tiny self-intersecting artefact. The three 'black dots' highlight the actual points of intersection (with their fractional coordinates displayed). The smaller 'red dots' show where these points of intersection are located once rounding is applied. With a little care you can see that rounding reverses the orientation of these vertices and causes a tiny self-intersecting artefact.
In this final example, the single polygon on the left also has a tiny self-intersection. However, due to the way Clipper uses rounding (as very briefly outlined above), the vertex (88,50) is seen to simply 'touch' rather than cross over (by a fraction of a unit) the right edge of the polygon. Consequently a union operation by Clipper on this polygon will return this same polygon unchanged (ie without removing the tiny self-intersection).
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | ++ | +
The Clipper Library is based on but significantly extends Bala Vatti's polygon clipping algorithm as described in "A generic solution to polygon clipping", Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.
The library can perform each of the four boolean clipping operations - intersection, union, difference and exclusive-or (xor). It can accept any number of, and any type of polygon as input (including polygons with holes and self-intersecting polygons).
+ Clipper's ZIP package contains the core library, a Windows CHM help file, HTML help, and a number of compiled examples. The library's code was initially written in Delphi Pascal (compiling in Delphi ver. 7+) but now contains C++ and C# translations too. The core library's source code in each language is a little over 3500 lines (including extensive comments), with a file size of about 100KB. The examples show how Clipper can be used with the different languages using a number of graphics libraries including - AGG, Cairo, OpenGL, Graphics32 and GDI+.
Several features set Clipper apart from other polygon clipping libraries:
+ + + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» constructor Create; override;
+ +C++ » Clipper();
+ +C# » Clipper();
+ + + + + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.»
function Execute(clipType: TClipType;
out solution: TPolygons;
subjFillType: TPolyFillType = pftEvenOdd;
clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;
function Execute(clipType: TClipType;
out solution: TPolyTree;
subjFillType: TPolyFillType = pftEvenOdd;
clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;
C++ »
bool Execute(ClipType clipType,
Polygons &solution,
PolyFillType subjFillType = pftEvenOdd,
PolyFillType clipFillType = pftEvenOdd);
bool Execute(ClipType clipType,
PolyTree &solution,
PolyFillType subjFillType = pftEvenOdd,
PolyFillType clipFillType = pftEvenOdd);
C# »
public bool Execute(ClipType clipType,
Polygons solution,
PolyFillType subjFillType,
PolyFillType clipFillType);
public bool Execute(ClipType clipType,
PolyTree solution,
PolyFillType subjFillType,
PolyFillType clipFillType);
The Execute() method performs the specified clipping task (intersection, union, difference or xor) on the previously assigned subject and clip polygons. This method can be called multiple times without reassigning subject and clip polygons (ie when different clipping operations are required on the same polygon sets). The polygon fill methods can be Even-Odd, Non-Zero, Positive and Negative (default: Even-Odd). Also, subject and clip polygons don't have to use the same fill type.
This method is overloaded since the solution parameter can be either a Polygons or PolyTree structure. When the solution parameter is a Polygons structure, the solution will contain a collection of polygons containing both outer and inner polygon contours (where inner contours have an orientation opposite outer contours). On the other hand, the PolyTree structure explicitly associates inner 'hole' polygons with their container 'outer' polygons.
The order that polygons are listed in the solution structure is undefined. The solution will never contain overlapping polygons, nor will it contain polygons with self-intersecting edges. Also, the filling mode for solution polygons is undefined since it can be either EvenOdd or NonZero. (This is because the winding depth of solution polygons will always be in the range of -1 to 1.)
Solution orientation: The Orientation of polygons returned in the 'solution' parameter will always be 'true' for outer polygons and 'false' for inner 'hole' polygons (unless the ReverseSolution property has been enabled).
It's important to note that the fill rules apply solely within subject and clip polygons to define their respective regions. These rules aren't applied when merging these polygons into a single solution during the clip operation. If you wish for a fill rule to apply to the merging of subject and clip polygons as well - typically during a UNION operation, then you should UNION all the polygons as subjects without assigning clip polygons.
Example, ReverseSolution, PolyTree, Orientation, ClipType, PolyFillType, Polygons
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» property ReverseSolution: boolean; override;
+ +C++ » void ReverseSolution(bool value);
+ +C# » public bool ReverseSolution { get {} set {} };
+ + +When this property is set to true, polygons returned in the solution parameter of the Execute() method will have orientations opposite to their normal orientations.
+ + + + + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
|
+ + The Clipper class encapsulates boolean clipping operations (intersection, union, difference and XOR) on polygons.
Input polygons are passed to a Clipper object by the AddPolygon and AddPolygons methods, and the clipping operation is performed by the Execute method. Multiple boolean operations can be performed on the same input polygon set by repeat calls to Execute. However, if a differenct set of input polygons requires 'clipping', then the Clear method must be called to remove any existing polygons before new polygons are added.
Methods + | Properties + | +
---|---|
In Clipper: + | +|
Constructor + | +ReverseSolution + | +
Execute + | ++ | +
In ClipperBase: + | +|
AddPolygon + | ++ | +
AddPolygons + | ++ | +
Clear + | ++ | +
GetBounds + | ++ | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function AddPolygon(const polygon: TPolygon; polyType: TPolyType): boolean;
+ +C++ » bool AddPolygon(const Polygon &pg, PolyType polyType);
+ +C# » public virtual bool AddPolygon(Polygon pg, PolyType polyType);
+ Any number of subject and clip polygons can be added to the clipping task, either individually via the AddPolygon() method, or as groups via the AddPolygons() method, or even using both methods.
Adjacent vertices with identical coordinates will be treated as a single vertex. Whereever 3 adjacent vertices form a single colinear edge, the middle vertex will be ignored.
Polygon Orientation:
Outer polygons can be either clockwise or counter-clockwise as long as any inner 'hole' polygons have the reverse orientation.
Polygon Coordinate range:
Polygon coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the polygon to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math.
The function will return false if: +
Example, AddPolygons, Polygon, PolyType
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function AddPolygons(const polygons: TPolygons; polyType: TPolyType): boolean;
+ +C++ » bool AddPolygons(const Polygons &ppg, PolyType polyType);
+ +C# » public virtual bool AddPolygons(Polygons ppg, PolyType polyType);
+ Any number of subject and clip polygons can be added to the clipping task, either individually via the AddPolygon() method, or as groups via the AddPolygons() method, or even using both methods.
Adjacent vertices with identical coordinates will be treated as a single vertex. Whereever 3 adjacent vertices form a single colinear edge, the middle vertex will be ignored.
Polygon Orientation:
Outer polygons can be either clockwise or counter-clockwise as long as any inner 'hole' polygons have the reverse orientation.
Polygon Coordinate range:
Polygon coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the polygon to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math.
The function will return false if: +
Example, AddPolygon, Polygons, PolyType
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» procedure Clear;
+ +C++ » virtual void Clear();
+ +C# » public void Clear() {};
+ +The Clear method allows the Clipper object to be reused when clipping operations are required on different polygon sets. (If different clipping operations are performed on the same polygon sets, then Clipper's Execute method can be safely repeated without clearing and re-adding polygons.)
+ + + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function GetBounds: TIntRect;
+ +C++ » IntRect GetBounds();
+ +C# » public IntRect GetBounds() {...};
+This method returns the axis-aligned bounding rectangle of all polygons that have been added to the Clipper object.
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
ClipperBase is the ancestor class to Clipper (or TClipper in Delphi). It should not be instantiated directly. This class converts polygon coordinates (passed by the AddPolygon and AddPolygons methods) into edge objects.
+ + +Methods + | +
---|
In ClipperBase: + | +
AddPolygon + | +
AddPolygons + | +
Clear + | +
GetBounds + | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» function GetNext: TPolyNode;
+ +C++ » PolyNode* GetNext();
+ +C# » public PolyNode GetNext();
+ + + The returned Polynode will be the first child if any, otherwise the next sibling, otherwise the next sibling of the Parent etc.
A PolyTree can be traversed very easily by calling GetFirst() followed by GetNext() in a loop until the returned object is a null pointer ...
+
+
+ + PolyTree polytree; + //call to Clipper.Execute method here which fills 'polytree' + + PolyNode* polynode = polytree.GetFirst(); + while (polynode) + { + //do stuff with polynode here + + polynode = polynode->GetNext(); + } + ++ + |
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property ChildCount: Integer; //read only
+ +C++ » ChildCount(); //read only
+ +C# » public int ChildCount; //read only
+ +Returns the number of PolyNode Childs directly owned by the PolyNode object.
+ + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property Childs[index: Integer]: TPolyNode; //read only
+ +C++ » std::vector < PolyNode* > Childs;//public field
+ +C# » public List < PolyNode > Childs; //read only property
+ + + A read-only list of PolyNode.
Outer PolyNode childs contain hole PolyNodes, and hole PolyNode childs contain nested outer PolyNodes.
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property Contour: TPolygon; //read only
+ +C++ » Polygon Contour; //public field
+ +C# » public Polygon Contour; //read only property
+ + + Returns a list of polygon coordinates.
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» IsHole: Boolean; //read only
+ +C++ » bool IsHole; //field
+ +C# » public bool IsHole; //read only property
+ + +Returns true when the PolyNode's polygon (Contour) is a hole.
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» Parent: TPolyNode; //read only
+ +C++ » PolyNode* Parent; //field
+ +C# » public PolyNode Parent; //read only property
+ + + Returns the parent PolyNode.
The PolyTree object (which is also a PolyNode) does not have a parent and will return a null pointer.
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
PolyNodes are encapsulated within a PolyTree container, and together provide a data structure representing the parent-child relationships of polygon contours returned by Clipper's Execute method.
PolyNode objects represent single polygon contours that can be either 'outer' or a 'hole' polygons. PolyNodes may own any number of PolyNode children (Childs), where children of outer polygons are holes, and children of holes are (nested) outer polygons.
Fields + | Methods + | Properties + | +
---|---|---|
In PolyNode: + | +||
+ | +GetNext + | +ChildCount + | +
+ | ++ | +Childs + | +
+ | ++ | +Contour + | +
+ | ++ | +IsHole + | +
+ | ++ | +Parent + | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» procedure Clear;
+ +C++ » void Clear();
+ +C# » public void Clear();
+ This method allows a PolyTree object to be reused in repeat calls to Clipper's Execute method.
Note: This method does not need to be called explicitly between calls to Clipper.Execute() since that method will automatically clear the PolyTree before propogating it with new PolyNodes.
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» function GetFirst: TPolyNode;
+ +C++ » PolyNode* GetFirst();
+ +C# » public PolyNode GetFirst();
+ + + Ths method returns the first outer polygon contour if any, otherwise a null pointer.
This function is almost equivalent to calling Childs[0] except that when a PolyTree object is empty (has no children), calling Childs[0] would raise an out of range exception.
PolyNode.GetNext, PolyNode.ChildCount, PolyNode.Childs
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» property Total: Integer; //read only
+ +C++ » Total(); //read only
+ +C# » public int Total; //read only
+ +Returns the total number of PolyNodes (polygons) contained within the PolyTree. This value is not to be confused with ChildCount which returns the number of immediate children only (Childs) contained by PolyTree.
+ + +PolyNode.ChildCount, PolyNode.Childs
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
|
+ + A PolyTree object can be passed as a parameter to Clipper's Execute method. This class encapsulates a data structure that mirrors the parent-child relationships of the polygons returned by Clipper. (The PolyTree class replaces the obsolete ExPolygons structure that was unable to represent polygons 'nesting' within holes.)
The term 'polygon' is often used by others to refer to a single 'outer' contour together with any number of inner contours or 'holes'. However, in this documentation, polygon is used synonymously with a single polygon contour, irrespective of whether it's an outer or a hole.
The PolyTree object encapsulates any number PolyNode children, where a PolyNode object represents a single polygon (either an outer or hole polygon). PolyTree is a specialized PolyNode that contains all the PolyNodes within the tree. Its Contour property will always be empty. The PolyTree's immediate children represent top-level 'outer' polygons returned by the Clipper object. These top-level PolyNodes may contain their own PolyNode children representing hole polygons that may also contain children representing nested outer polygons etc.
Since the PolyTree data structure is more complex than the alternative Polygons data structure that's passed to Clipper's overloaded Execute method, and because it's more computationally expensive to process (roughly 5-10% slower), it should only be used when parent-child polygon relationships are needed and not just polygon coordinates.
+ + + | + +
+
+ + + polytree: + Contour = () + ChildCount = 1 + Childs[0]: + Contour = ((10,10),(100,10),(100,100),(10,100)) + IsHole = False + ChildCount = 1 + Childs[0]: + Contour = ((20,20),(20,90),(90,90),(90,20)) + IsHole = True + ChildCount = 2 + Childs[0]: + Contour = ((30,30),(50,30),(50,50),(30,50)) + IsHole = False + ChildCount = 0 + Childs[1]: + Contour = ((60,60),(80,60),(80,80),(60,80)) + IsHole = False + ChildCount = 0 + ++ + |
+
+
Fields + | Methods + | Properties + | +
---|---|---|
In PolyTree: + | +||
+ | +Clear + | +Total + | +
+ | +GetFirst + | ++ | +
In PolyNode: + | +||
+ | +GetNext + | +ChildCount + | +
+ | ++ | +Childs + | +
+ | ++ | +Contour + | +
+ | ++ | +IsHole + | +
+ | ++ | +Parent + | +
Clipper.Execute, PolyNode, ExPolygons, Polygons
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function Area(const pts: TPolygon): double;
+ +C++ » double Area(const Polygon &poly);
+ +C# » public static double Area(Polygon poly);
+ + +This function returns the area of the supplied polygon. Depending on orientation, this value may be positive or negative. If Orientation is true, then the area will be positive and conversely, if Orientation is false, then the area will be negative.
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function CleanPolygon(const Poly: TPolygon; Distance: double = 1.415): TPolygon;
+ +C++ » void CleanPolygon(Polygon &in_poly, Polygon &out_poly, double distance = 1.415);
+ +C# » public static Polygon CleanPolygon(Polygon poly, double distance = 1.415);
+This function removes vertices that are within the specified 'distance' from their preceeding vertices. The default distance is approx SQRT(2) so that adjacent vertices having their corresponding X and Y coordinates within 1 unit of each other will precipitate the removal of the second vertex.
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function CleanPolygons(const Polys: TPolygons; Distance: double = 1.415): TPolygons;
+ +C++ » void CleanPolygons(Polygons &in_polys, Polygon &out_polys, double distance = 1.415);
+ +C# » public static Polygons CleanPolygons(Polygons polys, double distance = 1.415);
+This function removes vertices that are within the specified 'distance' from their preceeding vertices. The default distance is approx SQRT(2) so that adjacent vertices having their corresponding X and Y coordinates within 1 unit of each other will precipitate the removal of the second vertex.
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function OffsetPolygons(const polys: TPolygons; const delta: double; JoinType: TJoinType = jtSquare; MiterLimit: double = 2.0; AutoFix: boolean = true): TPolygons;
+ +C++ » void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, double delta, JoinType jointype = jtSquare, double MiterLimit = 2.0, bool AutoFix = true);
+ +C# » public static Polygons OffsetPolygons(Polygons polys, double delta, JoinType jointype = JoinType.jtSquare, double MiterLimit = 2.0, bool AutoFix = true);
+This function offsets the 'polys' polygons parameter by the 'delta' amount. Positive delta values expand outer polygons and contract inner 'hole' polygons. Negative deltas do the reverse.
+Edge joins may be one of three jointypes - jtMiter, jtSquare or jtRound. If the jointype is jtMiter, then the MiterLimit parameter will determine the maximum distance from the original vertex that the new offsetted vertex is allowed (in multiples of delta) before squaring is applied.
+It's important that the polygons passed to this function are oriented such that outer polygons have a 'true' orientation and inner 'hole' polygons have a 'false' orientation. If the orientations of input polygons are incorrect, the function will return unexpected results.
The optional AutoFix parameter will check the orientations of the input polygons and reverse them if needed. (AutoFix is optional because it is time-consuming. If the orientations of the input polygons are known to be correct and duplicate vertices don't need stripping, then set this parameter to false.)
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function Orientation(const poly: TPolygon): boolean;
+ +C++ » bool Orientation(const Polygon &poly); // Function in the ClipperLib namespace.
+ +C# » public static bool Orientation(Polygon poly); // Static method of the Clipper class in the ClipperLib namespace.
+ + +Orientation returns a boolean value that is based on the polygon's orientation relative to the display's orientation (ie Y-axis positive upward vs Y-axis positive downward). +
Notes:
+
Clipper.ReverseSolution, OffsetPolygons, Polygon
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function ReversePolygon(const polys: TPolygon): TPolygon;
+ +C++ » void ReversePolygon(const Polygon &p);
+ +C# » //Call Polygon.Reverse().
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function ReversePolygons(const polys: TPolygons): TPolygons;
+ +C++ » void ReversePolygons(const Polygons &p);
+ +C# » void ReversePolygons( Polygons polys );
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function SimplifyPolygon(const poly: TPolygon): TPolygons;
+ +C++ » void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys);
+ +C# » public static Polygons SimplifyPolygon(Polygon poly);
+This function converts a self-intersecting polygon into simple polygons.
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» function SimplifyPolygons(const polys: TPolygons): TPolygons;
+ +C++ » void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys);
+ +C++ » void SimplifyPolygons(const Polygons &polys);
+ +C# » public static Polygons SimplifyPolygons(Polygons polys);
+This function converts self-intersecting polygons into simple polygons.
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» type TClipType = (ctIntersection, ctUnion, ctDifference, ctXor);
+ +C++ » enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };
+ +C# » public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» TIntPoint = record X, Y: int64; end;
+ +C++ » struct IntPoint { long64 X; long64 Y; ... };
+ +C# » public class IntPoint { public Int64 X; { get; set; } public Int64 Y; { get; set; } ... };
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.»
TIntRect = record left, top, right, bottom: Int64; end;
C++ »
struct IntPoint { long64 left; long64 top; long64 right; long64 bottom; ... };
C# »
public class IntPoint {
public Int64 left; { get; set; }
public Int64 top; { get; set; }
public Int64 right; { get; set; }
public Int64 bottom; { get; set; } ... };
Structure returned by Clipper's GetBounds method.
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» type TJoinType = (jtSquare, jtRound, jtMiter);
+ +C++ » enum JoinType { jtSquare, jtRound, jtMiter };
+ +C# » public enum JoinType { jtSquare, jtRound, jtMiter };
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» type TPolyFillType = (pftEvenOdd, pftNonZero, pftPositive, pftNegative);
+ +C++ » enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};
+ +C# » public enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};
++ + +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» type TPolyType = (ptSubject, ptClip);
+ +C++ » enum PolyType { ptSubject, ptClip };
+ +C# » public enum PolyType { ptSubject, ptClip };
+ClipperBase.AddPolygon, ClipperBase.AddPolygons
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» TPolygon = array of TIntPoint;
+ +C++ » typedef std::vector< IntPoint > Polygon;
+ +C# » using Polygon = List<IntPoint>;
+ This structure contains the coordinates of a single polygon contour.
The term 'polygon' is often used by others to refer to a single 'outer' contour together with any number of inner contours or 'holes'. However, in this documentation, polygon is used synonymously with a single polygon contour, irrespective of whether it's an outer or a hole contour.
Multiple polygons (ie outer contours and hole contours) are encapuslated within a Polygons structure.
A Polygon structure can be passed to Clipper objects via the AddPolygon method.
Example, ClipperBase.AddPolygon, PolyTree, Orientation, IntPoint, Polygons
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» TPolygons = array of TPolygon;
+ +C++ » typedef std::vector< Polygon > Polygons;
+ +C# » using Polygons = List<List< IntPoint >>;
+ This structure encapsulates one or a number of outer and inner 'hole' Polygon contours (where inner polygon contours have an Orientation opposite that of outer contours).
Polygons can be passed to Clipper objects via the AddPolygons method.
The solution parameter in Clipper's overloaded Execute method can return either a Polygons structure or a PolyTree structure.
Clipper.Execute, ClipperBase.AddPolygons, PolyTree, Orientation, IntPoint, Polygon
+ +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | +ClipperLib + | ++ | +
Del.» Equivalent to Int64
+ +C++ » typedef signed long long long64;
+ +C# » Equivalent to Int64
+
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Home + | ++ | +
Types + | Classes + | Routines + | +
---|---|---|
ClipType + | +Clipper + | +Area + | +
ExPolygons + | +ClipperBase + | +CleanPolygon + | +
IntPoint + | +PolyNode + | +CleanPolygons + | +
IntRect + | +PolyTree + | +OffsetPolygons + | +
JoinType + | ++ | +Orientation + | +
long64 + | ++ | +ReversePolygon + | +
PolyFillType + | ++ | +ReversePolygons + | +
Polygon + | ++ | +SimplifyPolygon + | +
Polygons + | ++ | +SimplifyPolygons + | +
PolyType + | ++ | ++ | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
Library Overview + | +Changes + | +Examples + | +FAQ + | +Rounding + | +Compatibility with Prior Versions + | +License + | +
+ | +
+ Classes (Hierarchy)+ + + + + |
+
ClipType + | +IntPoint + | +JoinType + | +PolyFillType + | +Polygons + | +
ExPolygons + | +IntRect + | +long64 + | +Polygon + | +PolyType + | +
Area + | +CleanPolygons + | +Orientation + | +ReversePolygons + | +SimplifyPolygons + | +
CleanPolygon + | +OffsetPolygons + | +ReversePolygon + | +SimplifyPolygon + | +
ClipperLib + | +
Copyright ©2010-2012 Angus Johnson - Clipper version 5.1.0 - Help file built on 17-February-2013
+function helloSyntaxHighlighter() +{ + return "hi!"; +} ++ + diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js new file mode 100755 index 0000000..4e29bdd --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d
\\\\w+)\\\\]$","U"),i=1,p=0;ptags. + */ +function processUrls(code) +{ + var gt = /(.*)((>|<).*)/; + + return code.replace(sh.regexLib.url, function(m) + { + var suffix = '', + match = null + ; + + // We include < and > in the URL for the common cases liketags to the document body + for (i = 0; i < elements.length; i++) + { + var url = brushes[elements[i].params.brush]; + + if (!url) + continue; + + scripts[url] = false; + loadScript(url); + } + + function loadScript(url) + { + var script = document.createElement('script'), + done = false + ; + + script.src = url; + script.type = 'text/javascript'; + script.language = 'javascript'; + script.onload = script.onreadystatechange = function() + { + if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) + { + done = true; + scripts[url] = true; + checkAll(); + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + script.parentNode.removeChild(script); + } + }; + + // sync way of adding script tags to the page + document.body.appendChild(script); + }; + + function checkAll() + { + for(var url in scripts) + if (scripts[url] == false) + return; + + if (allCalled) + SyntaxHighlighter.highlight(allParams); + }; +}; + +})(); diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js new file mode 100755 index 0000000..4214763 --- /dev/null +++ b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shCore.js @@ -0,0 +1,1721 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +var SyntaxHighlighter = function() { + +// CommonJS +if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') +{ + XRegExp = require('XRegExp').XRegExp; +} + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... +var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : null, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : true, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of tags. */ + useScriptTags : true, + + /** Blogger mode flag. */ + bloggerMode : false, + + stripBrs : false, + + /** Name of the tag that SyntaxHighlighter will automatically look for. */ + tagName : 'pre', + + strings : { + expandSource : 'expand source', + help : '?', + alert: 'SyntaxHighlighter\n\n', + noBrush : 'Can\'t find brush for: ', + brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ', + + // this is populated by the build script + aboutDialog : ' About SyntaxHighlighter ' + } + }, + + /** Internal 'global' variables. */ + vars : { + discoveredBrushes : null, + highlighters : {} + }, + + /** This object is populated by user included external brush files. */ + brushes : {}, + + /** Common regular expressions. */ + regexLib : { + multiLineCComments : /\/\*[\s\S]*?\*\//gm, + singleLineCComments : /\/\/.*$/gm, + singleLinePerlComments : /#.*$/gm, + doubleQuotedString : /"([^\\"\n]|\\.)*"/g, + singleQuotedString : /'([^\\'\n]|\\.)*'/g, + multiLineDoubleQuotedString : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'), + multiLineSingleQuotedString : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'), + xmlComments : /(<|<)!--[\s\S]*?--(>|>)/gm, + url : /\w+:\/\/[\w-.\/?%&=:@;]*/g, + + /** = ?> tags. */ + phpScriptTags : { left: /(<|<)\?=?/g, right: /\?(>|>)/g }, + + /** <%= %> tags. */ + aspScriptTags : { left: /(<|<)%=?/g, right: /%(>|>)/g }, + + /** tags. */ + scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi } + }, + + toolbar: { + /** + * Generates HTML markup for the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @return {String} Returns HTML markup. + */ + getHtml: function(highlighter) + { + var html = ' '; + + return html; + }, + + /** + * Generates HTML markup for a regular button in the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @param {String} commandName Command name that would be executed. + * @param {String} label Label text to display. + * @return {String} Returns HTML markup. + */ + getButtonHtml: function(highlighter, commandName, label) + { + return '' + label + '' + ; + }, + + /** + * Event handler for a toolbar anchor. + */ + handler: function(e) + { + var target = e.target, + className = target.className || '' + ; + + function getValue(name) + { + var r = new RegExp(name + '_(\\w+)'), + match = r.exec(className) + ; + + return match ? match[1] : null; + }; + + var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id), + commandName = getValue('command') + ; + + // execute the toolbar command + if (highlighter && commandName) + sh.toolbar.items[commandName].execute(highlighter); + + // disable default A click behaviour + e.preventDefault(); + }, + + /** Collection of toolbar items. */ + items : { + // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent. + list: ['expandSource', 'help'], + + expandSource: { + getHtml: function(highlighter) + { + if (highlighter.getParam('collapse') != true) + return ''; + + var title = highlighter.getParam('title'); + return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource); + }, + + execute: function(highlighter) + { + var div = getHighlighterDivById(highlighter.id); + removeClass(div, 'collapsed'); + } + }, + + /** Command to display the about dialog window. */ + help: { + execute: function(highlighter) + { + var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'), + doc = wnd.document + ; + + doc.write(sh.config.strings.aboutDialog); + doc.close(); + wnd.focus(); + } + } + } + }, + + /** + * Finds all elements on the page which should be processes by SyntaxHighlighter. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are returned which qualify. + * + * @return {Array} Returns list ofSyntaxHighlighterversion 3.0.83 (July 02 2010)JavaScript code syntax highlighter.Copyright 2004-2010 Alex Gorbatchev.If you like this script, please donate to
keep development active!{ target: DOMElement, params: Object }
objects. + */ + findElements: function(globalParams, element) + { + var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)), + conf = sh.config, + result = [] + ; + + // support for feature + if (conf.useScriptTags) + elements = elements.concat(getSyntaxHighlighterScriptTags()); + + if (elements.length === 0) + return result; + + for (var i = 0; i < elements.length; i++) + { + var item = { + target: elements[i], + // local params take precedence over globals + params: merge(globalParams, parseParams(elements[i].className)) + }; + + if (item.params['brush'] == null) + continue; + + result.push(item); + } + + return result; + }, + + /** + * Shorthand to highlight all elements on the page that are marked as + * SyntaxHighlighter source code. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are highlighted. + */ + highlight: function(globalParams, element) + { + var elements = this.findElements(globalParams, element), + propertyName = 'innerHTML', + highlighter = null, + conf = sh.config + ; + + if (elements.length === 0) + return; + + for (var i = 0; i < elements.length; i++) + { + var element = elements[i], + target = element.target, + params = element.params, + brushName = params.brush, + code + ; + + if (brushName == null) + continue; + + // Instantiate a brush + if (params['html-script'] == 'true' || sh.defaults['html-script'] == true) + { + highlighter = new sh.HtmlScript(brushName); + brushName = 'htmlscript'; + } + else + { + var brush = findBrush(brushName); + + if (brush) + highlighter = new brush(); + else + continue; + } + + code = target[propertyName]; + + // remove CDATA from tags if it's present + if (conf.useScriptTags) + code = stripCData(code); + + // Inject title if the attribute is present + if ((target.title || '') != '') + params.title = target.title; + + params['brush'] = brushName; + highlighter.init(params); + element = highlighter.getDiv(code); + + // carry over ID + if ((target.id || '') != '') + element.id = target.id; + + target.parentNode.replaceChild(element, target); + } + }, + + /** + * Main entry point for the SyntaxHighlighter. + * @param {Object} params Optional params to apply to all highlighted elements. + */ + all: function(params) + { + attachEvent( + window, + 'load', + function() { sh.highlight(params); } + ); + } +}; // end of sh + +sh['all'] = sh.all; +sh['highlight'] = sh.highlight; + +/** + * Checks if target DOM elements has specified CSS class. + * @param {DOMElement} target Target DOM element to check. + * @param {String} className Name of the CSS class to check for. + * @return {Boolean} Returns true if class name is present, false otherwise. + */ +function hasClass(target, className) +{ + return target.className.indexOf(className) != -1; +}; + +/** + * Adds CSS class name to the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className New CSS class to add. + */ +function addClass(target, className) +{ + if (!hasClass(target, className)) + target.className += ' ' + className; +}; + +/** + * Removes CSS class name from the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className CSS class to remove. + */ +function removeClass(target, className) +{ + target.className = target.className.replace(className, ''); +}; + +/** + * Converts the source to array object. Mostly used for function arguments and + * lists returned by getElementsByTagName() which aren't Array objects. + * @param {List} source Source list. + * @return {Array} Returns array. + */ +function toArray(source) +{ + var result = []; + + for (var i = 0; i < source.length; i++) + result.push(source[i]); + + return result; +}; + +/** + * Splits block of text into lines. + * @param {String} block Block of text. + * @return {Array} Returns array of lines. + */ +function splitLines(block) +{ + return block.split('\n'); +} + +/** + * Generates HTML ID for the highlighter. + * @param {String} highlighterId Highlighter ID. + * @return {String} Returns HTML ID. + */ +function getHighlighterId(id) +{ + var prefix = 'highlighter_'; + return id.indexOf(prefix) == 0 ? id : prefix + id; +}; + +/** + * Finds Highlighter instance by ID. + * @param {String} highlighterId Highlighter ID. + * @return {Highlighter} Returns instance of the highlighter. + */ +function getHighlighterById(id) +{ + return sh.vars.highlighters[getHighlighterId(id)]; +}; + +/** + * Finds highlighter's DIV container. + * @param {String} highlighterId Highlighter ID. + * @return {Element} Returns highlighter's DIV element. + */ +function getHighlighterDivById(id) +{ + return document.getElementById(getHighlighterId(id)); +}; + +/** + * Stores highlighter so that getHighlighterById() can do its thing. Each + * highlighter must call this method to preserve itself. + * @param {Highilghter} highlighter Highlighter instance. + */ +function storeHighlighter(highlighter) +{ + sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter; +}; + +/** + * Looks for a child or parent node which has specified classname. + * Equivalent to jQuery's $(container).find(".className") + * @param {Element} target Target element. + * @param {String} search Class name or node name to look for. + * @param {Boolean} reverse If set to true, will go up the node tree instead of down. + * @return {Element} Returns found child or parent element on null. + */ +function findElement(target, search, reverse /* optional */) +{ + if (target == null) + return null; + + var nodes = reverse != true ? target.childNodes : [ target.parentNode ], + propertyToFind = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName', + expectedValue, + found + ; + + expectedValue = propertyToFind != 'nodeName' + ? search.substr(1) + : search.toUpperCase() + ; + + // main return of the found node + if ((target[propertyToFind] || '').indexOf(expectedValue) != -1) + return target; + + for (var i = 0; nodes && i < nodes.length && found == null; i++) + found = findElement(nodes[i], search, reverse); + + return found; +}; + +/** + * Looks for a parent node which has specified classname. + * This is an alias tofindElement(container, className, true)
. + * @param {Element} target Target element. + * @param {String} className Class name to look for. + * @return {Element} Returns found parent element on null. + */ +function findParentElement(target, className) +{ + return findElement(target, className, true); +}; + +/** + * Finds an index of element in the array. + * @ignore + * @param {Object} searchElement + * @param {Number} fromIndex + * @return {Number} Returns index of element if found; -1 otherwise. + */ +function indexOf(array, searchElement, fromIndex) +{ + fromIndex = Math.max(fromIndex || 0, 0); + + for (var i = fromIndex; i < array.length; i++) + if(array[i] == searchElement) + return i; + + return -1; +}; + +/** + * Generates a unique element ID. + */ +function guid(prefix) +{ + return (prefix || '') + Math.round(Math.random() * 1000000).toString(); +}; + +/** + * Merges two objects. Values from obj2 override values in obj1. + * Function is NOT recursive and works only for one dimensional objects. + * @param {Object} obj1 First object. + * @param {Object} obj2 Second object. + * @return {Object} Returns combination of both objects. + */ +function merge(obj1, obj2) +{ + var result = {}, name; + + for (name in obj1) + result[name] = obj1[name]; + + for (name in obj2) + result[name] = obj2[name]; + + return result; +}; + +/** + * Attempts to convert string to boolean. + * @param {String} value Input string. + * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise. + */ +function toBoolean(value) +{ + var result = { "true" : true, "false" : false }[value]; + return result == null ? value : result; +}; + +/** + * Opens up a centered popup window. + * @param {String} url URL to open in the window. + * @param {String} name Popup name. + * @param {int} width Popup width. + * @param {int} height Popup height. + * @param {String} options window.open() options. + * @return {Window} Returns window instance. + */ +function popup(url, name, width, height, options) +{ + var x = (screen.width - width) / 2, + y = (screen.height - height) / 2 + ; + + options += ', left=' + x + + ', top=' + y + + ', width=' + width + + ', height=' + height + ; + options = options.replace(/^,/, ''); + + var win = window.open(url, name, options); + win.focus(); + return win; +}; + +/** + * Adds event handler to the target object. + * @param {Object} obj Target object. + * @param {String} type Name of the event. + * @param {Function} func Handling function. + */ +function attachEvent(obj, type, func, scope) +{ + function handler(e) + { + e = e || window.event; + + if (!e.target) + { + e.target = e.srcElement; + e.preventDefault = function() + { + this.returnValue = false; + }; + } + + func.call(scope || window, e); + }; + + if (obj.attachEvent) + { + obj.attachEvent('on' + type, handler); + } + else + { + obj.addEventListener(type, handler, false); + } +}; + +/** + * Displays an alert. + * @param {String} str String to display. + */ +function alert(str) +{ + window.alert(sh.config.strings.alert + str); +}; + +/** + * Finds a brush by its alias. + * + * @param {String} alias Brush alias. + * @param {Boolean} showAlert Suppresses the alert if false. + * @return {Brush} Returns bursh constructor if found, null otherwise. + */ +function findBrush(alias, showAlert) +{ + var brushes = sh.vars.discoveredBrushes, + result = null + ; + + if (brushes == null) + { + brushes = {}; + + // Find all brushes + for (var brush in sh.brushes) + { + var info = sh.brushes[brush], + aliases = info.aliases + ; + + if (aliases == null) + continue; + + // keep the brush name + info.brushName = brush.toLowerCase(); + + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = brush; + } + + sh.vars.discoveredBrushes = brushes; + } + + result = sh.brushes[brushes[alias]]; + + if (result == null && showAlert != false) + alert(sh.config.strings.noBrush + alias); + + return result; +}; + +/** + * Executes a callback on each line and replaces each line with result from the callback. + * @param {Object} str Input string. + * @param {Object} callback Callback function taking one string argument and returning a string. + */ +function eachLine(str, callback) +{ + var lines = splitLines(str); + + for (var i = 0; i < lines.length; i++) + lines[i] = callback(lines[i], i); + + return lines.join('\n'); +}; + +/** + * This is a special trim which only removes first and last empty lines + * and doesn't affect valid leading space on the first line. + * + * @param {String} str Input string + * @return {String} Returns string without empty first and last lines. + */ +function trimFirstAndLastLines(str) +{ + return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, ''); +}; + +/** + * Parses key/value pairs into hash object. + * + * Understands the following formats: + * - name: word; + * - name: [word, word]; + * - name: "string"; + * - name: 'string'; + * + * For example: + * name1: value; name2: [value, value]; name3: 'value' + * + * @param {String} str Input string. + * @return {Object} Returns deserialized object. + */ +function parseParams(str) +{ + var match, + result = {}, + arrayRegex = new XRegExp("^\\[(?(.*?))\\]$"), + regex = new XRegExp( + "(? [\\w-]+)" + + "\\s*:\\s*" + + "(? " + + "[\\w-%#]+|" + // word + "\\[.*?\\]|" + // [] array + '".*?"|' + // "" string + "'.*?'" + // '' string + ")\\s*;?", + "g" + ) + ; + + while ((match = regex.exec(str)) != null) + { + var value = match.value + .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings + ; + + // try to parse array value + if (value != null && arrayRegex.test(value)) + { + var m = arrayRegex.exec(value); + value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : []; + } + + result[match.name] = value; + } + + return result; +}; + +/** + * Wraps each line of the string into tag with given style applied to it. + * + * @param {String} str Input string. + * @param {String} css Style name to apply to the string. + * @return {String} Returns input string with each line surrounded by tag. + */ +function wrapLinesWithCode(str, css) +{ + if (str == null || str.length == 0 || str == '\n') + return str; + + str = str.replace(/... to them so that + // leading spaces aren't included. + if (css != null) + str = eachLine(str, function(line) + { + if (line.length == 0) + return ''; + + var spaces = ''; + + line = line.replace(/^( | )+/, function(s) + { + spaces = s; + return ''; + }); + + if (line.length == 0) + return spaces; + + return spaces + '
' + line + '
'; + }); + + return str; +}; + +/** + * Pads number with zeros until it's length is the same as given length. + * + * @param {Number} number Number to pad. + * @param {Number} length Max string length with. + * @return {String} Returns a string padded with proper amount of '0'. + */ +function padNumber(number, length) +{ + var result = number.toString(); + + while (result.length < length) + result = '0' + result; + + return result; +}; + +/** + * Replaces tabs with spaces. + * + * @param {String} code Source code. + * @param {Number} tabSize Size of the tab. + * @return {String} Returns code with all tabs replaces by spaces. + */ +function processTabs(code, tabSize) +{ + var tab = ''; + + for (var i = 0; i < tabSize; i++) + tab += ' '; + + return code.replace(/\t/g, tab); +}; + +/** + * Replaces tabs with smart spaces. + * + * @param {String} code Code to fix the tabs in. + * @param {Number} tabSize Number of spaces in a column. + * @return {String} Returns code with all tabs replaces with roper amount of spaces. + */ +function processSmartTabs(code, tabSize) +{ + var lines = splitLines(code), + tab = '\t', + spaces = '' + ; + + // Create a string with 1000 spaces to copy spaces from... + // It's assumed that there would be no indentation longer than that. + for (var i = 0; i < 50; i++) + spaces += ' '; // 20 spaces * 50 + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function insertSpaces(line, pos, count) + { + return line.substr(0, pos) + + spaces.substr(0, count) + + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab + ; + }; + + // Go through all the lines and do the 'smart tabs' magic. + code = eachLine(code, function(line) + { + if (line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while ((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + line = insertSpaces(line, pos, spaces); + } + + return line; + }); + + return code; +}; + +/** + * Performs various string fixes based on configuration. + */ +function fixInputString(str) +{ + var br = /
|<br\s*\/?>/gi; + + if (sh.config.bloggerMode == true) + str = str.replace(br, '\n'); + + if (sh.config.stripBrs == true) + str = str.replace(br, ''); + + return str; +}; + +/** + * Removes all white space at the begining and end of a string. + * + * @param {String} str String to trim. + * @return {String} Returns string without leading and following white space characters. + */ +function trim(str) +{ + return str.replace(/^\s+|\s+$/g, ''); +}; + +/** + * Unindents a block of text by the lowest common indent amount. + * @param {String} str Text to unindent. + * @return {String} Returns unindented text block. + */ +function unindent(str) +{ + var lines = splitLines(fixInputString(str)), + indents = new Array(), + regex = /^\s*/, + min = 1000 + ; + + // go through every line and check for common number of indents + for (var i = 0; i < lines.length && min > 0; i++) + { + var line = lines[i]; + + if (trim(line).length == 0) + continue; + + var matches = regex.exec(line); + + // In the event that just one line doesn't have leading white space + // we can't unindent anything, so bail completely. + if (matches == null) + return str; + + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if (min > 0) + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); +}; + +/** + * Callback method for Array.sort() which sorts matches by + * index position and then by length. + * + * @param {Match} m1 Left object. + * @param {Match} m2 Right object. + * @return {Number} Returns -1, 0 or -1 as a comparison result. + */ +function matchesSortCallback(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + + return 0; +}; + +/** + * Executes given regular expression on provided code and returns all + * matches that are found. + * + * @param {String} code Code to execute regular expression on. + * @param {Object} regex Regular expression item info fromregexList
collection. + * @return {Array} Returns a list of Match objects. + */ +function getMatches(code, regexInfo) +{ + function defaultAdd(match, regexInfo) + { + return match[0]; + }; + + var index = 0, + match = null, + matches = [], + func = regexInfo.func ? regexInfo.func : defaultAdd + ; + + while((match = regexInfo.regex.exec(code)) != null) + { + var resultMatch = func(match, regexInfo); + + if (typeof(resultMatch) == 'string') + resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)]; + + matches = matches.concat(resultMatch); + } + + return matches; +}; + +/** + * Turns all URLs in the code into tags. + * @param {String} code Input code. + * @return {String} Returns code with
' + spaces + '
' : '') + line
+ );
+ }
+
+ return html;
+ },
+
+ /**
+ * Returns HTML for the table title or empty string if title is null.
+ */
+ getTitleHtml: function(title)
+ {
+ return title ? '' + this.getLineNumbersHtml(code) + ' | ' : '') + + ''
+ + ' '
+ + html
+ + ' '
+ + ' | '
+ + '
.*?)" +
+ "(?" + regexGroup.right.source + ")",
+ "sgi"
+ )
+ };
+ }
+}; // end of Highlighter
+
+return sh;
+}(); // end of anonymous function
+
+// CommonJS
+typeof(exports) != 'undefined' ? exports['SyntaxHighlighter'] = SyntaxHighlighter : null;
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js
new file mode 100755
index 0000000..36951c9
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js
@@ -0,0 +1,157 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+var dp = {
+ SyntaxHighlighter : {}
+};
+
+dp.SyntaxHighlighter = {
+ parseParams: function(
+ input,
+ showGutter,
+ showControls,
+ collapseAll,
+ firstLine,
+ showColumns
+ )
+ {
+ function getValue(list, name)
+ {
+ var regex = new XRegExp('^' + name + '\\[(?\\w+)\\]$', 'gi'),
+ match = null
+ ;
+
+ for (var i = 0; i < list.length; i++)
+ if ((match = regex.exec(list[i])) != null)
+ return match.value;
+
+ return null;
+ };
+
+ function defaultValue(value, def)
+ {
+ return value != null ? value : def;
+ };
+
+ function asString(value)
+ {
+ return value != null ? value.toString() : null;
+ };
+
+ var parts = input.split(':'),
+ brushName = parts[0],
+ options = {},
+ straight = { 'true' : true }
+ reverse = { 'true' : false },
+ result = null,
+ defaults = SyntaxHighlighter.defaults
+ ;
+
+ for (var i in parts)
+ options[parts[i]] = 'true';
+
+ showGutter = asString(defaultValue(showGutter, defaults.gutter));
+ showControls = asString(defaultValue(showControls, defaults.toolbar));
+ collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
+ showColumns = asString(defaultValue(showColumns, defaults.ruler));
+ firstLine = asString(defaultValue(firstLine, defaults['first-line']));
+
+ return {
+ brush : brushName,
+ gutter : defaultValue(reverse[options.nogutter], showGutter),
+ toolbar : defaultValue(reverse[options.nocontrols], showControls),
+ collapse : defaultValue(straight[options.collapse], collapseAll),
+ // ruler : defaultValue(straight[options.showcolumns], showColumns),
+ 'first-line' : defaultValue(getValue(parts, 'firstline'), firstLine)
+ };
+ },
+
+ HighlightAll: function(
+ name,
+ showGutter /* optional */,
+ showControls /* optional */,
+ collapseAll /* optional */,
+ firstLine /* optional */,
+ showColumns /* optional */
+ )
+ {
+ function findValue()
+ {
+ var a = arguments;
+
+ for (var i = 0; i < a.length; i++)
+ {
+ if (a[i] === null)
+ continue;
+
+ if (typeof(a[i]) == 'string' && a[i] != '')
+ return a[i] + '';
+
+ if (typeof(a[i]) == 'object' && a[i].value != '')
+ return a[i].value + '';
+ }
+
+ return null;
+ };
+
+ function findTagsByName(list, name, tagName)
+ {
+ var tags = document.getElementsByTagName(tagName);
+
+ for (var i = 0; i < tags.length; i++)
+ if (tags[i].getAttribute('name') == name)
+ list.push(tags[i]);
+ }
+
+ var elements = [],
+ highlighter = null,
+ registered = {},
+ propertyName = 'innerHTML'
+ ;
+
+ // for some reason IE doesn't find by name, however it does see them just fine by tag name...
+ findTagsByName(elements, name, 'pre');
+ findTagsByName(elements, name, 'textarea');
+
+ if (elements.length === 0)
+ return;
+
+ for (var i = 0; i < elements.length; i++)
+ {
+ var element = elements[i],
+ params = findValue(
+ element.attributes['class'], element.className,
+ element.attributes['language'], element.language
+ ),
+ language = ''
+ ;
+
+ if (params === null)
+ continue;
+
+ params = dp.SyntaxHighlighter.parseParams(
+ params,
+ showGutter,
+ showControls,
+ collapseAll,
+ firstLine,
+ showColumns
+ );
+
+ SyntaxHighlighter.highlight(params, element);
+ }
+ }
+};
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css
new file mode 100755
index 0000000..34f6864
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css
@@ -0,0 +1,226 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css
new file mode 100755
index 0000000..8364997
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css
@@ -0,0 +1,328 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css
new file mode 100755
index 0000000..1db1f70
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css
@@ -0,0 +1,331 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #233729 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #497958 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #41a83e !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #41a83e !important;
+ color: #0a2b1d !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #96dd3b !important;
+ background: black !important;
+ border: 1px solid #41a83e !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #41a83e !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #ffe862 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #336442 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #9df39f !important;
+}
+.syntaxhighlighter .keyword {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #96dd3b !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #eb939a !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #edef7d !important;
+}
+
+.syntaxhighlighter .comments {
+ font-style: italic !important;
+}
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css
new file mode 100755
index 0000000..a45de9f
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css
@@ -0,0 +1,339 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #c3defe !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #787878 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #d4d0c8 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #d4d0c8 !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3f5fbf !important;
+ background: white !important;
+ border: 1px solid #d4d0c8 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #a0a0a0 !important;
+ background: #d4d0c8 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #a0a0a0 !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #2a00ff !important;
+}
+.syntaxhighlighter .keyword {
+ color: #7f0055 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #646464 !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #7f0055 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .xml .keyword {
+ color: #3f7f7f !important;
+ font-weight: normal !important;
+}
+.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
+ color: #7f007f !important;
+}
+.syntaxhighlighter .xml .string {
+ font-style: italic !important;
+ color: #2a00ff !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css
new file mode 100755
index 0000000..706c77a
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2a3133 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #990000 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #990000 !important;
+ color: black !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #ebdb8d !important;
+ background: black !important;
+ border: 1px solid #990000 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #990000 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .keyword {
+ color: aqua !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #aec4de !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #81cef9 !important;
+}
+.syntaxhighlighter .constants {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: aqua !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #aec4de !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css
new file mode 100755
index 0000000..6101eba
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css
@@ -0,0 +1,328 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2c2c29 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: white !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #3185b9 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #3185b9 !important;
+ color: #121212 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3185b9 !important;
+ background: black !important;
+ border: 1px solid #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #3185b9 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #96daff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: white !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #696854 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #e3e658 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #898989 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #aaaaaa !important;
+}
+.syntaxhighlighter .constants {
+ color: #96daff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #d01d33 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ffc074 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #4a8cdb !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #96daff !important;
+}
+
+.syntaxhighlighter .functions {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css
new file mode 100755
index 0000000..2923ce7
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: lime !important;
+}
+.syntaxhighlighter .gutter {
+ color: #38566f !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #222222 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: lime !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #aaaaff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: lime !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: lime !important;
+}
+.syntaxhighlighter .keyword {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: aqua !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff8000 !important;
+}
+.syntaxhighlighter .constants {
+ color: yellow !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #aaaaff !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: red !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: yellow !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css
new file mode 100755
index 0000000..e3733ee
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #38566f !important;
+}
+.syntaxhighlighter table caption {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #0f192a !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #d1edff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #b43d3d !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #b43d3d !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #f8bb00 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css
new file mode 100755
index 0000000..d093683
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #323e41 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter table caption {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #1b2426 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #5ba1cf !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #878a85 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #5ba1cf !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css
new file mode 100755
index 0000000..10636cd
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css
@@ -0,0 +1,119 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ background-color: #E7E5DC !important;
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ display : none;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css
new file mode 100755
index 0000000..d8b4313
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css
@@ -0,0 +1,120 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #233729 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #497958 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #41a83e !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #41a83e !important;
+ color: #0a2b1d !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #96dd3b !important;
+ background: black !important;
+ border: 1px solid #41a83e !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #41a83e !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #ffe862 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #336442 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #9df39f !important;
+}
+.syntaxhighlighter .keyword {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #96dd3b !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #eb939a !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #edef7d !important;
+}
+
+.syntaxhighlighter .comments {
+ font-style: italic !important;
+}
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css
new file mode 100755
index 0000000..77377d9
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css
@@ -0,0 +1,128 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #c3defe !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #787878 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #d4d0c8 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #d4d0c8 !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3f5fbf !important;
+ background: white !important;
+ border: 1px solid #d4d0c8 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #a0a0a0 !important;
+ background: #d4d0c8 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #a0a0a0 !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #2a00ff !important;
+}
+.syntaxhighlighter .keyword {
+ color: #7f0055 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #646464 !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #7f0055 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .xml .keyword {
+ color: #3f7f7f !important;
+ font-weight: normal !important;
+}
+.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
+ color: #7f007f !important;
+}
+.syntaxhighlighter .xml .string {
+ font-style: italic !important;
+ color: #2a00ff !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css
new file mode 100755
index 0000000..dae5053
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2a3133 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #990000 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #990000 !important;
+ color: black !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #ebdb8d !important;
+ background: black !important;
+ border: 1px solid #990000 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #990000 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .keyword {
+ color: aqua !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #aec4de !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #81cef9 !important;
+}
+.syntaxhighlighter .constants {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: aqua !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #aec4de !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css
new file mode 100755
index 0000000..8fbd871
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css
@@ -0,0 +1,117 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2c2c29 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: white !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #3185b9 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #3185b9 !important;
+ color: #121212 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3185b9 !important;
+ background: black !important;
+ border: 1px solid #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #3185b9 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #96daff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: white !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #696854 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #e3e658 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #898989 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #aaaaaa !important;
+}
+.syntaxhighlighter .constants {
+ color: #96daff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #d01d33 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ffc074 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #4a8cdb !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #96daff !important;
+}
+
+.syntaxhighlighter .functions {
+ font-weight: bold !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css
new file mode 100755
index 0000000..f4db39c
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: lime !important;
+}
+.syntaxhighlighter .gutter {
+ color: #38566f !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #222222 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: lime !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #aaaaff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: lime !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: lime !important;
+}
+.syntaxhighlighter .keyword {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: aqua !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff8000 !important;
+}
+.syntaxhighlighter .constants {
+ color: yellow !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #aaaaff !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: red !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: yellow !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css
new file mode 100755
index 0000000..c49563c
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #38566f !important;
+}
+.syntaxhighlighter table caption {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #0f192a !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #d1edff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #b43d3d !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #b43d3d !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #f8bb00 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css
new file mode 100755
index 0000000..6305a10
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #323e41 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter table caption {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #1b2426 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #5ba1cf !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #878a85 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #5ba1cf !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/.rvmrc b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/.rvmrc
new file mode 100755
index 0000000..8cb2ee3
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/.rvmrc
@@ -0,0 +1 @@
+rvm 1.8.7-p249@copydeca
\ No newline at end of file
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes/sass.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes/sass.html
new file mode 100755
index 0000000..f415684
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes/sass.html
@@ -0,0 +1,204 @@
+
\ No newline at end of file
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html
new file mode 100755
index 0000000..e1e2068
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/brushes_tests.html
@@ -0,0 +1,136 @@
+
+
+
+
+ SyntaxHighlighter Brushes Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html
new file mode 100755
index 0000000..1d57334
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/001_basic.html
@@ -0,0 +1,42 @@
+
+ /**
+ * multiline comment
+ */
+
+ text
+
+ // single line comment
+
+ text
+
+ "string" text 'string' text "string"
+ "string with \" escape" text 'string with \' escape' text "string with \" escape"
+
+ var code = '\
+ function helloWorld()\
+ {\
+ // this is great!\
+ for(var i = 0; i <= 1; i++)\
+ alert("yay");\
+ }\
+ ';
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html
new file mode 100755
index 0000000..e9c64e2
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/002_brushes.html
@@ -0,0 +1,50 @@
+
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+ test
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html
new file mode 100755
index 0000000..9b44292
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/003_script_tag.html
@@ -0,0 +1,42 @@
+
+
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html
new file mode 100755
index 0000000..d489a66
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/004_url_parsing.html
@@ -0,0 +1,43 @@
+
+/**
+ * Please see <http://www.alexgorbatchev.come/?test=1&y=2>
+ */
+var home = "http://www.alexgorbatchev.come/?test=1&y=2;test/1/2/3;";
+// < http://www.gnu.org/licenses/?test=1&y=2 >.
+
+// Test embedded URLs that terminate at a left angle bracket.
+// See bug #28: http://bitbucket.org/alexg/syntaxhighlighter/issue/28/
+"http://www.example.com/song2.mp3 ";
+
+
+
\ No newline at end of file
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html
new file mode 100755
index 0000000..6e6b1be
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/005_no_gutter.html
@@ -0,0 +1,33 @@
+
+ public Image getImage(URL url, String name) {
+ try {
+ /*
+ Regular multiline comment.
+ */
+ return getImage(new URL(url, name));
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html
new file mode 100755
index 0000000..8ebdd55
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/006_pad_line_numbers.html
@@ -0,0 +1,39 @@
+
+/**
+ * Returns an Image object that can then be painted on the screen.
+ * The url argument must specify an absolute {@link URL}. The name
+ * argument is a specifier that is relative to the url argument.
+ *
+ * @param url an absolute URL giving the base location of the image
+ * @param name the location of the image, relative to the url argument
+ * @return the image at the specified URL
+ * @see Image
+ */
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html
new file mode 100755
index 0000000..2643bb5
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse.html
@@ -0,0 +1,60 @@
+
+ /**
+ * Returns an Image object that can then be painted on the screen.
+ * The url argument must specify an absolute {@link URL}. The name
+ * argument is a specifier that is relative to the url argument.
+ *
+ * @param url an absolute URL giving the base location of the image
+ * @param name the location of the image, relative to the url argument
+ * @return the image at the specified URL
+ * @see Image
+ */
+
+
+
+ /**
+ * Returns an Image object that can then be painted on the screen.
+ * The url argument must specify an absolute {@link URL}. The name
+ * argument is a specifier that is relative to the url argument.
+ *
+ * @param url an absolute URL giving the base location of the image
+ * @param name the location of the image, relative to the url argument
+ * @return the image at the specified URL
+ * @see Image
+ */
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html
new file mode 100755
index 0000000..ea72046
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/007_collapse_interaction.html
@@ -0,0 +1,44 @@
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html
new file mode 100755
index 0000000..169dc38
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/008_first_line.html
@@ -0,0 +1,29 @@
+
+ partial class Foo
+ {
+ function test()
+ {
+ yield return;
+ }
+ }
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html
new file mode 100755
index 0000000..f2437d5
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/009_class_name.html
@@ -0,0 +1,32 @@
+
+ public Image getImage(URL url, String name) {
+ try {
+ /*
+ Regular multiline comment.
+ */
+ return getImage(new URL(url, name));
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html
new file mode 100755
index 0000000..64b6613
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/010_highlight.html
@@ -0,0 +1,70 @@
+
+ public function validateStrongPassword(password:String):Boolean
+ {
+ if (password == null || password.length <= 0)
+ {
+ return false;
+ }
+
+ return STRONG_PASSWORD_PATTERN.test(password);
+ }
+
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html
new file mode 100755
index 0000000..d6d62fc
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/011_smart_tabs.html
@@ -0,0 +1,98 @@
+
+ the words in this paragraph
+ should look like they are
+ evenly spaced between columns
+
+
+
+ the words in this paragraph
+ should look like they are
+ evenly spaced between columns
+
+
+
+ the words in this paragraph
+ should look out of whack
+ because smart tabs are disabled
+
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html
new file mode 100755
index 0000000..1bb4217
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/012_server_side.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html
new file mode 100755
index 0000000..c0a1201
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/013_html_script.html
@@ -0,0 +1,34 @@
+
+<hello>
+ <%
+ package free.cafekiwi.gotapi;
+ %>
+</hello>
+
+
+<%= print(); %>
+
+
+
\ No newline at end of file
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html
new file mode 100755
index 0000000..eb4343e
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/cases/014_legacy.html
@@ -0,0 +1,70 @@
+basic check
+no toolbar
+no gutter
+collapsed
+first line
+
+
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js
new file mode 100755
index 0000000..cda8162
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/commonjs_tests.js
@@ -0,0 +1,52 @@
+/**
+ * This is a CommonJS compatibility test. You can run this file with node.
+ */
+require.paths.unshift(__dirname + '/../scripts');
+
+var sys = require('sys'),
+ shSyntaxHighlighter = require('shCore').SyntaxHighlighter,
+ code = 'test',
+ brushes = [
+ 'AS3',
+ 'AppleScript',
+ 'Bash',
+ 'CSharp',
+ 'ColdFusion',
+ 'Cpp',
+ 'Css',
+ 'Delphi',
+ 'Diff',
+ 'Erlang',
+ 'Groovy',
+ 'JScript',
+ 'Java',
+ 'JavaFX',
+ 'Perl',
+ 'Php',
+ 'Plain',
+ 'PowerShell',
+ 'Python',
+ 'Ruby',
+ 'Sass',
+ 'Scala',
+ 'Sql',
+ 'Vb',
+ 'Xml'
+ ]
+ ;
+
+brushes.sort();
+
+for (var i = 0; i < brushes.length; i++)
+{
+ var name = brushes[i],
+ brush = require('shBrush' + name).Brush
+ ;
+
+ brush = new brush();
+ brush.init({ toolbar: false });
+
+ var result = brush.getHtml(code);
+
+ sys.puts(name + (result != null ? ': ok' : ': NOT OK'));
+}
diff --git a/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js
new file mode 100755
index 0000000..e414a7e
--- /dev/null
+++ b/clipper/Documentation/Scripts/SyntaxHighlighter/tests/js/jquery-1.4.2.js
@@ -0,0 +1,6240 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function( window, undefined ) {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // (both of which we optimize for)
+ quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
+
+ // Is it a simple selector
+ isSimple = /^.[^:#\[\.,]*$/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // Has the ready events already been bound?
+ readyBound = false,
+
+ // The functions to execute on DOM ready
+ readyList = [],
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwnProperty = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ indexOf = Array.prototype.indexOf;
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = "body";
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ match = quickExpr.exec( selector );
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ doc = (context ? context.ownerDocument || context : document);
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = buildFragment( [ match[1] ], [ doc ] );
+ selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ if ( elem ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $("TAG")
+ } else if ( !context && /^\w+$/.test( selector ) ) {
+ this.selector = selector;
+ this.context = document;
+ selector = document.getElementsByTagName( selector );
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return (context || rootjQuery).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return jQuery( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.4.2",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = jQuery();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // If the DOM is already ready
+ if ( jQuery.isReady ) {
+ // Execute the function immediately
+ fn.call( document, jQuery );
+
+ // Otherwise, remember the function for later
+ } else if ( readyList ) {
+ // Add the function to the wait list
+ readyList.push( fn );
+ }
+
+ return this;
+ },
+
+ eq: function( i ) {
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, +i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || jQuery(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging object literal values or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+ var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+ : jQuery.isArray(copy) ? [] : {};
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ window.$ = _$;
+
+ if ( deep ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // Handle when the DOM is ready
+ ready: function() {
+ // Make sure that the DOM is not already loaded
+ if ( !jQuery.isReady ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 13 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If there are functions bound, to execute
+ if ( readyList ) {
+ // Execute all of them
+ var fn, i = 0;
+ while ( (fn = readyList[ i++ ]) ) {
+ fn.call( document, jQuery );
+ }
+
+ // Reset the list of functions
+ readyList = null;
+ }
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.triggerHandler ) {
+ jQuery( document ).triggerHandler( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyBound ) {
+ return;
+ }
+
+ readyBound = true;
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ return jQuery.ready();
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent("onreadystatechange", DOMContentLoaded);
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return toString.call(obj) === "[object Function]";
+ },
+
+ isArray: function( obj ) {
+ return toString.call(obj) === "[object Array]";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
+ return false;
+ }
+
+ // Not own constructor property must be Object
+ if ( obj.constructor
+ && !hasOwnProperty.call(obj, "constructor")
+ && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwnProperty.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw msg;
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
+
+ // Try to use the native JSON parser first
+ return window.JSON && window.JSON.parse ?
+ window.JSON.parse( data ) :
+ (new Function("return " + data))();
+
+ } else {
+ jQuery.error( "Invalid JSON: " + data );
+ }
+ },
+
+ noop: function() {},
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test(data) ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+
+ if ( jQuery.support.scriptEval ) {
+ script.appendChild( document.createTextNode( data ) );
+ } else {
+ script.text = data;
+ }
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction(object);
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+ }
+ }
+
+ return object;
+ },
+
+ trim: function( text ) {
+ return (text || "").replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // The extra typeof function check is to prevent crashes
+ // in Safari 2 (See: #3039)
+ if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length, j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [];
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ if ( !inv !== !callback( elems[ i ], i ) ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var ret = [], value;
+
+ // Go through the array, translating each of the items to their
+ // new value (or values).
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ proxy: function( fn, proxy, thisObject ) {
+ if ( arguments.length === 2 ) {
+ if ( typeof proxy === "string" ) {
+ thisObject = fn;
+ fn = thisObject[ proxy ];
+ proxy = undefined;
+
+ } else if ( proxy && !jQuery.isFunction( proxy ) ) {
+ thisObject = proxy;
+ proxy = undefined;
+ }
+ }
+
+ if ( !proxy && fn ) {
+ proxy = function() {
+ return fn.apply( thisObject || this, arguments );
+ };
+ }
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ if ( fn ) {
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+ }
+
+ // So proxy can be declared as an argument
+ return proxy;
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ browser: {}
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+if ( indexOf ) {
+ jQuery.inArray = function( elem, array ) {
+ return indexOf.call( array, elem );
+ };
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch( error ) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+function evalScript( i, elem ) {
+ if ( elem.src ) {
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+ } else {
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+}
+
+// Mutifunctional method to get and set values to a collection
+// The value/s can be optionally by executed if its a function
+function access( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
+}
+
+function now() {
+ return (new Date).getTime();
+}
+(function() {
+
+ jQuery.support = {};
+
+ var root = document.documentElement,
+ script = document.createElement("script"),
+ div = document.createElement("div"),
+ id = "script" + now();
+
+ div.style.display = "none";
+ div.innerHTML = "
a";
+
+ var all = div.getElementsByTagName("*"),
+ a = div.getElementsByTagName("a")[0];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return;
+ }
+
+ jQuery.support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: div.firstChild.nodeType === 3,
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText insted)
+ style: /red/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: a.getAttribute("href") === "/a",
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55$/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
+
+ parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
+
+ // Will be defined later
+ deleteExpando: true,
+ checkClone: false,
+ scriptEval: false,
+ noCloneEvent: true,
+ boxModel: null
+ };
+
+ script.type = "text/javascript";
+ try {
+ script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+ } catch(e) {}
+
+ root.insertBefore( script, root.firstChild );
+
+ // Make sure that the execution of code works by injecting a script
+ // tag with appendChild/createTextNode
+ // (IE doesn't support this, fails, and uses .text instead)
+ if ( window[ id ] ) {
+ jQuery.support.scriptEval = true;
+ delete window[ id ];
+ }
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete script.test;
+
+ } catch(e) {
+ jQuery.support.deleteExpando = false;
+ }
+
+ root.removeChild( script );
+
+ if ( div.attachEvent && div.fireEvent ) {
+ div.attachEvent("onclick", function click() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ jQuery.support.noCloneEvent = false;
+ div.detachEvent("onclick", click);
+ });
+ div.cloneNode(true).fireEvent("onclick");
+ }
+
+ div = document.createElement("div");
+ div.innerHTML = "";
+
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild( div.firstChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+ // Figure out if the W3C box model works as expected
+ // document.body must exist before we can do this
+ jQuery(function() {
+ var div = document.createElement("div");
+ div.style.width = div.style.paddingLeft = "1px";
+
+ document.body.appendChild( div );
+ jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+ document.body.removeChild( div ).style.display = 'none';
+
+ div = null;
+ });
+
+ // Technique from Juriy Zaytsev
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+ var eventSupported = function( eventName ) {
+ var el = document.createElement("div");
+ eventName = "on" + eventName;
+
+ var isSupported = (eventName in el);
+ if ( !isSupported ) {
+ el.setAttribute(eventName, "return;");
+ isSupported = typeof el[eventName] === "function";
+ }
+ el = null;
+
+ return isSupported;
+ };
+
+ jQuery.support.submitBubbles = eventSupported("submit");
+ jQuery.support.changeBubbles = eventSupported("change");
+
+ // release memory in IE
+ root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+ "for": "htmlFor",
+ "class": "className",
+ readonly: "readOnly",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ tabindex: "tabIndex",
+ usemap: "useMap",
+ frameborder: "frameBorder"
+};
+var expando = "jQuery" + now(), uuid = 0, windowData = {};
+
+jQuery.extend({
+ cache: {},
+
+ expando:expando,
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ "object": true,
+ "applet": true
+ },
+
+ data: function( elem, name, data ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ return;
+ }
+
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ], cache = jQuery.cache, thisCache;
+
+ if ( !id && typeof name === "string" && data === undefined ) {
+ return null;
+ }
+
+ // Compute a unique ID for the element
+ if ( !id ) {
+ id = ++uuid;
+ }
+
+ // Avoid generating a new cache unless none exists and we
+ // want to manipulate it.
+ if ( typeof name === "object" ) {
+ elem[ expando ] = id;
+ thisCache = cache[ id ] = jQuery.extend(true, {}, name);
+
+ } else if ( !cache[ id ] ) {
+ elem[ expando ] = id;
+ cache[ id ] = {};
+ }
+
+ thisCache = cache[ id ];
+
+ // Prevent overriding the named cache with undefined values
+ if ( data !== undefined ) {
+ thisCache[ name ] = data;
+ }
+
+ return typeof name === "string" ? thisCache[ name ] : thisCache;
+ },
+
+ removeData: function( elem, name ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ return;
+ }
+
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( thisCache ) {
+ // Remove the section of cache data
+ delete thisCache[ name ];
+
+ // If we've removed all the data, remove the element's cache
+ if ( jQuery.isEmptyObject(thisCache) ) {
+ jQuery.removeData( elem );
+ }
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ // Completely remove the data cache
+ delete cache[ id ];
+ }
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ if ( typeof key === "undefined" && this.length ) {
+ return jQuery.data( this[0] );
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+ }
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ } else {
+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
+ jQuery.data( this, key, value );
+ });
+ }
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ if ( !elem ) {
+ return;
+ }
+
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( !data ) {
+ return q || [];
+ }
+
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+ } else {
+ q.push( data );
+ }
+
+ return q;
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift("inprogress");
+ }
+
+ fn.call(elem, function() {
+ jQuery.dequeue(elem, type);
+ });
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function( i, elem ) {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function() {
+ var elem = this;
+ setTimeout(function() {
+ jQuery.dequeue( elem, type );
+ }, time );
+ });
+ },
+
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ }
+});
+var rclass = /[\n\t]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rspecialurl = /href|src|style/,
+ rtype = /(button|input)/i,
+ rfocusable = /(button|input|object|select|textarea)/i,
+ rclickable = /^(a|area)$/i,
+ rradiocheck = /radio|checkbox/;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return access( this, name, value, true, jQuery.attr );
+ },
+
+ removeAttr: function( name, fn ) {
+ return this.each(function(){
+ jQuery.attr( this, name, "" );
+ if ( this.nodeType === 1 ) {
+ this.removeAttribute( name );
+ }
+ });
+ },
+
+ addClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.addClass( value.call(this, i, self.attr("class")) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ var classNames = (value || "").split( rspace );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className ) {
+ elem.className = value;
+
+ } else {
+ var className = " " + elem.className + " ", setClass = elem.className;
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+ setClass += " " + classNames[c];
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.removeClass( value.call(this, i, self.attr("class")) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ var classNames = (value || "").split(rspace);
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ var className = (" " + elem.className + " ").replace(rclass, " ");
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[c] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value, isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className, i = 0, self = jQuery(this),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery.data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ";
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ if ( value === undefined ) {
+ var elem = this[0];
+
+ if ( elem ) {
+ if ( jQuery.nodeName( elem, "option" ) ) {
+ return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+ }
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ }
+
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+
+
+ // Everything else, we just grab the value
+ return (elem.value || "").replace(rreturn, "");
+
+ }
+
+ return undefined;
+ }
+
+ var isFunction = jQuery.isFunction(value);
+
+ return this.each(function(i) {
+ var self = jQuery(this), val = value;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call(this, i, self.val());
+ }
+
+ // Typecast each time if the value is a Function and the appended
+ // value is therefore different each time.
+ if ( typeof val === "number" ) {
+ val += "";
+ }
+
+ if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+ this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+ } else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(val);
+
+ jQuery( "option", this ).each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ this.selectedIndex = -1;
+ }
+
+ } else {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attr: function( elem, name, value, pass ) {
+ // don't set attributes on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery(elem)[name](value);
+ }
+
+ var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
+ // Whether we are setting (or getting)
+ set = value !== undefined;
+
+ // Try to normalize/fix the name
+ name = notxml && jQuery.props[ name ] || name;
+
+ // Only do all the following if this is a node (faster for style)
+ if ( elem.nodeType === 1 ) {
+ // These attributes require special treatment
+ var special = rspecialurl.test( name );
+
+ // Safari mis-reports the default selected property of an option
+ // Accessing the parent's selectedIndex property fixes it
+ if ( name === "selected" && !jQuery.support.optSelected ) {
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+
+ // If applicable, access the attribute via the DOM 0 way
+ if ( name in elem && notxml && !special ) {
+ if ( set ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ }
+
+ elem[ name ] = value;
+ }
+
+ // browsers index elements by id/name on forms, give priority to attributes.
+ if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
+ return elem.getAttributeNode( name ).nodeValue;
+ }
+
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ if ( name === "tabIndex" ) {
+ var attributeNode = elem.getAttributeNode( "tabIndex" );
+
+ return attributeNode && attributeNode.specified ?
+ attributeNode.value :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+
+ return elem[ name ];
+ }
+
+ if ( !jQuery.support.style && notxml && name === "style" ) {
+ if ( set ) {
+ elem.style.cssText = "" + value;
+ }
+
+ return elem.style.cssText;
+ }
+
+ if ( set ) {
+ // convert the value to a string (all browsers do this but IE) see #1070
+ elem.setAttribute( name, "" + value );
+ }
+
+ var attr = !jQuery.support.hrefNormalized && notxml && special ?
+ // Some attributes require a special call on IE
+ elem.getAttribute( name, 2 ) :
+ elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return attr === null ? undefined : attr;
+ }
+
+ // elem is actually elem.style ... set the style
+ // Using attr for specific style information is now deprecated. Use style instead.
+ return jQuery.style( elem, name, value );
+ }
+});
+var rnamespaces = /\.(.*)$/,
+ fcleanup = function( nm ) {
+ return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
+ return "\\" + ch;
+ });
+ };
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function( elem, types, handler, data ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // For whatever reason, IE has trouble passing the window object
+ // around, causing it to be cloned in the process
+ if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
+ elem = window;
+ }
+
+ var handleObjIn, handleObj;
+
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure
+ var elemData = jQuery.data( elem );
+
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
+ }
+
+ var events = elemData.events = elemData.events || {},
+ eventHandle = elemData.handle, eventHandle;
+
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function() {
+ // Handle the second event of a trigger and when
+ // an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ }
+
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ var type, i = 0, namespaces;
+
+ while ( (type = types[ i++ ]) ) {
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
+
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
+ }
+
+ handleObj.type = type;
+ handleObj.guid = handler.guid;
+
+ // Get the current list of functions bound to this event
+ var handlers = events[ type ],
+ special = jQuery.event.special[ type ] || {};
+
+ // Init the event handler queue
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers.push( handleObj );
+
+ // Keep track of which events have been used, for global triggering
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, pos ) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ elemData = jQuery.data( elem ),
+ events = elemData && elemData.events;
+
+ if ( !elemData || !events ) {
+ return;
+ }
+
+ // types is actually an event object here
+ if ( types && types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Unbind all events for the element
+ if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+ types = types || "";
+
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types );
+ }
+
+ return;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ while ( (type = types[ i++ ]) ) {
+ origType = type;
+ handleObj = null;
+ all = type.indexOf(".") < 0;
+ namespaces = [];
+
+ if ( !all ) {
+ // Namespaced event handlers
+ namespaces = type.split(".");
+ type = namespaces.shift();
+
+ namespace = new RegExp("(^|\\.)" +
+ jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
+ }
+
+ eventType = events[ type ];
+
+ if ( !eventType ) {
+ continue;
+ }
+
+ if ( !handler ) {
+ for ( var j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ jQuery.event.remove( elem, origType, handleObj.handler, j );
+ eventType.splice( j--, 1 );
+ }
+ }
+
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+
+ for ( var j = pos || 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( handler.guid === handleObj.guid ) {
+ // remove the given handler for the given type
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ if ( pos == null ) {
+ eventType.splice( j--, 1 );
+ }
+
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+
+ if ( pos != null ) {
+ break;
+ }
+ }
+ }
+
+ // remove generic event handler if no more handlers exist
+ if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ removeEvent( elem, type, elemData.handle );
+ }
+
+ ret = null;
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ var handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ delete elemData.events;
+ delete elemData.handle;
+
+ if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem );
+ }
+ }
+ },
+
+ // bubbling is internal
+ trigger: function( event, data, elem /*, bubbling */ ) {
+ // Event object or event type
+ var type = event.type || event,
+ bubbling = arguments[3];
+
+ if ( !bubbling ) {
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[expando] ? event :
+ // Object literal
+ jQuery.extend( jQuery.Event(type), event ) :
+ // Just the event type (string)
+ jQuery.Event(type);
+
+ if ( type.indexOf("!") >= 0 ) {
+ event.type = type = type.slice(0, -1);
+ event.exclusive = true;
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // Don't bubble custom events when global (to avoid too much overhead)
+ event.stopPropagation();
+
+ // Only trigger if we've ever bound an event for it
+ if ( jQuery.event.global[ type ] ) {
+ jQuery.each( jQuery.cache, function() {
+ if ( this.events && this.events[type] ) {
+ jQuery.event.trigger( event, data, this.handle.elem );
+ }
+ });
+ }
+ }
+
+ // Handle triggering a single element
+
+ // don't do events on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
+
+ // Clean up in case it is reused
+ event.result = undefined;
+ event.target = elem;
+
+ // Clone the incoming data, if any
+ data = jQuery.makeArray( data );
+ data.unshift( event );
+ }
+
+ event.currentTarget = elem;
+
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = jQuery.data( elem, "handle" );
+ if ( handle ) {
+ handle.apply( elem, data );
+ }
+
+ var parent = elem.parentNode || elem.ownerDocument;
+
+ // Trigger an inline bound script
+ try {
+ if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+ if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+ event.result = false;
+ }
+ }
+
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (e) {}
+
+ if ( !event.isPropagationStopped() && parent ) {
+ jQuery.event.trigger( event, data, parent, true );
+
+ } else if ( !event.isDefaultPrevented() ) {
+ var target = event.target, old,
+ isClick = jQuery.nodeName(target, "a") && type === "click",
+ special = jQuery.event.special[ type ] || {};
+
+ if ( (!special._default || special._default.call( elem, event ) === false) &&
+ !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+
+ try {
+ if ( target[ type ] ) {
+ // Make sure that we don't accidentally re-trigger the onFOO events
+ old = target[ "on" + type ];
+
+ if ( old ) {
+ target[ "on" + type ] = null;
+ }
+
+ jQuery.event.triggered = true;
+ target[ type ]();
+ }
+
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (e) {}
+
+ if ( old ) {
+ target[ "on" + type ] = old;
+ }
+
+ jQuery.event.triggered = false;
+ }
+ }
+ },
+
+ handle: function( event ) {
+ var all, handlers, namespaces, namespace, events;
+
+ event = arguments[0] = jQuery.event.fix( event || window.event );
+ event.currentTarget = this;
+
+ // Namespaced event handlers
+ all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+ if ( !all ) {
+ namespaces = event.type.split(".");
+ event.type = namespaces.shift();
+ namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ var events = jQuery.data(this, "events"), handlers = events[ event.type ];
+
+ if ( events && handlers ) {
+ // Clone the handlers to prevent manipulation
+ handlers = handlers.slice(0);
+
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // Filter the functions by class
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, arguments );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+ fix: function( event ) {
+ if ( event[ expando ] ) {
+ return event;
+ }
+
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = jQuery.Event( originalEvent );
+
+ for ( var i = this.props.length, prop; i; ) {
+ prop = this.props[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary
+ if ( !event.target ) {
+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+ }
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement ) {
+ event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+ }
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var doc = document.documentElement, body = document.body;
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
+ event.which = event.charCode || event.keyCode;
+ }
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button !== undefined ) {
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ }
+
+ return event;
+ },
+
+ // Deprecated, use jQuery.guid instead
+ guid: 1E8,
+
+ // Deprecated, use jQuery.proxy instead
+ proxy: jQuery.proxy,
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady,
+ teardown: jQuery.noop
+ },
+
+ live: {
+ add: function( handleObj ) {
+ jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) );
+ },
+
+ remove: function( handleObj ) {
+ var remove = true,
+ type = handleObj.origType.replace(rnamespaces, "");
+
+ jQuery.each( jQuery.data(this, "events").live || [], function() {
+ if ( type === this.origType.replace(rnamespaces, "") ) {
+ remove = false;
+ return false;
+ }
+ });
+
+ if ( remove ) {
+ jQuery.event.remove( this, handleObj.origType, liveHandler );
+ }
+ }
+
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( this.setInterval ) {
+ this.onbeforeunload = eventHandle;
+ }
+
+ return false;
+ },
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ }
+};
+
+var removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ elem.removeEventListener( type, handle, false );
+ } :
+ function( elem, type, handle ) {
+ elem.detachEvent( "on" + type, handle );
+ };
+
+jQuery.Event = function( src ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !this.preventDefault ) {
+ return new jQuery.Event( src );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // timeStamp is buggy for some events on Firefox(#3843)
+ // So we won't rely on the native value
+ this.timeStamp = now();
+
+ // Mark it as fixed
+ this[ expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+ }
+ // otherwise set the returnValue property of the original event to false (IE)
+ e.returnValue = false;
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+
+ // Firefox sometimes assigns relatedTarget a XUL element
+ // which we cannot access the parentNode property of
+ try {
+ // Traverse up the tree
+ while ( parent && parent !== this ) {
+ parent = parent.parentNode;
+ }
+
+ if ( parent !== this ) {
+ // set the correct event type
+ event.type = event.data;
+
+ // handle event if we actually just moused on to a non sub-element
+ jQuery.event.handle.apply( this, arguments );
+ }
+
+ // assuming we've left the element since we most likely mousedover a xul element
+ } catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+ event.type = event.data;
+ jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ setup: function( data ) {
+ jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+ },
+ teardown: function( data ) {
+ jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+ }
+ };
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function( data, namespaces ) {
+ if ( this.nodeName.toLowerCase() !== "form" ) {
+ jQuery.event.add(this, "click.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+ return trigger( "submit", this, arguments );
+ }
+ });
+
+ jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+ return trigger( "submit", this, arguments );
+ }
+ });
+
+ } else {
+ return false;
+ }
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialSubmit" );
+ }
+ };
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+ var formElems = /textarea|input|select/i,
+
+ changeFilters,
+
+ getVal = function( elem ) {
+ var type = elem.type, val = elem.value;
+
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
+
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
+
+ } else if ( elem.nodeName.toLowerCase() === "select" ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
+
+ testChange = function testChange( e ) {
+ var elem = e.target, data, val;
+
+ if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
+ return;
+ }
+
+ data = jQuery.data( elem, "_change_data" );
+ val = getVal(elem);
+
+ // the current data will be also retrieved by beforeactivate
+ if ( e.type !== "focusout" || elem.type !== "radio" ) {
+ jQuery.data( elem, "_change_data", val );
+ }
+
+ if ( data === undefined || val === data ) {
+ return;
+ }
+
+ if ( data != null || val ) {
+ e.type = "change";
+ return jQuery.event.trigger( e, arguments[1], elem );
+ }
+ };
+
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
+
+ click: function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+ return testChange.call( this, e );
+ }
+ },
+
+ // Change has to be called before submit
+ // Keydown will be called before keypress, which is used in submit-event delegation
+ keydown: function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+ (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+ type === "select-multiple" ) {
+ return testChange.call( this, e );
+ }
+ },
+
+ // Beforeactivate happens also before the previous element is blurred
+ // with this event you can't trigger a change event, but you can store
+ // information/focus[in] is not needed anymore
+ beforeactivate: function( e ) {
+ var elem = e.target;
+ jQuery.data( elem, "_change_data", getVal(elem) );
+ }
+ },
+
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
+
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+ }
+
+ return formElems.test( this.nodeName );
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
+
+ return formElems.test( this.nodeName );
+ }
+ };
+
+ changeFilters = jQuery.event.special.change.filters;
+}
+
+function trigger( type, elem, args ) {
+ args[0].type = type;
+ return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ this.addEventListener( orig, handler, true );
+ },
+ teardown: function() {
+ this.removeEventListener( orig, handler, true );
+ }
+ };
+
+ function handler( e ) {
+ e = jQuery.event.fix( e );
+ e.type = fix;
+ return jQuery.event.handle.call( this, e );
+ }
+ });
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+ jQuery.fn[ name ] = function( type, data, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" ) {
+ for ( var key in type ) {
+ this[ name ](key, data, type[key], fn);
+ }
+ return this;
+ }
+
+ if ( jQuery.isFunction( data ) ) {
+ fn = data;
+ data = undefined;
+ }
+
+ var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ }) : fn;
+
+ if ( type === "unload" && name !== "one" ) {
+ this.one( type, data, fn );
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.add( this[i], type, handler, data );
+ }
+ }
+
+ return this;
+ };
+});
+
+jQuery.fn.extend({
+ unbind: function( type, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" && !type.preventDefault ) {
+ for ( var key in type ) {
+ this.unbind(key, type[key]);
+ }
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
+ }
+
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.live( types, data, fn, selector );
+ },
+
+ undelegate: function( selector, types, fn ) {
+ if ( arguments.length === 0 ) {
+ return this.unbind( "live" );
+
+ } else {
+ return this.die( types, null, fn, selector );
+ }
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ var event = jQuery.Event( type );
+ event.preventDefault();
+ event.stopPropagation();
+ jQuery.event.trigger( event, data, this[0] );
+ return event.result;
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments, i = 1;
+
+ // link all the functions, so any of them can unbind this click handler
+ while ( i < args.length ) {
+ jQuery.proxy( fn, args[ i++ ] );
+ }
+
+ return this.click( jQuery.proxy( fn, function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ }));
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+ jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+ var type, i = 0, match, namespaces, preType,
+ selector = origSelector || this.selector,
+ context = origSelector ? this : jQuery( this.context );
+
+ if ( jQuery.isFunction( data ) ) {
+ fn = data;
+ data = undefined;
+ }
+
+ types = (types || "").split(" ");
+
+ while ( (type = types[ i++ ]) != null ) {
+ match = rnamespaces.exec( type );
+ namespaces = "";
+
+ if ( match ) {
+ namespaces = match[0];
+ type = type.replace( rnamespaces, "" );
+ }
+
+ if ( type === "hover" ) {
+ types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+ continue;
+ }
+
+ preType = type;
+
+ if ( type === "focus" || type === "blur" ) {
+ types.push( liveMap[ type ] + namespaces );
+ type = type + namespaces;
+
+ } else {
+ type = (liveMap[ type ] || type) + namespaces;
+ }
+
+ if ( name === "live" ) {
+ // bind live handler
+ context.each(function(){
+ jQuery.event.add( this, liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ });
+
+ } else {
+ // unbind live handler
+ context.unbind( liveConvert( type, selector ), fn );
+ }
+ }
+
+ return this;
+ }
+});
+
+function liveHandler( event ) {
+ var stop, elems = [], selectors = [], args = arguments,
+ related, match, handleObj, elem, j, i, l, data,
+ events = jQuery.data( this, "events" );
+
+ // Make sure we avoid non-left-click bubbling in Firefox (#3861)
+ if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+ return;
+ }
+
+ event.liveFired = this;
+
+ var live = events.live.slice(0);
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+ selectors.push( handleObj.selector );
+
+ } else {
+ live.splice( j--, 1 );
+ }
+ }
+
+ match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+ for ( i = 0, l = match.length; i < l; i++ ) {
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( match[i].selector === handleObj.selector ) {
+ elem = match[i].elem;
+ related = null;
+
+ // Those two events require additional checking
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+ }
+
+ if ( !related || related !== elem ) {
+ elems.push({ elem: elem, handleObj: handleObj });
+ }
+ }
+ }
+ }
+
+ for ( i = 0, l = elems.length; i < l; i++ ) {
+ match = elems[i];
+ event.currentTarget = match.elem;
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
+ stop = false;
+ break;
+ }
+ }
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( fn ) {
+ return fn ? this.bind( name, fn ) : this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+});
+
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+ window.attachEvent("onunload", function() {
+ for ( var id in jQuery.cache ) {
+ if ( jQuery.cache[ id ].handle ) {
+ // Try/Catch is to handle iframes being unloaded, see #4280
+ try {
+ jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+ } catch(e) {}
+ }
+ }
+ });
+}
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+ results = results || [];
+ var origContext = context = context || document;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
+ soFar = selector;
+
+ // Reset the position of the chunker regexp (start from head)
+ while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set );
+ }
+ }
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+ var ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+ }
+
+ if ( context ) {
+ var ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray(set);
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ var cur = parts.pop(), pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+ } else if ( context && context.nodeType === 1 ) {
+ for ( var i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+ } else {
+ for ( var i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function(expr, set){
+ return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+ var set, match;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var type = Expr.order[i], match;
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace(/\\/g, "");
+ set = Expr.find[ type ]( match, context, isXML );
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = context.getElementsByTagName("*");
+ }
+
+ return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+ var old = expr, result = [], curLoop = set, match, anyFound,
+ isXMLFilter = set && set[0] && isXML(set[0]);
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var filter = Expr.filter[ type ], found, item, left = match[1];
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+ } else {
+ curLoop[i] = false;
+ }
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function(elem){
+ return elem.getAttribute("href");
+ }
+ },
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !/\W/.test(part),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+ ">": function(checkSet, part){
+ var isPartStr = typeof part === "string";
+
+ if ( isPartStr && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+ } else {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+ "": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ var nodeCheck = part = part.toLowerCase();
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+ },
+ "~": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ var nodeCheck = part = part.toLowerCase();
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+ }
+ },
+ find: {
+ ID: function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? [m] : [];
+ }
+ },
+ NAME: function(match, context){
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [], results = context.getElementsByName(match[1]);
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+ TAG: function(match, context){
+ return context.getElementsByTagName(match[1]);
+ }
+ },
+ preFilter: {
+ CLASS: function(match, curLoop, inplace, result, not, isXML){
+ match = " " + match[1].replace(/\\/g, "") + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+ ID: function(match){
+ return match[1].replace(/\\/g, "");
+ },
+ TAG: function(match, curLoop){
+ return match[1].toLowerCase();
+ },
+ CHILD: function(match){
+ if ( match[1] === "nth" ) {
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+ ATTR: function(match, curLoop, inplace, result, not, isXML){
+ var name = match[1].replace(/\\/g, "");
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+ PSEUDO: function(match, curLoop, inplace, result, not){
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+ return false;
+ }
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+ POS: function(match){
+ match.unshift( true );
+ return match;
+ }
+ },
+ filters: {
+ enabled: function(elem){
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+ disabled: function(elem){
+ return elem.disabled === true;
+ },
+ checked: function(elem){
+ return elem.checked === true;
+ },
+ selected: function(elem){
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ elem.parentNode.selectedIndex;
+ return elem.selected === true;
+ },
+ parent: function(elem){
+ return !!elem.firstChild;
+ },
+ empty: function(elem){
+ return !elem.firstChild;
+ },
+ has: function(elem, i, match){
+ return !!Sizzle( match[3], elem ).length;
+ },
+ header: function(elem){
+ return /h\d/i.test( elem.nodeName );
+ },
+ text: function(elem){
+ return "text" === elem.type;
+ },
+ radio: function(elem){
+ return "radio" === elem.type;
+ },
+ checkbox: function(elem){
+ return "checkbox" === elem.type;
+ },
+ file: function(elem){
+ return "file" === elem.type;
+ },
+ password: function(elem){
+ return "password" === elem.type;
+ },
+ submit: function(elem){
+ return "submit" === elem.type;
+ },
+ image: function(elem){
+ return "image" === elem.type;
+ },
+ reset: function(elem){
+ return "reset" === elem.type;
+ },
+ button: function(elem){
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+ },
+ input: function(elem){
+ return /input|select|textarea|button/i.test(elem.nodeName);
+ }
+ },
+ setFilters: {
+ first: function(elem, i){
+ return i === 0;
+ },
+ last: function(elem, i, match, array){
+ return i === array.length - 1;
+ },
+ even: function(elem, i){
+ return i % 2 === 0;
+ },
+ odd: function(elem, i){
+ return i % 2 === 1;
+ },
+ lt: function(elem, i, match){
+ return i < match[3] - 0;
+ },
+ gt: function(elem, i, match){
+ return i > match[3] - 0;
+ },
+ nth: function(elem, i, match){
+ return match[3] - 0 === i;
+ },
+ eq: function(elem, i, match){
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function(elem, match, i, array){
+ var name = match[1], filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var i = 0, l = not.length; i < l; i++ ) {
+ if ( not[i] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+ } else {
+ Sizzle.error( "Syntax error, unrecognized expression: " + name );
+ }
+ },
+ CHILD: function(elem, match){
+ var type = match[1], node = elem;
+ switch (type) {
+ case 'only':
+ case 'first':
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ if ( type === "first" ) {
+ return true;
+ }
+ node = elem;
+ case 'last':
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ return true;
+ case 'nth':
+ var first = match[2], last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+ if ( first === 0 ) {
+ return diff === 0;
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+ ID: function(elem, match){
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+ TAG: function(elem, match){
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+ },
+ CLASS: function(elem, match){
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+ ATTR: function(elem, match){
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+ POS: function(elem, match, i, array){
+ var name = match[2], filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
+ return "\\" + (num - 0 + 1);
+ }));
+}
+
+var makeArray = function(array, results) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+ makeArray = function(array, results) {
+ var ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var i = 0, l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+ } else {
+ for ( var i = 0; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( "sourceIndex" in document.documentElement ) {
+ sortOrder = function( a, b ) {
+ if ( !a.sourceIndex || !b.sourceIndex ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.sourceIndex ? -1 : 1;
+ }
+
+ var ret = a.sourceIndex - b.sourceIndex;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( document.createRange ) {
+ sortOrder = function( a, b ) {
+ if ( !a.ownerDocument || !b.ownerDocument ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.ownerDocument ? -1 : 1;
+ }
+
+ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+ aRange.setStart(a, 0);
+ aRange.setEnd(a, 0);
+ bRange.setStart(b, 0);
+ bRange.setEnd(b, 0);
+ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+function getText( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date).getTime();
+ form.innerHTML = "";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ var root = document.documentElement;
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+ }
+ };
+
+ Expr.filter.ID = function(elem, match){
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+ root = form = null; // release memory in IE
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function(match, context){
+ var results = context.getElementsByTagName(match[1]);
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "";
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+ Expr.attrHandle.href = function(elem){
+ return elem.getAttribute("href", 2);
+ };
+ }
+
+ div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle, div = document.createElement("div");
+ div.innerHTML = "";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function(query, context, extra, seed){
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(e){}
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ div = null; // release memory in IE
+ })();
+}
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function(match, context, isXML) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+var contains = document.compareDocumentPosition ? function(a, b){
+ return !!(a.compareDocumentPosition(b) & 16);
+} : function(a, b){
+ return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+ var tmpSet = [], later = "", match,
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = getText;
+jQuery.isXMLDoc = isXML;
+jQuery.contains = contains;
+
+return;
+
+window.Sizzle = Sizzle;
+
+})();
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ slice = Array.prototype.slice;
+
+// Implement the identical functionality for filter and not
+var winnow = function( elements, qualifier, keep ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return (elem === qualifier) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+ });
+};
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var ret = this.pushStack( "", "find", selector ), length = 0;
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( var n = length; n < ret.length; n++ ) {
+ for ( var r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && jQuery.filter( selector, this ).length > 0;
+ },
+
+ closest: function( selectors, context ) {
+ if ( jQuery.isArray( selectors ) ) {
+ var ret = [], cur = this[0], match, matches = {}, selector;
+
+ if ( cur && selectors.length ) {
+ for ( var i = 0, l = selectors.length; i < l; i++ ) {
+ selector = selectors[i];
+
+ if ( !matches[selector] ) {
+ matches[selector] = jQuery.expr.match.POS.test( selector ) ?
+ jQuery( selector, context || this.context ) :
+ selector;
+ }
+ }
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( selector in matches ) {
+ match = matches[selector];
+
+ if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+ ret.push({ selector: selector, elem: cur });
+ delete matches[selector];
+ }
+ }
+ cur = cur.parentNode;
+ }
+ }
+
+ return ret;
+ }
+
+ var pos = jQuery.expr.match.POS.test( selectors ) ?
+ jQuery( selectors, context || this.context ) : null;
+
+ return this.map(function( i, cur ) {
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
+ return cur;
+ }
+ cur = cur.parentNode;
+ }
+ return null;
+ });
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ if ( !elem || typeof elem === "string" ) {
+ return jQuery.inArray( this[0],
+ // If it receives a string, the selector is used
+ // If it receives nothing, the siblings are used
+ elem ? jQuery( elem ) : this.parent().children() );
+ }
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context || this.context ) :
+ jQuery.makeArray( selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, slice.call(arguments).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [], cur = elem[dir];
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
+ rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
+ rtagName = /<([\w:]+)/,
+ rtbody = /" + tag + ">";
+ },
+ wrapMap = {
+ option: [ 1, "" ],
+ legend: [ 1, "" ],
+ thead: [ 1, "", "
" ],
+ tr: [ 2, "", "
" ],
+ td: [ 3, "", "
" ],
+ col: [ 2, "", "
" ],
+ area: [ 1, "" ],
+ _default: [ 0, "", "" ]
+ };
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize and
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SyntaxHighlighter Highlight Lines Test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+