changeset 3:3f6b44aa6b35 judyates

[svn r4] added ability to buy stuff, from a Prints page, but it doesn't work well with the css, and it also has not been fitted into the perl make system.
author rlm
date Mon, 22 Feb 2010 08:02:39 -0500
parents 670229c4eb4b
children 1bd8daf2684d
files Contact.html Meet the Artist1.html Meet the Artist2.html artwork_descriptions/18_dogs_on_a_30_inch_by_40_inch_canvas_1998.html artwork_descriptions/English_Setter_on_granite_1999.html artwork_descriptions/German_Shorthair_Hunting_Dog_on_light_brown_marble_2007.html artwork_descriptions/african_lion_head_on_speckled_granite_1999.html artwork_descriptions/african_lion_head_profile_on_multicolored_granite_1999.html artwork_descriptions/bald_eagle_head_on_labrador_blue_pearl_granite_1999.html artwork_descriptions/bald_eagle_head_profile_on_black_grante_with_small_gold_specks_1998.html artwork_descriptions/bald_eagle_head_with_open_beak_on_triangular_purple_marble_1999.html artwork_descriptions/beautiful_black_lab_head_with_pheasant_in_mouth_on_pure_white_marble_1999.html artwork_descriptions/big_buck_on_speckled_beige_granite_1999.html artwork_descriptions/big_mouth_bass_hooked_on_black_lure_on_green-grey_granite_1999.html artwork_descriptions/big_mouth_bass_hooked_on_lure_on_green_pearlecent_granite_2007.html artwork_descriptions/big_mouth_bass_struggling_with_hook_in_mouth_on_green_marble_1999.html artwork_descriptions/black_bear_three_quarter_view_on_beige_and_ochre_marble_1999.html artwork_descriptions/black_lab_flushing_single_quail_on_light_brown_marble_1999.html artwork_descriptions/black_lab_head_profile_with_pheasant_on_white_marble_1998.html artwork_descriptions/black_lab_head_study_with_grouse_in_mouth_on_white_marble_1999.html artwork_descriptions/black_lab_head_with_pintail_on_white_marble_1998.html artwork_descriptions/black_lab_profile_carrying_mallard_through_water_on_green-grey_granite_1999.html artwork_descriptions/black_lab_retrieving_mallard_on_greenish_grey_granite_1999.html artwork_descriptions/black_lab_retrieving_pheasant_on_light_brown_marble_1999.html artwork_descriptions/black_lab_sitting_with_canvasback_duck_in_mouth_on_grey_marble_with_rust_inclusions_2000.html artwork_descriptions/black_lab_sitting_with_pheasant_in_mouth_on_beige_and_ochre_byzantine_1999.html artwork_descriptions/black_lab_three_quarter_profile_on_beige_marble_1998.html artwork_descriptions/black_lab_walking_through_water_with_duck_in_mouth_on_grey_granite_1999.html artwork_descriptions/black_lab_with_head_cocked_and_flying_mallards_in_background_on_grey_byzantine_1999.html artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_ochre_marble_1999.html artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_pink_marble_1999.html artwork_descriptions/black_poodle_naned_chanel_with_stuffed_animal_on_light_brown_marble_1999.html artwork_descriptions/blue_jay_on_twig_on_grey_white_and_ochre_marble_1999.html artwork_descriptions/bluebird_perched_on_white_and_grey_rectangular_marble_1999_.html artwork_descriptions/bluejay_perched_on_light_green_marble_1999.html artwork_descriptions/bobwhite_chirping_on_brown_and_snow_marble_1999.html artwork_descriptions/bobwhite_quail_covey_flying_on_ochre_and_beige_travertine_date_unavailable.html artwork_descriptions/bobwhite_quail_on_marble_with_rust_inclusions_1999.html artwork_descriptions/britney_spaniel_head_study_with_tongue_on_purple_and_green_marble_1999.html artwork_descriptions/britney_spaniel_with_grouse_on_beige_and_ochre_marble_1998.html artwork_descriptions/brown_trout_swimming_on_ochre_granite_with_multicolored_specks_2007.html artwork_descriptions/brown_trout_with_fly_on_green_granite_1999.html artwork_descriptions/bugling_bull_elk_head_and_chest_on_white_marble_1999.html artwork_descriptions/bugling_bull_moose_head_on_beige_marble_1999.html artwork_descriptions/bugling_elk_fromt_pose_on_black_granite_1998.html artwork_descriptions/bugling_elk_full_profile_on_white_and_grey_marble_1999.html artwork_descriptions/bugling_elk_head_only_on_forest_green_marble_1999.html artwork_descriptions/bull_elk_laying_in_the_snow_on_white_and_grey_marble_1999.html artwork_descriptions/canadian_goose_flying_over_water_on_downstroke_on_wavelike_green_and_grey_granite_1999.html artwork_descriptions/canadian_goose_preparing_to_land_on_grey_granite_1999.html artwork_descriptions/cardinal_perched_on_branch_on_black_marble_with_white_veins_1999.html artwork_descriptions/charging_african_elephant_on_beige_travertine_marble_1999.html artwork_descriptions/chocolate_lab_head_and_chest_on_pink_granite_1999.html artwork_descriptions/chocolate_lab_three_quarter_profile_on_beige_marble_1998.html artwork_descriptions/coyote_standing_in_snow_on_white_and_beige_marble_1999.html artwork_descriptions/dog_named_Ulysse_on_beige_travertine_2000.html artwork_descriptions/dolphin_peeking_out_of_ocean_on_green_marble_1999.html artwork_descriptions/eagle_head_on_black_granite_1999.html artwork_descriptions/eagle_hunting_for_prey_on_beige_white_marble_2000.html artwork_descriptions/female_cardinal_in_snow_on_black_grey_and_white_marble_1999.html artwork_descriptions/flying_mallard_on_blue_white_and_black_granite_1999.html artwork_descriptions/flying_mallard_on_highly_crystalized_black_and_grey_stone_1999_.html artwork_descriptions/flying_pheasant_on_downstroke_on_yellow_ochre_1999.html artwork_descriptions/flying_pheasant_on_travertine_1999.html artwork_descriptions/flying_pheasant_with_cattails_on_beige_marble_1998.html artwork_descriptions/flying_wild_turkey_on_downstroke_on_ochre_marble_1999.html artwork_descriptions/flying_wood_duck_on_purple_marble_1999.html artwork_descriptions/friendly_grizzly_bear_head_and_chest_on_black_and_gold_granite_1999.html artwork_descriptions/full_body_buffalo_grey_marble_1999.html artwork_descriptions/full_body_buffalo_profile_on_white_black_and_pink_granite_1999.html artwork_descriptions/full_body_white_tailed_deer_walking_through_water_on_green_marble_1999.html artwork_descriptions/full_flying_pheasant_on_ochre_and_black_granite_2002.html artwork_descriptions/full_mallard_swmming_straight_at_you_on_grey_granite_1999.html artwork_descriptions/full_pose_pointer_on_ochre_marble_1998.html artwork_descriptions/full_pose_pointer_on_ochre_marble_2_1998.html artwork_descriptions/full_standing_pheasant_profile_on_grey_and_white_marble_1998.html artwork_descriptions/full_standing_pheasant_profile_on_ochre_marble_1998.html artwork_descriptions/gallery_display--custom_order_for_one_person.html artwork_descriptions/gallery_display_2--custom_order_for_one_person.html artwork_descriptions/gallery_display_3--custom_order_for_one_person.html artwork_descriptions/gallery_display_4--custom_order_for_one_person.html artwork_descriptions/german_shepard_named_Geta_head_and_chest_on_white_granite_2002.html artwork_descriptions/german_shorthair_full_profile_with_quail_on_brown_and_white_marble_1999.html artwork_descriptions/gobbling_wild_turkey_on_rust_colored_marble_1999.html artwork_descriptions/golden_eagle_head_with_beak_open_blue_granite_1999.html artwork_descriptions/golden_retreiver_puppy_head_and_fromt_paws_laying_on_brown_marble_1996.html artwork_descriptions/golden_retriever_head_and_chest_with_mallard_in_mouth_on_paisley_granite_1998.html artwork_descriptions/golden_retriever_head_on_light_brown_travertine_1999.html artwork_descriptions/golden_retriever_head_with_pintail_on_triangular_speckled_granite_1999.html artwork_descriptions/golden_retriever_puppy_head_and_chest_on_grey_granite_1999.html artwork_descriptions/golden_retriever_resting_on_beige_byzantine_1999.html artwork_descriptions/grey_timberwolf_head_study_on_black_granite_with_gold_specks_1998.html artwork_descriptions/grizly_bear_head_snaging_salmon_out_of_water_on_green_marble_1999.html artwork_descriptions/grizzly_bear_baring_teeth_on_yellow_ochre_1999.html artwork_descriptions/growling_grizzly_bear_on_black_and_white_marble_with_rust_inclusions_2007.html artwork_descriptions/half_body_mule_deer_buck_on_light_brown_marble_1999.html artwork_descriptions/happy_golden_retriever_head_study_on_black_granite_1999.html artwork_descriptions/hooked_big_mouth_bass_on_green_and_yellow_marble_1999.html artwork_descriptions/horn_toad_lizard_on_light_brown_and_white_marble_1999.html artwork_descriptions/horned_owl_head_and_chest_on_beige_and_ochre_travertine_1999.html artwork_descriptions/howling_timberwolf_on_grey_marble_1999.html artwork_descriptions/hummingbird_sipping_from_yellow_columbine_on_beige_marble_1999.html artwork_descriptions/hunting_1.html artwork_descriptions/hunting_10.html artwork_descriptions/hunting_11.html artwork_descriptions/hunting_12.html artwork_descriptions/hunting_2.html artwork_descriptions/hunting_3.html artwork_descriptions/hunting_4.html artwork_descriptions/hunting_5.html artwork_descriptions/hunting_6.html artwork_descriptions/hunting_7.html artwork_descriptions/hunting_8.html artwork_descriptions/hunting_9.html artwork_descriptions/irish_setter_laying_on_grass_on_brown_and_white_marble_1999.html artwork_descriptions/jumping_big_mouth_bass_with_yellow_lure_on_green_marble_1999.html artwork_descriptions/killer_whale_head_emerging_from_ocean_on_greenish_grey_granite_1999.html artwork_descriptions/king_charles_spaniel_named_sophie_on_beige_marble_2002.html artwork_descriptions/loon_on_water_on_green_marble_1999.html artwork_descriptions/majestic_caribou_head_and_chest_on_ochre_marble_1999.html artwork_descriptions/male_cardinal_perched_on_purple_and_green_marble_1999.html artwork_descriptions/mallard_coming_in_to_land_on_pink_and_grey_marble_1999.html artwork_descriptions/mallard_landing_on_water_on_bluish-grey_granite_1999.html artwork_descriptions/mallard_male_and_female_pair_swimming_on_blue_granite_1999.html artwork_descriptions/maltese_named_happy_3_ages_on_black_granite_unsigned_undated.html artwork_descriptions/mockingbird_perched_on_a_branch_on_dark_and_light_green_marble_1999.html artwork_descriptions/monster_whitetail_buck_and_doe_standing_in_water_on_azul_do_mar_1999.html artwork_descriptions/mountain_goat_full_body_on_white_marble_1999.html artwork_descriptions/mountain_goat_head_profile_on_white_marble_1999.html artwork_descriptions/mountain_lion_sitting_on_black_and_white_marble_1999.html artwork_descriptions/mourning_dove_dodging_bullet_on_grey_and_rust_marble_1999.html artwork_descriptions/mourning_dove_sitting_on_branch_on_purple_marble_1999.html artwork_descriptions/non-typical_mule_deer_buck_walking_on_light_brown_marble_2007.html artwork_descriptions/non-typical_trophy_whitetail_buck_on_light_brown_marble_1999.html artwork_descriptions/orca_whale_jumping_out_of_water_on_blue_granite_1999.html artwork_descriptions/orca_whale_preforming_bellyflop_on_green_marble_1999.html artwork_descriptions/pair_of_flying_mallards_on_green_and_white_marble_1999.html artwork_descriptions/peregrine_falcon_head_and_chest_on_triangular_white_marble_1999.html artwork_descriptions/pheasant_flying_on_light_multicolored_marble_2003.html artwork_descriptions/pheasant_head_profile_on_black_granite_2007.html artwork_descriptions/pheasant_head_profile_on_ochre_marble_1999.html artwork_descriptions/pink_rose_and_rosebud_on_black_granite_with_gold_specks_1999.html artwork_descriptions/pintail_duck_in_flight_on_azul_do_mar_granite_1999.html artwork_descriptions/pintail_pair--drake_and_hen_flying_on_pink-grey_paisley_1999.html artwork_descriptions/pintail_sitting_on_water_with_cat-tail_reeds_on_bluish-grey_granite_1999.html artwork_descriptions/pointer_head_with_quail_on_beige_travertine_marble_1998.html artwork_descriptions/poodle_named_Scarlett_on_black_granite_2002.html artwork_descriptions/prong-horn_male_antelope_head_study_on_pink_granite_1999.html artwork_descriptions/red_fox_on_travertine_marble_1999.html artwork_descriptions/red_fox_standing_in_snow_on_right_triangular_white_marble_with_grey_vein_1997.html artwork_descriptions/red_fox_walking_straight_at_you_on_snow_white_marble_1999.html artwork_descriptions/red_head_pair_drake_and_hen_flying_on_beige_and_grey_travertine_1999.html artwork_descriptions/red_texas_longhorn_head_on_triangular_speckled_green_and_beige_granite_undated.html artwork_descriptions/red_texas_longhorn_on_white_triangular_marble_1999.html artwork_descriptions/redbird_on_branch_on_green_and_white_marble_1999.html artwork_descriptions/redhead_drake_duck_head_study_on_greenish_grey_granite_1999.html artwork_descriptions/roadrunner_on_ochre_1999.html artwork_descriptions/roan_texas_longhorn_steer_on_triangular_green_and_white_marble_with_silver_specks_2007.html artwork_descriptions/ruby_throated_sipping_from_cluster_of_pink_flowers_on_flesh_tone_marble_1999.html artwork_descriptions/rufus_hummingbird_sipping_nectar_from_red_flowers_on__brown_and_white_marble_1999.html artwork_descriptions/san_photo001.html artwork_descriptions/san_photo002.html artwork_descriptions/san_photo003.html artwork_descriptions/san_photo004.html artwork_descriptions/san_photo005.html artwork_descriptions/san_photo006.html artwork_descriptions/san_photo007.html artwork_descriptions/san_photo008.html artwork_descriptions/san_photo009.html artwork_descriptions/san_photo010.html artwork_descriptions/san_photo011.html artwork_descriptions/san_photo012.html artwork_descriptions/san_photo013.html artwork_descriptions/san_photo014.html artwork_descriptions/san_photo015.html artwork_descriptions/san_photo016.html artwork_descriptions/san_photo017.html artwork_descriptions/san_photo018.html artwork_descriptions/san_photo019.html artwork_descriptions/san_photo020.html artwork_descriptions/san_photo021.html artwork_descriptions/san_photo022.html artwork_descriptions/san_photo023.html artwork_descriptions/san_photo024.html artwork_descriptions/san_photo025.html artwork_descriptions/san_photo026.html artwork_descriptions/san_photo027.html artwork_descriptions/san_photo028.html artwork_descriptions/san_photo029.html artwork_descriptions/san_photo030.html artwork_descriptions/san_photo031.html artwork_descriptions/san_photo032.html artwork_descriptions/san_photo033.html artwork_descriptions/san_photo034.html artwork_descriptions/san_photo035.html artwork_descriptions/san_photo036.html artwork_descriptions/san_photo037.html artwork_descriptions/san_photo038.html artwork_descriptions/san_photo039.html artwork_descriptions/san_photo040.html artwork_descriptions/san_photo041.html artwork_descriptions/san_photo042.html artwork_descriptions/san_photo045.html artwork_descriptions/san_photo046.html artwork_descriptions/san_photo047.html artwork_descriptions/san_photo048.html artwork_descriptions/san_photo049.html artwork_descriptions/san_photo050.html artwork_descriptions/san_photo051.html artwork_descriptions/san_photo052.html artwork_descriptions/san_photo053.html artwork_descriptions/san_photo054.html artwork_descriptions/san_photo055.html artwork_descriptions/san_photo056.html artwork_descriptions/san_photo057.html artwork_descriptions/san_photo058.html artwork_descriptions/san_photo0x2.html artwork_descriptions/san_photo0xx.html artwork_descriptions/set_of_three_owls_1995.html artwork_descriptions/shitzu_head_study_named_Abbe_on_black_granite_2002_.html artwork_descriptions/siberian_tiger_head_and_chest_on_multicolored_ochre_granite_1999.html artwork_descriptions/sitting_black_lab_drake_mallard_in_mouth_with_reeds_on_white_marble_1999.html artwork_descriptions/smiling_bald_eagle_head_on_black_granite_1999_.html artwork_descriptions/soaring_bald_eagle_on_flesh_colored_marble_1999.html artwork_descriptions/soaring_bald_marble_on_beige_marble_1999.html artwork_descriptions/stamp001.html artwork_descriptions/stamp003.html artwork_descriptions/stamp005.html artwork_descriptions/stamp007.html artwork_descriptions/stamp009.html artwork_descriptions/stamp011.html artwork_descriptions/strutting_wild_turkey_on_brown_and_white_marble_1999.html artwork_descriptions/strutting_wild_turkey_profile_on_brown_and_white_marble_1998.html artwork_descriptions/swimming_bottlenose_dolphin_on_green_and_white_marble_1999.html artwork_descriptions/texas_longhorn_steer_on_triangular_grey_marble_1998.html artwork_descriptions/three_strolling_african_elephants_on_beige_and_copper_marble_1999.html artwork_descriptions/timberwolf_full_profile_on_green_and_purple_marble_with_high_crystalization_1999.html artwork_descriptions/timberwolf_standing_on_ledge_on_purple_green_black_and_white_marble_(very_large)_1997.html artwork_descriptions/timberwolf_straight-on_head_on_triangular_grey_and_pink_marble_1999.html artwork_descriptions/tom_turkey_head_profile_on_green_marble_1998.html artwork_descriptions/trophy_bull_elk_rear_view_on_white_and_grey_marble_1999.html artwork_descriptions/unfriendly_grizzly_bear_head_and_chest_on_beige_marble_1998.html artwork_descriptions/upper_body_of_moose_with_foliage_on_azul_do_mar_1999.html artwork_descriptions/white_ram_head_on_triangular_grey_marble_1999.html artwork_descriptions/white_tail_buck_head_and_chest_on_yellow_travertine_1999.html artwork_descriptions/white_tail_buck_with_head_turned_three_quarter_pose_on_light_brown_marble_2007.html artwork_descriptions/white_tail_deer_upper_body_on_light_brown_marble_1999.html artwork_descriptions/white_tail_trophy_deer_head_and_chest_on_beige_and_ochre_travertine_1999.html artwork_descriptions/whitetail_buck_head_and_chest_on_brown_and_rust_marble_1999_.html artwork_descriptions/whitetail_buck_head_and_chest_on_ochre_1998.html artwork_descriptions/whitetail_deer_standing_in_water_on_green_marble_1998.html artwork_descriptions/whitetail_deer_upper_body_on_beige_marble_1998.html artwork_descriptions/wild_turkey_three-quarter_pose_gobbing_on_ochre_and_dark_brown_granite_1998.html artwork_descriptions/wood_duck_drake_head_and_chest_on_water_on_greenish_grey_marble_1999.html artwork_descriptions/wood_duck_full_standing_on_white_circular_marble_1999.html artwork_descriptions/wood_duck_sitting_on_water_with_reflection_on_green_and_yellow_marble_1999.html artwork_descriptions/wood_duck_standing_in_snow_on_light_brown_marble_1999.html artwork_descriptions/wood_duck_standing_on_branch_in_water_on_green_and_white_marble_2007.html artwork_descriptions/yello_lab_with_canvasback_in_mouth_on_beige_marble_1999.html artwork_descriptions/yellow_lab_head_and_chest_on_brown_pentagonal_marble_1999.html artwork_descriptions/yellow_lab_head_on_grey_and_pink_marble_1999.html artwork_descriptions/yellow_lab_head_with_bobwhite_quail_on_black_granite_1999.html artwork_descriptions/yellow_lab_resting_on_grass_on_black_granite_with_copper_sparkles_1999.html artwork_descriptions/yellow_lab_retrieving_mallard_on_greenish_grey_marble_1999.html artwork_descriptions/yellow_lab_sitting_in_reeds_with_mallard_on_brown_and_white_marble_1999.html artwork_descriptions/yellow_lab_with_quail_on_brown_marble_with_golden_lighting_1999.html artwork_descriptions/young_chocolate_lab_head_with_mallard_on_flesh_colored_marble_1998.html e2gallerypro/Installation.txt e2gallerypro/LICENSE.txt e2gallerypro/design/e2gallerypro/backthumbs.png e2gallerypro/design/e2gallerypro/bg.png e2gallerypro/design/e2gallerypro/bubble.png e2gallerypro/design/e2gallerypro/buybutton.png e2gallerypro/design/e2gallerypro/buynow_bottom.png e2gallerypro/design/e2gallerypro/buynow_middle.png e2gallerypro/design/e2gallerypro/buynow_top.png e2gallerypro/design/e2gallerypro/closebtn.png e2gallerypro/design/e2gallerypro/controls_bg.png e2gallerypro/design/e2gallerypro/design.css e2gallerypro/design/e2gallerypro/flash.png e2gallerypro/design/e2gallerypro/gallery_bg.png e2gallerypro/design/e2gallerypro/gallery_view.png e2gallerypro/design/e2gallerypro/images_bg.png e2gallerypro/design/e2gallerypro/infobox.png e2gallerypro/design/e2gallerypro/left_arrow.png e2gallerypro/design/e2gallerypro/loading.png e2gallerypro/design/e2gallerypro/loading_bar.gif e2gallerypro/design/e2gallerypro/loading_hill.gif e2gallerypro/design/e2gallerypro/message-popup.png e2gallerypro/design/e2gallerypro/minibottom.png e2gallerypro/design/e2gallerypro/minimiddle.png e2gallerypro/design/e2gallerypro/minitop.png e2gallerypro/design/e2gallerypro/morethumbs.png e2gallerypro/design/e2gallerypro/next_prev_bg.png e2gallerypro/design/e2gallerypro/pause.png e2gallerypro/design/e2gallerypro/play.png e2gallerypro/design/e2gallerypro/pop_arrow.png e2gallerypro/design/e2gallerypro/previous.png e2gallerypro/design/e2gallerypro/purchase_btn.png e2gallerypro/design/e2gallerypro/quicktime.png e2gallerypro/design/e2gallerypro/right_arrow.png e2gallerypro/design/e2gallerypro/thumbbox.png e2gallerypro/design/e2gallerypro/thumbsbg.png e2gallerypro/design/e2gallerypro/thumbwrap.gif e2gallerypro/design/e2gallerypro/thumbwrap.png e2gallerypro/design/e2gallerypro/tip-bottom.png e2gallerypro/design/e2gallerypro/tip-middle.png e2gallerypro/design/e2gallerypro/tip-top.png e2gallerypro/design/e2gallerypro/tip_bottom.png e2gallerypro/design/e2gallerypro/tip_middle.png e2gallerypro/design/e2gallerypro/tip_top.png e2gallerypro/design/e2simple/backthumbs.png e2gallerypro/design/e2simple/bubble.png e2gallerypro/design/e2simple/buybutton.png e2gallerypro/design/e2simple/buynow_bottom.png e2gallerypro/design/e2simple/buynow_middle.png e2gallerypro/design/e2simple/buynow_top.png e2gallerypro/design/e2simple/closebtn.png e2gallerypro/design/e2simple/design.css e2gallerypro/design/e2simple/flash.png e2gallerypro/design/e2simple/gallery_bg.png e2gallerypro/design/e2simple/gallery_view.png e2gallerypro/design/e2simple/images_bg.png e2gallerypro/design/e2simple/infobox.png e2gallerypro/design/e2simple/loading.png e2gallerypro/design/e2simple/loading_hill.gif e2gallerypro/design/e2simple/message-popup.png e2gallerypro/design/e2simple/minibottom.png e2gallerypro/design/e2simple/minimiddle.png e2gallerypro/design/e2simple/minitop.png e2gallerypro/design/e2simple/morethumbs.png e2gallerypro/design/e2simple/next.png e2gallerypro/design/e2simple/pause.png e2gallerypro/design/e2simple/play.png e2gallerypro/design/e2simple/prev.png e2gallerypro/design/e2simple/previous.png e2gallerypro/design/e2simple/purchase_btn.png e2gallerypro/design/e2simple/quicktime.png e2gallerypro/design/e2simple/thumbbox.png e2gallerypro/design/e2simple/thumbwrap.png e2gallerypro/design/e2simple/tip-bottom.png e2gallerypro/design/e2simple/tip-middle.png e2gallerypro/design/e2simple/tip-top.png e2gallerypro/design/e2simple/tip_bottom.png e2gallerypro/design/e2simple/tip_middle.png e2gallerypro/design/e2simple/tip_top.png e2gallerypro/e2config.php e2gallerypro/e2gallery.xml e2gallerypro/e2upload/Assets/Icons/7z.png e2gallerypro/e2upload/Assets/Icons/ace.png e2gallerypro/e2upload/Assets/Icons/as.png e2gallerypro/e2upload/Assets/Icons/bat.png e2gallerypro/e2upload/Assets/Icons/bmp.png e2gallerypro/e2upload/Assets/Icons/cmd.png e2gallerypro/e2upload/Assets/Icons/default.png e2gallerypro/e2upload/Assets/Icons/dir.png e2gallerypro/e2upload/Assets/Icons/dir_up.png e2gallerypro/e2upload/Assets/Icons/doc.png e2gallerypro/e2upload/Assets/Icons/docx.png e2gallerypro/e2upload/Assets/Icons/exe.png e2gallerypro/e2upload/Assets/Icons/flv.png e2gallerypro/e2upload/Assets/Icons/gif.png e2gallerypro/e2upload/Assets/Icons/gz.png e2gallerypro/e2upload/Assets/Icons/html.png e2gallerypro/e2upload/Assets/Icons/ini.png e2gallerypro/e2upload/Assets/Icons/iso.png e2gallerypro/e2upload/Assets/Icons/jpeg.png e2gallerypro/e2upload/Assets/Icons/jpg.png e2gallerypro/e2upload/Assets/Icons/js.png e2gallerypro/e2upload/Assets/Icons/lnk.png e2gallerypro/e2upload/Assets/Icons/mp3.png e2gallerypro/e2upload/Assets/Icons/odp.png e2gallerypro/e2upload/Assets/Icons/ods.png e2gallerypro/e2upload/Assets/Icons/odt.png e2gallerypro/e2upload/Assets/Icons/pdf.png e2gallerypro/e2upload/Assets/Icons/php.png e2gallerypro/e2upload/Assets/Icons/png.png e2gallerypro/e2upload/Assets/Icons/ppt.png e2gallerypro/e2upload/Assets/Icons/rar.png e2gallerypro/e2upload/Assets/Icons/rb.png e2gallerypro/e2upload/Assets/Icons/sql.png e2gallerypro/e2upload/Assets/Icons/swf.png e2gallerypro/e2upload/Assets/Icons/tar.png e2gallerypro/e2upload/Assets/Icons/wmv.png e2gallerypro/e2upload/Assets/Icons/xls.png e2gallerypro/e2upload/Assets/Icons/xlsx.png e2gallerypro/e2upload/Assets/Icons/zip.png e2gallerypro/e2upload/Assets/Swiff.Uploader.swf e2gallerypro/e2upload/Assets/add.png e2gallerypro/e2upload/Assets/bar.gif e2gallerypro/e2upload/Assets/button.png e2gallerypro/e2upload/Assets/button_disabled.png e2gallerypro/e2upload/Assets/cancel.png e2gallerypro/e2upload/Assets/checkbox.png e2gallerypro/e2upload/Assets/destroy.png e2gallerypro/e2upload/Assets/dewplayer.swf e2gallerypro/e2upload/Assets/dialog.png e2gallerypro/e2upload/Assets/disk.png e2gallerypro/e2upload/Assets/filelist.png e2gallerypro/e2upload/Assets/filelist_selected.png e2gallerypro/e2upload/Assets/loader.gif e2gallerypro/e2upload/Assets/menu.png e2gallerypro/e2upload/Assets/progress.gif e2gallerypro/e2upload/Assets/rename.png e2gallerypro/e2upload/Backend/Assets/getid3/getid3.php e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.gzip.php e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.szip.php e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.tar.php e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.zip.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.asf.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.flv.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.mpeg.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.nsv.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.quicktime.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.real.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.riff.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.swf.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.aac_adif.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.aac_adts.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.ac3.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.au.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.avr.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.bonk.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.dts.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.la.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.lpac.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.midi.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.monkey.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mp3.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mpc.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mpc_old.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.optimfrog.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.rkau.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.shorten.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.tta.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.voc.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.vqf.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.wavpack.php e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.xiph.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.bmp.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.gif.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.jpeg.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.pcd.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.png.php e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.tiff.php e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.data_hash.php e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.iconv_replacement.php e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.image_size.php e2gallerypro/e2upload/Backend/Assets/getid3/module.misc.iso.php e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.apetag.php e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.id3v1.php e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.id3v2.php e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.lyrics3.php e2gallerypro/e2upload/Backend/FileManager.php e2gallerypro/e2upload/Backend/Image.php e2gallerypro/e2upload/Backend/MimeTypes.ini e2gallerypro/e2upload/Backend/Upload.php e2gallerypro/e2upload/Compressed/filemanager-yui-all.js e2gallerypro/e2upload/Compressed/filemanager-yui-basic.js e2gallerypro/e2upload/Css/Additions.css e2gallerypro/e2upload/Css/FileManager.css e2gallerypro/e2upload/Galleries/gallery1/DSC_0670.jpg e2gallerypro/e2upload/Galleries/gallery1/DSC_2051.jpg e2gallerypro/e2upload/Galleries/gallery1/DSC_2343.jpg e2gallerypro/e2upload/Galleries/gallery1/DSC_7850.jpg e2gallerypro/e2upload/Galleries/gallery1/E29_2000.jpg e2gallerypro/e2upload/Galleries/gallery1/large/DSC_0670.jpg e2gallerypro/e2upload/Galleries/gallery1/large/DSC_2051.jpg e2gallerypro/e2upload/Galleries/gallery1/large/DSC_2343.jpg e2gallerypro/e2upload/Galleries/gallery1/large/DSC_7850.jpg e2gallerypro/e2upload/Galleries/gallery1/large/E29_2000.jpg e2gallerypro/e2upload/Galleries/gallery1/mainthumb.jpg e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_0670.jpg e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_2051.jpg e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_2343.jpg e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_7850.jpg e2gallerypro/e2upload/Galleries/gallery1/thumbs/E29_2000.jpg e2gallerypro/e2upload/Galleries/gallery2/mainthumb.jpg e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Buffalo_Verde.jpg e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Longhorn_Sunset.jpg e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Turquoise_Sky.jpg e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Wood_Duck_Pair.jpg e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Buffalo_Verde.jpg e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Longhorn_Sunset.jpg e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Turquoise_Sky.jpg e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Wood_Duck_Pair.jpg e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Buffalo_Verde.jpg e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Longhorn_Sunset.jpg e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Turquoise_Sky.jpg e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Wood_Duck_Pair.jpg e2gallerypro/e2upload/Source/Additions.js e2gallerypro/e2upload/Source/FileManager.js e2gallerypro/e2upload/Source/Language/Language.cs.js e2gallerypro/e2upload/Source/Language/Language.da.js e2gallerypro/e2upload/Source/Language/Language.de.js e2gallerypro/e2upload/Source/Language/Language.en.js e2gallerypro/e2upload/Source/Language/Language.es.js e2gallerypro/e2upload/Source/Language/Language.fi.js e2gallerypro/e2upload/Source/Language/Language.fr.js e2gallerypro/e2upload/Source/Language/Language.se.js e2gallerypro/e2upload/Source/Uploader.js e2gallerypro/e2upload/Source/Uploader/Fx.ProgressBar.js e2gallerypro/e2upload/Source/Uploader/Swiff.Uploader.js e2gallerypro/e2upload/images/adminheader.png e2gallerypro/e2upload/images/bodybg.png e2gallerypro/e2upload/images/loginheader.png e2gallerypro/e2upload/images/tab_bg.png e2gallerypro/e2upload/index.php e2gallerypro/e2upload/js/mootools-core.js e2gallerypro/e2upload/js/mootools-more.js e2gallerypro/e2upload/manager.php e2gallerypro/e2upload/managerxml.php e2gallerypro/e2upload/outputxml.php e2gallerypro/e2upload/password_protect.php e2gallerypro/e2upload/xml/e2gallery.xml e2gallerypro/e2upload/xml/e2galleryproXMLsample.xml e2gallerypro/e2upload/xml/judyYates.xml e2gallerypro/index.php e2gallerypro/js/e2gallerypro.js e2gallerypro/js/mootools-1.2-core.js e2gallerypro/js/mootools-1.2-more.js e2gallerypro/js/setupvars.js e2gallerypro/nonverblaster/NonverBlaster.swf e2gallerypro/nonverblaster/Readme_NonverBlaster.txt e2gallerypro/nonverblaster/swfobject.js e2gallerypro/photoshop/action/E2 Gallery Pro Export.atn e2gallerypro/php/parsexml.php e2gallerypro/php/xmlparse.v4.php e2gallerypro/php/xmlparse.v5.php feedback.html firetest.css gallery1.html gallery10.html gallery11.html gallery12.html gallery13.html gallery14.html gallery15.html gallery16.html gallery17.html gallery18.html gallery19.html gallery2.html gallery20.html gallery21.html gallery3.html gallery4.html gallery5.html gallery6.html gallery7.html gallery8.html gallery9.html hto.html index.html judyYates.xml log/error_log.log menu.html menu2.html perl/meet_the_artist.pl perl/menu.pl pets1.html pets2.html pets3.html pricing.html prints/large/Judy_Yates_Buffalo_Verde.jpg prints/large/Judy_Yates_Longhorn_Sunset.jpg prints/large/Judy_Yates_Turquoise_Sky.jpg prints/large/Judy_Yates_Wood_Duck_Pair.jpg prints/normal/Judy_Yates_Buffalo_Verde.jpg prints/normal/Judy_Yates_Longhorn_Sunset.jpg prints/normal/Judy_Yates_Turquoise_Sky.jpg prints/normal/Judy_Yates_Wood_Duck_Pair.jpg prints/source/Judy_Yates_Bufallo_Mesa.jpg prints/source/Judy_Yates_Buffalo_Verde.jpg prints/source/Judy_Yates_Duck_Stamp.jpg prints/source/Judy_Yates_Longhorn_Sunset.jpg prints/source/Judy_Yates_Longhorn_Sunset_Scale.jpg prints/source/Judy_Yates_Mass_Deer_Stamp.jpg prints/source/Judy_Yates_Turquoise_Sky.jpg prints/source/Judy_Yates_Wood_Duck_Pair.jpg prints/thumbs/Judy_Yates_Buffalo_Verde.jpg prints/thumbs/Judy_Yates_Longhorn_Sunset.jpg prints/thumbs/Judy_Yates_Turquoise_Sky.jpg prints/thumbs/Judy_Yates_Wood_Duck_Pair.jpg recent_sales.html
diffstat 585 files changed, 33236 insertions(+), 681 deletions(-) [+]
line wrap: on
line diff
     1.1 --- a/Contact.html	Fri Feb 19 11:14:52 2010 -0500
     1.2 +++ b/Contact.html	Mon Feb 22 08:02:39 2010 -0500
     1.3 @@ -17,14 +17,14 @@
     1.4  <ul class = "menu">
     1.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
     1.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
     1.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
     1.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
     1.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    1.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    1.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    1.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    1.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    1.14  
    1.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    1.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    1.17  </ul>
    1.18  </div>
    1.19  
    1.20 @@ -40,14 +40,14 @@
    1.21  <ul class = "menu">
    1.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
    1.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
    1.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
    1.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
    1.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    1.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    1.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    1.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    1.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    1.31  
    1.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    1.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    1.34  </ul>
    1.35  </div>
    1.36  
     2.1 --- a/Meet the Artist1.html	Fri Feb 19 11:14:52 2010 -0500
     2.2 +++ b/Meet the Artist1.html	Mon Feb 22 08:02:39 2010 -0500
     2.3 @@ -13,14 +13,14 @@
     2.4  <ul class = "menu">
     2.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
     2.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
     2.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
     2.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
     2.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    2.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    2.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    2.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    2.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    2.14  
    2.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    2.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    2.17  </ul>
    2.18  </div>
    2.19  
    2.20 @@ -61,14 +61,14 @@
    2.21  <ul class = "menu">
    2.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
    2.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
    2.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
    2.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
    2.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    2.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    2.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    2.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    2.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    2.31  
    2.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    2.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    2.34  </ul>
    2.35  </div>
    2.36  
     3.1 --- a/Meet the Artist2.html	Fri Feb 19 11:14:52 2010 -0500
     3.2 +++ b/Meet the Artist2.html	Mon Feb 22 08:02:39 2010 -0500
     3.3 @@ -13,14 +13,14 @@
     3.4  <ul class = "menu">
     3.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
     3.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
     3.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
     3.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
     3.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    3.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    3.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    3.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    3.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    3.14  
    3.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    3.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    3.17  </ul>
    3.18  </div>
    3.19  
    3.20 @@ -54,14 +54,14 @@
    3.21  <ul class = "menu">
    3.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
    3.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
    3.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
    3.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
    3.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
    3.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
    3.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
    3.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
    3.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    3.31  
    3.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
    3.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
    3.34  </ul>
    3.35  </div>
    3.36  
     4.1 --- a/artwork_descriptions/18_dogs_on_a_30_inch_by_40_inch_canvas_1998.html	Fri Feb 19 11:14:52 2010 -0500
     4.2 +++ b/artwork_descriptions/18_dogs_on_a_30_inch_by_40_inch_canvas_1998.html	Mon Feb 22 08:02:39 2010 -0500
     4.3 @@ -13,13 +13,14 @@
     4.4  <ul class = "menu">
     4.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     4.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     4.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     4.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     4.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    4.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    4.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    4.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    4.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    4.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    4.15 +
    4.16  </ul>
    4.17  </div>
    4.18  
    4.19 @@ -72,13 +73,14 @@
    4.20  <ul class = "menu">
    4.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    4.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    4.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    4.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    4.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    4.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    4.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    4.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    4.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    4.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    4.31 +
    4.32  </ul>
    4.33  </div>
    4.34  
     5.1 --- a/artwork_descriptions/English_Setter_on_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
     5.2 +++ b/artwork_descriptions/English_Setter_on_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
     5.3 @@ -13,13 +13,14 @@
     5.4  <ul class = "menu">
     5.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     5.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     5.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     5.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     5.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    5.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    5.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    5.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    5.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    5.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    5.15 +
    5.16  </ul>
    5.17  </div>
    5.18  
    5.19 @@ -72,13 +73,14 @@
    5.20  <ul class = "menu">
    5.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    5.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    5.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    5.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    5.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    5.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    5.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    5.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    5.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    5.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    5.31 +
    5.32  </ul>
    5.33  </div>
    5.34  
     6.1 --- a/artwork_descriptions/German_Shorthair_Hunting_Dog_on_light_brown_marble_2007.html	Fri Feb 19 11:14:52 2010 -0500
     6.2 +++ b/artwork_descriptions/German_Shorthair_Hunting_Dog_on_light_brown_marble_2007.html	Mon Feb 22 08:02:39 2010 -0500
     6.3 @@ -13,13 +13,14 @@
     6.4  <ul class = "menu">
     6.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     6.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     6.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     6.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     6.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    6.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    6.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    6.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    6.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    6.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    6.15 +
    6.16  </ul>
    6.17  </div>
    6.18  
    6.19 @@ -77,13 +78,14 @@
    6.20  <ul class = "menu">
    6.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    6.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    6.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    6.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    6.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    6.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    6.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    6.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    6.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    6.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    6.31 +
    6.32  </ul>
    6.33  </div>
    6.34  
     7.1 --- a/artwork_descriptions/african_lion_head_on_speckled_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
     7.2 +++ b/artwork_descriptions/african_lion_head_on_speckled_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
     7.3 @@ -13,13 +13,14 @@
     7.4  <ul class = "menu">
     7.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     7.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     7.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     7.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     7.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    7.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    7.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    7.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    7.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    7.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    7.15 +
    7.16  </ul>
    7.17  </div>
    7.18  
    7.19 @@ -72,13 +73,14 @@
    7.20  <ul class = "menu">
    7.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    7.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    7.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    7.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    7.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    7.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    7.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    7.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    7.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    7.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    7.31 +
    7.32  </ul>
    7.33  </div>
    7.34  
     8.1 --- a/artwork_descriptions/african_lion_head_profile_on_multicolored_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
     8.2 +++ b/artwork_descriptions/african_lion_head_profile_on_multicolored_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
     8.3 @@ -13,13 +13,14 @@
     8.4  <ul class = "menu">
     8.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     8.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     8.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     8.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     8.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    8.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    8.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    8.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    8.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    8.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    8.15 +
    8.16  </ul>
    8.17  </div>
    8.18  
    8.19 @@ -72,13 +73,14 @@
    8.20  <ul class = "menu">
    8.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    8.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    8.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    8.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    8.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    8.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    8.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    8.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    8.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    8.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    8.31 +
    8.32  </ul>
    8.33  </div>
    8.34  
     9.1 --- a/artwork_descriptions/bald_eagle_head_on_labrador_blue_pearl_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
     9.2 +++ b/artwork_descriptions/bald_eagle_head_on_labrador_blue_pearl_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
     9.3 @@ -13,13 +13,14 @@
     9.4  <ul class = "menu">
     9.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
     9.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
     9.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
     9.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
     9.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    9.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    9.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    9.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    9.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    9.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    9.15 +
    9.16  </ul>
    9.17  </div>
    9.18  
    9.19 @@ -72,13 +73,14 @@
    9.20  <ul class = "menu">
    9.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    9.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    9.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    9.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    9.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
    9.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
    9.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
    9.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
    9.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
    9.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
    9.31 +
    9.32  </ul>
    9.33  </div>
    9.34  
    10.1 --- a/artwork_descriptions/bald_eagle_head_profile_on_black_grante_with_small_gold_specks_1998.html	Fri Feb 19 11:14:52 2010 -0500
    10.2 +++ b/artwork_descriptions/bald_eagle_head_profile_on_black_grante_with_small_gold_specks_1998.html	Mon Feb 22 08:02:39 2010 -0500
    10.3 @@ -13,13 +13,14 @@
    10.4  <ul class = "menu">
    10.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    10.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    10.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    10.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    10.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   10.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   10.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   10.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   10.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   10.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   10.15 +
   10.16  </ul>
   10.17  </div>
   10.18  
   10.19 @@ -72,13 +73,14 @@
   10.20  <ul class = "menu">
   10.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   10.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   10.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   10.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   10.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   10.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   10.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   10.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   10.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   10.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   10.31 +
   10.32  </ul>
   10.33  </div>
   10.34  
    11.1 --- a/artwork_descriptions/bald_eagle_head_with_open_beak_on_triangular_purple_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    11.2 +++ b/artwork_descriptions/bald_eagle_head_with_open_beak_on_triangular_purple_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    11.3 @@ -13,13 +13,14 @@
    11.4  <ul class = "menu">
    11.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    11.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    11.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    11.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    11.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   11.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   11.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   11.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   11.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   11.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   11.15 +
   11.16  </ul>
   11.17  </div>
   11.18  
   11.19 @@ -72,13 +73,14 @@
   11.20  <ul class = "menu">
   11.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   11.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   11.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   11.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   11.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   11.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   11.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   11.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   11.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   11.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   11.31 +
   11.32  </ul>
   11.33  </div>
   11.34  
    12.1 --- a/artwork_descriptions/beautiful_black_lab_head_with_pheasant_in_mouth_on_pure_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    12.2 +++ b/artwork_descriptions/beautiful_black_lab_head_with_pheasant_in_mouth_on_pure_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    12.3 @@ -13,13 +13,14 @@
    12.4  <ul class = "menu">
    12.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    12.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    12.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    12.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    12.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   12.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   12.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   12.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   12.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   12.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   12.15 +
   12.16  </ul>
   12.17  </div>
   12.18  
   12.19 @@ -72,13 +73,14 @@
   12.20  <ul class = "menu">
   12.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   12.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   12.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   12.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   12.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   12.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   12.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   12.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   12.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   12.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   12.31 +
   12.32  </ul>
   12.33  </div>
   12.34  
    13.1 --- a/artwork_descriptions/big_buck_on_speckled_beige_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    13.2 +++ b/artwork_descriptions/big_buck_on_speckled_beige_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    13.3 @@ -13,13 +13,14 @@
    13.4  <ul class = "menu">
    13.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    13.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    13.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    13.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    13.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   13.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   13.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   13.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   13.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   13.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   13.15 +
   13.16  </ul>
   13.17  </div>
   13.18  
   13.19 @@ -72,13 +73,14 @@
   13.20  <ul class = "menu">
   13.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   13.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   13.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   13.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   13.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   13.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   13.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   13.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   13.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   13.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   13.31 +
   13.32  </ul>
   13.33  </div>
   13.34  
    14.1 --- a/artwork_descriptions/big_mouth_bass_hooked_on_black_lure_on_green-grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    14.2 +++ b/artwork_descriptions/big_mouth_bass_hooked_on_black_lure_on_green-grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    14.3 @@ -13,13 +13,14 @@
    14.4  <ul class = "menu">
    14.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    14.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    14.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    14.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    14.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   14.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   14.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   14.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   14.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   14.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   14.15 +
   14.16  </ul>
   14.17  </div>
   14.18  
   14.19 @@ -72,13 +73,14 @@
   14.20  <ul class = "menu">
   14.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   14.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   14.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   14.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   14.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   14.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   14.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   14.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   14.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   14.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   14.31 +
   14.32  </ul>
   14.33  </div>
   14.34  
    15.1 --- a/artwork_descriptions/big_mouth_bass_hooked_on_lure_on_green_pearlecent_granite_2007.html	Fri Feb 19 11:14:52 2010 -0500
    15.2 +++ b/artwork_descriptions/big_mouth_bass_hooked_on_lure_on_green_pearlecent_granite_2007.html	Mon Feb 22 08:02:39 2010 -0500
    15.3 @@ -13,13 +13,14 @@
    15.4  <ul class = "menu">
    15.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    15.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    15.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    15.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    15.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   15.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   15.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   15.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   15.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   15.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   15.15 +
   15.16  </ul>
   15.17  </div>
   15.18  
   15.19 @@ -79,13 +80,14 @@
   15.20  <ul class = "menu">
   15.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   15.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   15.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   15.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   15.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   15.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   15.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   15.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   15.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   15.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   15.31 +
   15.32  </ul>
   15.33  </div>
   15.34  
    16.1 --- a/artwork_descriptions/big_mouth_bass_struggling_with_hook_in_mouth_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    16.2 +++ b/artwork_descriptions/big_mouth_bass_struggling_with_hook_in_mouth_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    16.3 @@ -13,13 +13,14 @@
    16.4  <ul class = "menu">
    16.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    16.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    16.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    16.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    16.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   16.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   16.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   16.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   16.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   16.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   16.15 +
   16.16  </ul>
   16.17  </div>
   16.18  
   16.19 @@ -72,13 +73,14 @@
   16.20  <ul class = "menu">
   16.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   16.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   16.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   16.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   16.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   16.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   16.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   16.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   16.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   16.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   16.31 +
   16.32  </ul>
   16.33  </div>
   16.34  
    17.1 --- a/artwork_descriptions/black_bear_three_quarter_view_on_beige_and_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    17.2 +++ b/artwork_descriptions/black_bear_three_quarter_view_on_beige_and_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    17.3 @@ -13,13 +13,14 @@
    17.4  <ul class = "menu">
    17.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    17.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    17.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    17.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    17.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   17.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   17.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   17.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   17.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   17.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   17.15 +
   17.16  </ul>
   17.17  </div>
   17.18  
   17.19 @@ -72,13 +73,14 @@
   17.20  <ul class = "menu">
   17.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   17.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   17.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   17.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   17.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   17.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   17.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   17.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   17.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   17.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   17.31 +
   17.32  </ul>
   17.33  </div>
   17.34  
    18.1 --- a/artwork_descriptions/black_lab_flushing_single_quail_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    18.2 +++ b/artwork_descriptions/black_lab_flushing_single_quail_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    18.3 @@ -13,13 +13,14 @@
    18.4  <ul class = "menu">
    18.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    18.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    18.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    18.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    18.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   18.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   18.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   18.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   18.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   18.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   18.15 +
   18.16  </ul>
   18.17  </div>
   18.18  
   18.19 @@ -72,13 +73,14 @@
   18.20  <ul class = "menu">
   18.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   18.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   18.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   18.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   18.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   18.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   18.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   18.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   18.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   18.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   18.31 +
   18.32  </ul>
   18.33  </div>
   18.34  
    19.1 --- a/artwork_descriptions/black_lab_head_profile_with_pheasant_on_white_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    19.2 +++ b/artwork_descriptions/black_lab_head_profile_with_pheasant_on_white_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    19.3 @@ -13,13 +13,14 @@
    19.4  <ul class = "menu">
    19.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    19.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    19.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    19.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    19.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   19.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   19.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   19.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   19.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   19.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   19.15 +
   19.16  </ul>
   19.17  </div>
   19.18  
   19.19 @@ -72,13 +73,14 @@
   19.20  <ul class = "menu">
   19.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   19.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   19.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   19.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   19.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   19.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   19.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   19.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   19.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   19.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   19.31 +
   19.32  </ul>
   19.33  </div>
   19.34  
    20.1 --- a/artwork_descriptions/black_lab_head_study_with_grouse_in_mouth_on_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    20.2 +++ b/artwork_descriptions/black_lab_head_study_with_grouse_in_mouth_on_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    20.3 @@ -13,13 +13,14 @@
    20.4  <ul class = "menu">
    20.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    20.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    20.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    20.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    20.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   20.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   20.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   20.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   20.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   20.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   20.15 +
   20.16  </ul>
   20.17  </div>
   20.18  
   20.19 @@ -72,13 +73,14 @@
   20.20  <ul class = "menu">
   20.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   20.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   20.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   20.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   20.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   20.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   20.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   20.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   20.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   20.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   20.31 +
   20.32  </ul>
   20.33  </div>
   20.34  
    21.1 --- a/artwork_descriptions/black_lab_head_with_pintail_on_white_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    21.2 +++ b/artwork_descriptions/black_lab_head_with_pintail_on_white_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    21.3 @@ -13,13 +13,14 @@
    21.4  <ul class = "menu">
    21.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    21.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    21.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    21.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    21.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   21.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   21.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   21.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   21.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   21.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   21.15 +
   21.16  </ul>
   21.17  </div>
   21.18  
   21.19 @@ -72,13 +73,14 @@
   21.20  <ul class = "menu">
   21.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   21.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   21.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   21.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   21.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   21.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   21.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   21.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   21.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   21.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   21.31 +
   21.32  </ul>
   21.33  </div>
   21.34  
    22.1 --- a/artwork_descriptions/black_lab_profile_carrying_mallard_through_water_on_green-grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    22.2 +++ b/artwork_descriptions/black_lab_profile_carrying_mallard_through_water_on_green-grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    22.3 @@ -13,13 +13,14 @@
    22.4  <ul class = "menu">
    22.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    22.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    22.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    22.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    22.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   22.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   22.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   22.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   22.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   22.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   22.15 +
   22.16  </ul>
   22.17  </div>
   22.18  
   22.19 @@ -72,13 +73,14 @@
   22.20  <ul class = "menu">
   22.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   22.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   22.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   22.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   22.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   22.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   22.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   22.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   22.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   22.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   22.31 +
   22.32  </ul>
   22.33  </div>
   22.34  
    23.1 --- a/artwork_descriptions/black_lab_retrieving_mallard_on_greenish_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    23.2 +++ b/artwork_descriptions/black_lab_retrieving_mallard_on_greenish_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    23.3 @@ -13,13 +13,14 @@
    23.4  <ul class = "menu">
    23.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    23.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    23.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    23.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    23.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   23.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   23.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   23.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   23.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   23.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   23.15 +
   23.16  </ul>
   23.17  </div>
   23.18  
   23.19 @@ -72,13 +73,14 @@
   23.20  <ul class = "menu">
   23.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   23.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   23.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   23.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   23.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   23.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   23.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   23.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   23.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   23.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   23.31 +
   23.32  </ul>
   23.33  </div>
   23.34  
    24.1 --- a/artwork_descriptions/black_lab_retrieving_pheasant_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    24.2 +++ b/artwork_descriptions/black_lab_retrieving_pheasant_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    24.3 @@ -13,13 +13,14 @@
    24.4  <ul class = "menu">
    24.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    24.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    24.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    24.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    24.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   24.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   24.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   24.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   24.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   24.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   24.15 +
   24.16  </ul>
   24.17  </div>
   24.18  
   24.19 @@ -72,13 +73,14 @@
   24.20  <ul class = "menu">
   24.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   24.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   24.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   24.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   24.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   24.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   24.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   24.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   24.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   24.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   24.31 +
   24.32  </ul>
   24.33  </div>
   24.34  
    25.1 --- a/artwork_descriptions/black_lab_sitting_with_canvasback_duck_in_mouth_on_grey_marble_with_rust_inclusions_2000.html	Fri Feb 19 11:14:52 2010 -0500
    25.2 +++ b/artwork_descriptions/black_lab_sitting_with_canvasback_duck_in_mouth_on_grey_marble_with_rust_inclusions_2000.html	Mon Feb 22 08:02:39 2010 -0500
    25.3 @@ -13,13 +13,14 @@
    25.4  <ul class = "menu">
    25.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    25.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    25.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    25.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    25.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   25.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   25.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   25.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   25.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   25.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   25.15 +
   25.16  </ul>
   25.17  </div>
   25.18  
   25.19 @@ -72,13 +73,14 @@
   25.20  <ul class = "menu">
   25.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   25.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   25.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   25.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   25.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   25.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   25.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   25.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   25.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   25.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   25.31 +
   25.32  </ul>
   25.33  </div>
   25.34  
    26.1 --- a/artwork_descriptions/black_lab_sitting_with_pheasant_in_mouth_on_beige_and_ochre_byzantine_1999.html	Fri Feb 19 11:14:52 2010 -0500
    26.2 +++ b/artwork_descriptions/black_lab_sitting_with_pheasant_in_mouth_on_beige_and_ochre_byzantine_1999.html	Mon Feb 22 08:02:39 2010 -0500
    26.3 @@ -13,13 +13,14 @@
    26.4  <ul class = "menu">
    26.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    26.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    26.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    26.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    26.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   26.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   26.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   26.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   26.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   26.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   26.15 +
   26.16  </ul>
   26.17  </div>
   26.18  
   26.19 @@ -72,13 +73,14 @@
   26.20  <ul class = "menu">
   26.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   26.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   26.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   26.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   26.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   26.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   26.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   26.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   26.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   26.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   26.31 +
   26.32  </ul>
   26.33  </div>
   26.34  
    27.1 --- a/artwork_descriptions/black_lab_three_quarter_profile_on_beige_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    27.2 +++ b/artwork_descriptions/black_lab_three_quarter_profile_on_beige_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    27.3 @@ -13,13 +13,14 @@
    27.4  <ul class = "menu">
    27.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    27.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    27.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    27.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    27.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   27.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   27.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   27.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   27.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   27.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   27.15 +
   27.16  </ul>
   27.17  </div>
   27.18  
   27.19 @@ -72,13 +73,14 @@
   27.20  <ul class = "menu">
   27.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   27.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   27.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   27.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   27.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   27.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   27.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   27.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   27.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   27.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   27.31 +
   27.32  </ul>
   27.33  </div>
   27.34  
    28.1 --- a/artwork_descriptions/black_lab_walking_through_water_with_duck_in_mouth_on_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    28.2 +++ b/artwork_descriptions/black_lab_walking_through_water_with_duck_in_mouth_on_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    28.3 @@ -13,13 +13,14 @@
    28.4  <ul class = "menu">
    28.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    28.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    28.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    28.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    28.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   28.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   28.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   28.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   28.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   28.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   28.15 +
   28.16  </ul>
   28.17  </div>
   28.18  
   28.19 @@ -72,13 +73,14 @@
   28.20  <ul class = "menu">
   28.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   28.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   28.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   28.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   28.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   28.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   28.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   28.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   28.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   28.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   28.31 +
   28.32  </ul>
   28.33  </div>
   28.34  
    29.1 --- a/artwork_descriptions/black_lab_with_head_cocked_and_flying_mallards_in_background_on_grey_byzantine_1999.html	Fri Feb 19 11:14:52 2010 -0500
    29.2 +++ b/artwork_descriptions/black_lab_with_head_cocked_and_flying_mallards_in_background_on_grey_byzantine_1999.html	Mon Feb 22 08:02:39 2010 -0500
    29.3 @@ -13,13 +13,14 @@
    29.4  <ul class = "menu">
    29.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    29.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    29.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    29.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    29.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   29.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   29.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   29.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   29.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   29.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   29.15 +
   29.16  </ul>
   29.17  </div>
   29.18  
   29.19 @@ -72,13 +73,14 @@
   29.20  <ul class = "menu">
   29.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   29.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   29.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   29.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   29.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   29.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   29.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   29.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   29.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   29.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   29.31 +
   29.32  </ul>
   29.33  </div>
   29.34  
    30.1 --- a/artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    30.2 +++ b/artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    30.3 @@ -13,13 +13,14 @@
    30.4  <ul class = "menu">
    30.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    30.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    30.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    30.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    30.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   30.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   30.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   30.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   30.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   30.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   30.15 +
   30.16  </ul>
   30.17  </div>
   30.18  
   30.19 @@ -72,13 +73,14 @@
   30.20  <ul class = "menu">
   30.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   30.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   30.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   30.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   30.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   30.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   30.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   30.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   30.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   30.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   30.31 +
   30.32  </ul>
   30.33  </div>
   30.34  
    31.1 --- a/artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_pink_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    31.2 +++ b/artwork_descriptions/black_lab_with_mallard_in_mouth_sitting_in_reeds_on_pink_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    31.3 @@ -13,13 +13,14 @@
    31.4  <ul class = "menu">
    31.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    31.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    31.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    31.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    31.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   31.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   31.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   31.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   31.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   31.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   31.15 +
   31.16  </ul>
   31.17  </div>
   31.18  
   31.19 @@ -72,13 +73,14 @@
   31.20  <ul class = "menu">
   31.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   31.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   31.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   31.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   31.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   31.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   31.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   31.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   31.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   31.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   31.31 +
   31.32  </ul>
   31.33  </div>
   31.34  
    32.1 --- a/artwork_descriptions/black_poodle_naned_chanel_with_stuffed_animal_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    32.2 +++ b/artwork_descriptions/black_poodle_naned_chanel_with_stuffed_animal_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    32.3 @@ -13,13 +13,14 @@
    32.4  <ul class = "menu">
    32.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    32.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    32.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    32.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    32.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   32.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   32.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   32.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   32.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   32.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   32.15 +
   32.16  </ul>
   32.17  </div>
   32.18  
   32.19 @@ -72,13 +73,14 @@
   32.20  <ul class = "menu">
   32.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   32.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   32.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   32.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   32.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   32.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   32.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   32.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   32.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   32.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   32.31 +
   32.32  </ul>
   32.33  </div>
   32.34  
    33.1 --- a/artwork_descriptions/blue_jay_on_twig_on_grey_white_and_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    33.2 +++ b/artwork_descriptions/blue_jay_on_twig_on_grey_white_and_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    33.3 @@ -13,13 +13,14 @@
    33.4  <ul class = "menu">
    33.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    33.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    33.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    33.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    33.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   33.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   33.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   33.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   33.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   33.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   33.15 +
   33.16  </ul>
   33.17  </div>
   33.18  
   33.19 @@ -72,13 +73,14 @@
   33.20  <ul class = "menu">
   33.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   33.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   33.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   33.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   33.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   33.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   33.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   33.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   33.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   33.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   33.31 +
   33.32  </ul>
   33.33  </div>
   33.34  
    34.1 --- a/artwork_descriptions/bluebird_perched_on_white_and_grey_rectangular_marble_1999_.html	Fri Feb 19 11:14:52 2010 -0500
    34.2 +++ b/artwork_descriptions/bluebird_perched_on_white_and_grey_rectangular_marble_1999_.html	Mon Feb 22 08:02:39 2010 -0500
    34.3 @@ -13,13 +13,14 @@
    34.4  <ul class = "menu">
    34.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    34.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    34.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    34.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    34.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   34.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   34.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   34.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   34.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   34.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   34.15 +
   34.16  </ul>
   34.17  </div>
   34.18  
   34.19 @@ -72,13 +73,14 @@
   34.20  <ul class = "menu">
   34.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   34.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   34.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   34.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   34.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   34.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   34.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   34.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   34.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   34.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   34.31 +
   34.32  </ul>
   34.33  </div>
   34.34  
    35.1 --- a/artwork_descriptions/bluejay_perched_on_light_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    35.2 +++ b/artwork_descriptions/bluejay_perched_on_light_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    35.3 @@ -13,13 +13,14 @@
    35.4  <ul class = "menu">
    35.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    35.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    35.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    35.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    35.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   35.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   35.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   35.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   35.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   35.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   35.15 +
   35.16  </ul>
   35.17  </div>
   35.18  
   35.19 @@ -72,13 +73,14 @@
   35.20  <ul class = "menu">
   35.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   35.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   35.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   35.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   35.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   35.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   35.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   35.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   35.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   35.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   35.31 +
   35.32  </ul>
   35.33  </div>
   35.34  
    36.1 --- a/artwork_descriptions/bobwhite_chirping_on_brown_and_snow_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    36.2 +++ b/artwork_descriptions/bobwhite_chirping_on_brown_and_snow_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    36.3 @@ -13,13 +13,14 @@
    36.4  <ul class = "menu">
    36.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    36.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    36.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    36.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    36.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   36.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   36.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   36.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   36.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   36.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   36.15 +
   36.16  </ul>
   36.17  </div>
   36.18  
   36.19 @@ -72,13 +73,14 @@
   36.20  <ul class = "menu">
   36.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   36.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   36.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   36.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   36.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   36.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   36.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   36.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   36.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   36.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   36.31 +
   36.32  </ul>
   36.33  </div>
   36.34  
    37.1 --- a/artwork_descriptions/bobwhite_quail_covey_flying_on_ochre_and_beige_travertine_date_unavailable.html	Fri Feb 19 11:14:52 2010 -0500
    37.2 +++ b/artwork_descriptions/bobwhite_quail_covey_flying_on_ochre_and_beige_travertine_date_unavailable.html	Mon Feb 22 08:02:39 2010 -0500
    37.3 @@ -13,13 +13,14 @@
    37.4  <ul class = "menu">
    37.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    37.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    37.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    37.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    37.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   37.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   37.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   37.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   37.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   37.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   37.15 +
   37.16  </ul>
   37.17  </div>
   37.18  
   37.19 @@ -72,13 +73,14 @@
   37.20  <ul class = "menu">
   37.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   37.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   37.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   37.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   37.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   37.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   37.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   37.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   37.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   37.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   37.31 +
   37.32  </ul>
   37.33  </div>
   37.34  
    38.1 --- a/artwork_descriptions/bobwhite_quail_on_marble_with_rust_inclusions_1999.html	Fri Feb 19 11:14:52 2010 -0500
    38.2 +++ b/artwork_descriptions/bobwhite_quail_on_marble_with_rust_inclusions_1999.html	Mon Feb 22 08:02:39 2010 -0500
    38.3 @@ -13,13 +13,14 @@
    38.4  <ul class = "menu">
    38.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    38.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    38.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    38.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    38.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   38.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   38.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   38.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   38.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   38.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   38.15 +
   38.16  </ul>
   38.17  </div>
   38.18  
   38.19 @@ -72,13 +73,14 @@
   38.20  <ul class = "menu">
   38.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   38.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   38.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   38.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   38.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   38.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   38.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   38.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   38.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   38.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   38.31 +
   38.32  </ul>
   38.33  </div>
   38.34  
    39.1 --- a/artwork_descriptions/britney_spaniel_head_study_with_tongue_on_purple_and_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    39.2 +++ b/artwork_descriptions/britney_spaniel_head_study_with_tongue_on_purple_and_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    39.3 @@ -13,13 +13,14 @@
    39.4  <ul class = "menu">
    39.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    39.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    39.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    39.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    39.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   39.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   39.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   39.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   39.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   39.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   39.15 +
   39.16  </ul>
   39.17  </div>
   39.18  
   39.19 @@ -72,13 +73,14 @@
   39.20  <ul class = "menu">
   39.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   39.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   39.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   39.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   39.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   39.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   39.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   39.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   39.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   39.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   39.31 +
   39.32  </ul>
   39.33  </div>
   39.34  
    40.1 --- a/artwork_descriptions/britney_spaniel_with_grouse_on_beige_and_ochre_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    40.2 +++ b/artwork_descriptions/britney_spaniel_with_grouse_on_beige_and_ochre_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    40.3 @@ -13,13 +13,14 @@
    40.4  <ul class = "menu">
    40.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    40.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    40.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    40.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    40.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   40.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   40.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   40.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   40.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   40.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   40.15 +
   40.16  </ul>
   40.17  </div>
   40.18  
   40.19 @@ -72,13 +73,14 @@
   40.20  <ul class = "menu">
   40.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   40.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   40.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   40.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   40.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   40.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   40.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   40.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   40.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   40.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   40.31 +
   40.32  </ul>
   40.33  </div>
   40.34  
    41.1 --- a/artwork_descriptions/brown_trout_swimming_on_ochre_granite_with_multicolored_specks_2007.html	Fri Feb 19 11:14:52 2010 -0500
    41.2 +++ b/artwork_descriptions/brown_trout_swimming_on_ochre_granite_with_multicolored_specks_2007.html	Mon Feb 22 08:02:39 2010 -0500
    41.3 @@ -13,13 +13,14 @@
    41.4  <ul class = "menu">
    41.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    41.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    41.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    41.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    41.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   41.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   41.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   41.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   41.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   41.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   41.15 +
   41.16  </ul>
   41.17  </div>
   41.18  
   41.19 @@ -79,13 +80,14 @@
   41.20  <ul class = "menu">
   41.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   41.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   41.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   41.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   41.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   41.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   41.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   41.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   41.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   41.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   41.31 +
   41.32  </ul>
   41.33  </div>
   41.34  
    42.1 --- a/artwork_descriptions/brown_trout_with_fly_on_green_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    42.2 +++ b/artwork_descriptions/brown_trout_with_fly_on_green_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    42.3 @@ -13,13 +13,14 @@
    42.4  <ul class = "menu">
    42.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    42.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    42.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    42.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    42.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   42.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   42.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   42.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   42.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   42.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   42.15 +
   42.16  </ul>
   42.17  </div>
   42.18  
   42.19 @@ -72,13 +73,14 @@
   42.20  <ul class = "menu">
   42.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   42.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   42.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   42.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   42.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   42.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   42.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   42.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   42.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   42.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   42.31 +
   42.32  </ul>
   42.33  </div>
   42.34  
    43.1 --- a/artwork_descriptions/bugling_bull_elk_head_and_chest_on_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    43.2 +++ b/artwork_descriptions/bugling_bull_elk_head_and_chest_on_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    43.3 @@ -13,13 +13,14 @@
    43.4  <ul class = "menu">
    43.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    43.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    43.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    43.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    43.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   43.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   43.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   43.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   43.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   43.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   43.15 +
   43.16  </ul>
   43.17  </div>
   43.18  
   43.19 @@ -72,13 +73,14 @@
   43.20  <ul class = "menu">
   43.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   43.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   43.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   43.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   43.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   43.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   43.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   43.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   43.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   43.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   43.31 +
   43.32  </ul>
   43.33  </div>
   43.34  
    44.1 --- a/artwork_descriptions/bugling_bull_moose_head_on_beige_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    44.2 +++ b/artwork_descriptions/bugling_bull_moose_head_on_beige_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    44.3 @@ -13,13 +13,14 @@
    44.4  <ul class = "menu">
    44.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    44.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    44.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    44.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    44.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   44.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   44.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   44.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   44.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   44.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   44.15 +
   44.16  </ul>
   44.17  </div>
   44.18  
   44.19 @@ -72,13 +73,14 @@
   44.20  <ul class = "menu">
   44.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   44.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   44.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   44.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   44.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   44.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   44.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   44.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   44.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   44.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   44.31 +
   44.32  </ul>
   44.33  </div>
   44.34  
    45.1 --- a/artwork_descriptions/bugling_elk_fromt_pose_on_black_granite_1998.html	Fri Feb 19 11:14:52 2010 -0500
    45.2 +++ b/artwork_descriptions/bugling_elk_fromt_pose_on_black_granite_1998.html	Mon Feb 22 08:02:39 2010 -0500
    45.3 @@ -13,13 +13,14 @@
    45.4  <ul class = "menu">
    45.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    45.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    45.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    45.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    45.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   45.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   45.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   45.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   45.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   45.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   45.15 +
   45.16  </ul>
   45.17  </div>
   45.18  
   45.19 @@ -72,13 +73,14 @@
   45.20  <ul class = "menu">
   45.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   45.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   45.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   45.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   45.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   45.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   45.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   45.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   45.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   45.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   45.31 +
   45.32  </ul>
   45.33  </div>
   45.34  
    46.1 --- a/artwork_descriptions/bugling_elk_full_profile_on_white_and_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    46.2 +++ b/artwork_descriptions/bugling_elk_full_profile_on_white_and_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    46.3 @@ -13,13 +13,14 @@
    46.4  <ul class = "menu">
    46.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    46.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    46.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    46.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    46.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   46.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   46.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   46.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   46.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   46.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   46.15 +
   46.16  </ul>
   46.17  </div>
   46.18  
   46.19 @@ -72,13 +73,14 @@
   46.20  <ul class = "menu">
   46.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   46.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   46.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   46.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   46.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   46.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   46.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   46.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   46.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   46.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   46.31 +
   46.32  </ul>
   46.33  </div>
   46.34  
    47.1 --- a/artwork_descriptions/bugling_elk_head_only_on_forest_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    47.2 +++ b/artwork_descriptions/bugling_elk_head_only_on_forest_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    47.3 @@ -13,13 +13,14 @@
    47.4  <ul class = "menu">
    47.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    47.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    47.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    47.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    47.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   47.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   47.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   47.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   47.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   47.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   47.15 +
   47.16  </ul>
   47.17  </div>
   47.18  
   47.19 @@ -72,13 +73,14 @@
   47.20  <ul class = "menu">
   47.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   47.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   47.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   47.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   47.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   47.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   47.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   47.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   47.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   47.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   47.31 +
   47.32  </ul>
   47.33  </div>
   47.34  
    48.1 --- a/artwork_descriptions/bull_elk_laying_in_the_snow_on_white_and_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    48.2 +++ b/artwork_descriptions/bull_elk_laying_in_the_snow_on_white_and_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    48.3 @@ -13,13 +13,14 @@
    48.4  <ul class = "menu">
    48.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    48.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    48.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    48.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    48.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   48.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   48.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   48.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   48.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   48.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   48.15 +
   48.16  </ul>
   48.17  </div>
   48.18  
   48.19 @@ -72,13 +73,14 @@
   48.20  <ul class = "menu">
   48.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   48.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   48.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   48.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   48.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   48.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   48.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   48.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   48.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   48.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   48.31 +
   48.32  </ul>
   48.33  </div>
   48.34  
    49.1 --- a/artwork_descriptions/canadian_goose_flying_over_water_on_downstroke_on_wavelike_green_and_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    49.2 +++ b/artwork_descriptions/canadian_goose_flying_over_water_on_downstroke_on_wavelike_green_and_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    49.3 @@ -13,13 +13,14 @@
    49.4  <ul class = "menu">
    49.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    49.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    49.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    49.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    49.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   49.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   49.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   49.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   49.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   49.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   49.15 +
   49.16  </ul>
   49.17  </div>
   49.18  
   49.19 @@ -72,13 +73,14 @@
   49.20  <ul class = "menu">
   49.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   49.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   49.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   49.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   49.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   49.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   49.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   49.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   49.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   49.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   49.31 +
   49.32  </ul>
   49.33  </div>
   49.34  
    50.1 --- a/artwork_descriptions/canadian_goose_preparing_to_land_on_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    50.2 +++ b/artwork_descriptions/canadian_goose_preparing_to_land_on_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    50.3 @@ -13,13 +13,14 @@
    50.4  <ul class = "menu">
    50.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    50.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    50.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    50.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    50.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   50.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   50.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   50.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   50.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   50.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   50.15 +
   50.16  </ul>
   50.17  </div>
   50.18  
   50.19 @@ -72,13 +73,14 @@
   50.20  <ul class = "menu">
   50.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   50.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   50.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   50.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   50.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   50.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   50.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   50.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   50.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   50.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   50.31 +
   50.32  </ul>
   50.33  </div>
   50.34  
    51.1 --- a/artwork_descriptions/cardinal_perched_on_branch_on_black_marble_with_white_veins_1999.html	Fri Feb 19 11:14:52 2010 -0500
    51.2 +++ b/artwork_descriptions/cardinal_perched_on_branch_on_black_marble_with_white_veins_1999.html	Mon Feb 22 08:02:39 2010 -0500
    51.3 @@ -13,13 +13,14 @@
    51.4  <ul class = "menu">
    51.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    51.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    51.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    51.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    51.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   51.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   51.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   51.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   51.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   51.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   51.15 +
   51.16  </ul>
   51.17  </div>
   51.18  
   51.19 @@ -72,13 +73,14 @@
   51.20  <ul class = "menu">
   51.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   51.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   51.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   51.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   51.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   51.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   51.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   51.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   51.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   51.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   51.31 +
   51.32  </ul>
   51.33  </div>
   51.34  
    52.1 --- a/artwork_descriptions/charging_african_elephant_on_beige_travertine_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    52.2 +++ b/artwork_descriptions/charging_african_elephant_on_beige_travertine_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    52.3 @@ -13,13 +13,14 @@
    52.4  <ul class = "menu">
    52.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    52.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    52.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    52.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    52.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   52.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   52.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   52.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   52.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   52.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   52.15 +
   52.16  </ul>
   52.17  </div>
   52.18  
   52.19 @@ -72,13 +73,14 @@
   52.20  <ul class = "menu">
   52.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   52.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   52.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   52.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   52.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   52.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   52.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   52.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   52.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   52.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   52.31 +
   52.32  </ul>
   52.33  </div>
   52.34  
    53.1 --- a/artwork_descriptions/chocolate_lab_head_and_chest_on_pink_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    53.2 +++ b/artwork_descriptions/chocolate_lab_head_and_chest_on_pink_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    53.3 @@ -13,13 +13,14 @@
    53.4  <ul class = "menu">
    53.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    53.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    53.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    53.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    53.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   53.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   53.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   53.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   53.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   53.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   53.15 +
   53.16  </ul>
   53.17  </div>
   53.18  
   53.19 @@ -72,13 +73,14 @@
   53.20  <ul class = "menu">
   53.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   53.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   53.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   53.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   53.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   53.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   53.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   53.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   53.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   53.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   53.31 +
   53.32  </ul>
   53.33  </div>
   53.34  
    54.1 --- a/artwork_descriptions/chocolate_lab_three_quarter_profile_on_beige_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    54.2 +++ b/artwork_descriptions/chocolate_lab_three_quarter_profile_on_beige_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    54.3 @@ -13,13 +13,14 @@
    54.4  <ul class = "menu">
    54.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    54.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    54.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    54.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    54.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   54.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   54.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   54.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   54.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   54.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   54.15 +
   54.16  </ul>
   54.17  </div>
   54.18  
   54.19 @@ -72,13 +73,14 @@
   54.20  <ul class = "menu">
   54.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   54.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   54.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   54.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   54.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   54.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   54.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   54.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   54.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   54.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   54.31 +
   54.32  </ul>
   54.33  </div>
   54.34  
    55.1 --- a/artwork_descriptions/coyote_standing_in_snow_on_white_and_beige_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    55.2 +++ b/artwork_descriptions/coyote_standing_in_snow_on_white_and_beige_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    55.3 @@ -13,13 +13,14 @@
    55.4  <ul class = "menu">
    55.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    55.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    55.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    55.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    55.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   55.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   55.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   55.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   55.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   55.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   55.15 +
   55.16  </ul>
   55.17  </div>
   55.18  
   55.19 @@ -74,13 +75,14 @@
   55.20  <ul class = "menu">
   55.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   55.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   55.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   55.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   55.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   55.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   55.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   55.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   55.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   55.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   55.31 +
   55.32  </ul>
   55.33  </div>
   55.34  
    56.1 --- a/artwork_descriptions/dog_named_Ulysse_on_beige_travertine_2000.html	Fri Feb 19 11:14:52 2010 -0500
    56.2 +++ b/artwork_descriptions/dog_named_Ulysse_on_beige_travertine_2000.html	Mon Feb 22 08:02:39 2010 -0500
    56.3 @@ -13,13 +13,14 @@
    56.4  <ul class = "menu">
    56.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    56.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    56.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    56.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    56.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   56.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   56.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   56.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   56.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   56.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   56.15 +
   56.16  </ul>
   56.17  </div>
   56.18  
   56.19 @@ -72,13 +73,14 @@
   56.20  <ul class = "menu">
   56.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   56.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   56.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   56.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   56.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   56.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   56.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   56.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   56.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   56.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   56.31 +
   56.32  </ul>
   56.33  </div>
   56.34  
    57.1 --- a/artwork_descriptions/dolphin_peeking_out_of_ocean_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    57.2 +++ b/artwork_descriptions/dolphin_peeking_out_of_ocean_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    57.3 @@ -13,13 +13,14 @@
    57.4  <ul class = "menu">
    57.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    57.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    57.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    57.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    57.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   57.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   57.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   57.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   57.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   57.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   57.15 +
   57.16  </ul>
   57.17  </div>
   57.18  
   57.19 @@ -72,13 +73,14 @@
   57.20  <ul class = "menu">
   57.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   57.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   57.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   57.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   57.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   57.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   57.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   57.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   57.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   57.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   57.31 +
   57.32  </ul>
   57.33  </div>
   57.34  
    58.1 --- a/artwork_descriptions/eagle_head_on_black_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    58.2 +++ b/artwork_descriptions/eagle_head_on_black_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    58.3 @@ -13,13 +13,14 @@
    58.4  <ul class = "menu">
    58.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    58.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    58.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    58.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    58.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   58.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   58.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   58.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   58.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   58.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   58.15 +
   58.16  </ul>
   58.17  </div>
   58.18  
   58.19 @@ -72,13 +73,14 @@
   58.20  <ul class = "menu">
   58.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   58.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   58.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   58.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   58.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   58.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   58.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   58.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   58.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   58.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   58.31 +
   58.32  </ul>
   58.33  </div>
   58.34  
    59.1 --- a/artwork_descriptions/eagle_hunting_for_prey_on_beige_white_marble_2000.html	Fri Feb 19 11:14:52 2010 -0500
    59.2 +++ b/artwork_descriptions/eagle_hunting_for_prey_on_beige_white_marble_2000.html	Mon Feb 22 08:02:39 2010 -0500
    59.3 @@ -13,13 +13,14 @@
    59.4  <ul class = "menu">
    59.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    59.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    59.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    59.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    59.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   59.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   59.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   59.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   59.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   59.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   59.15 +
   59.16  </ul>
   59.17  </div>
   59.18  
   59.19 @@ -72,13 +73,14 @@
   59.20  <ul class = "menu">
   59.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   59.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   59.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   59.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   59.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   59.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   59.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   59.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   59.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   59.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   59.31 +
   59.32  </ul>
   59.33  </div>
   59.34  
    60.1 --- a/artwork_descriptions/female_cardinal_in_snow_on_black_grey_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    60.2 +++ b/artwork_descriptions/female_cardinal_in_snow_on_black_grey_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    60.3 @@ -13,13 +13,14 @@
    60.4  <ul class = "menu">
    60.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    60.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    60.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    60.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    60.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   60.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   60.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   60.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   60.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   60.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   60.15 +
   60.16  </ul>
   60.17  </div>
   60.18  
   60.19 @@ -72,13 +73,14 @@
   60.20  <ul class = "menu">
   60.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   60.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   60.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   60.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   60.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   60.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   60.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   60.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   60.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   60.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   60.31 +
   60.32  </ul>
   60.33  </div>
   60.34  
    61.1 --- a/artwork_descriptions/flying_mallard_on_blue_white_and_black_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    61.2 +++ b/artwork_descriptions/flying_mallard_on_blue_white_and_black_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    61.3 @@ -13,13 +13,14 @@
    61.4  <ul class = "menu">
    61.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    61.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    61.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    61.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    61.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   61.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   61.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   61.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   61.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   61.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   61.15 +
   61.16  </ul>
   61.17  </div>
   61.18  
   61.19 @@ -72,13 +73,14 @@
   61.20  <ul class = "menu">
   61.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   61.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   61.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   61.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   61.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   61.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   61.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   61.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   61.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   61.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   61.31 +
   61.32  </ul>
   61.33  </div>
   61.34  
    62.1 --- a/artwork_descriptions/flying_mallard_on_highly_crystalized_black_and_grey_stone_1999_.html	Fri Feb 19 11:14:52 2010 -0500
    62.2 +++ b/artwork_descriptions/flying_mallard_on_highly_crystalized_black_and_grey_stone_1999_.html	Mon Feb 22 08:02:39 2010 -0500
    62.3 @@ -13,13 +13,14 @@
    62.4  <ul class = "menu">
    62.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    62.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    62.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    62.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    62.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   62.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   62.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   62.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   62.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   62.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   62.15 +
   62.16  </ul>
   62.17  </div>
   62.18  
   62.19 @@ -72,13 +73,14 @@
   62.20  <ul class = "menu">
   62.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   62.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   62.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   62.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   62.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   62.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   62.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   62.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   62.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   62.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   62.31 +
   62.32  </ul>
   62.33  </div>
   62.34  
    63.1 --- a/artwork_descriptions/flying_pheasant_on_downstroke_on_yellow_ochre_1999.html	Fri Feb 19 11:14:52 2010 -0500
    63.2 +++ b/artwork_descriptions/flying_pheasant_on_downstroke_on_yellow_ochre_1999.html	Mon Feb 22 08:02:39 2010 -0500
    63.3 @@ -13,13 +13,14 @@
    63.4  <ul class = "menu">
    63.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    63.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    63.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    63.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    63.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   63.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   63.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   63.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   63.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   63.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   63.15 +
   63.16  </ul>
   63.17  </div>
   63.18  
   63.19 @@ -72,13 +73,14 @@
   63.20  <ul class = "menu">
   63.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   63.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   63.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   63.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   63.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   63.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   63.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   63.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   63.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   63.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   63.31 +
   63.32  </ul>
   63.33  </div>
   63.34  
    64.1 --- a/artwork_descriptions/flying_pheasant_on_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
    64.2 +++ b/artwork_descriptions/flying_pheasant_on_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
    64.3 @@ -13,13 +13,14 @@
    64.4  <ul class = "menu">
    64.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    64.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    64.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    64.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    64.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   64.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   64.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   64.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   64.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   64.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   64.15 +
   64.16  </ul>
   64.17  </div>
   64.18  
   64.19 @@ -72,13 +73,14 @@
   64.20  <ul class = "menu">
   64.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   64.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   64.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   64.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   64.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   64.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   64.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   64.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   64.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   64.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   64.31 +
   64.32  </ul>
   64.33  </div>
   64.34  
    65.1 --- a/artwork_descriptions/flying_pheasant_with_cattails_on_beige_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    65.2 +++ b/artwork_descriptions/flying_pheasant_with_cattails_on_beige_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    65.3 @@ -13,13 +13,14 @@
    65.4  <ul class = "menu">
    65.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    65.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    65.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    65.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    65.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   65.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   65.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   65.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   65.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   65.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   65.15 +
   65.16  </ul>
   65.17  </div>
   65.18  
   65.19 @@ -72,13 +73,14 @@
   65.20  <ul class = "menu">
   65.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   65.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   65.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   65.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   65.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   65.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   65.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   65.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   65.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   65.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   65.31 +
   65.32  </ul>
   65.33  </div>
   65.34  
    66.1 --- a/artwork_descriptions/flying_wild_turkey_on_downstroke_on_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    66.2 +++ b/artwork_descriptions/flying_wild_turkey_on_downstroke_on_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    66.3 @@ -13,13 +13,14 @@
    66.4  <ul class = "menu">
    66.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    66.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    66.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    66.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    66.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   66.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   66.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   66.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   66.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   66.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   66.15 +
   66.16  </ul>
   66.17  </div>
   66.18  
   66.19 @@ -72,13 +73,14 @@
   66.20  <ul class = "menu">
   66.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   66.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   66.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   66.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   66.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   66.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   66.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   66.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   66.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   66.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   66.31 +
   66.32  </ul>
   66.33  </div>
   66.34  
    67.1 --- a/artwork_descriptions/flying_wood_duck_on_purple_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    67.2 +++ b/artwork_descriptions/flying_wood_duck_on_purple_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    67.3 @@ -13,13 +13,14 @@
    67.4  <ul class = "menu">
    67.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    67.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    67.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    67.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    67.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   67.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   67.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   67.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   67.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   67.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   67.15 +
   67.16  </ul>
   67.17  </div>
   67.18  
   67.19 @@ -72,13 +73,14 @@
   67.20  <ul class = "menu">
   67.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   67.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   67.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   67.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   67.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   67.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   67.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   67.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   67.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   67.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   67.31 +
   67.32  </ul>
   67.33  </div>
   67.34  
    68.1 --- a/artwork_descriptions/friendly_grizzly_bear_head_and_chest_on_black_and_gold_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    68.2 +++ b/artwork_descriptions/friendly_grizzly_bear_head_and_chest_on_black_and_gold_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    68.3 @@ -13,13 +13,14 @@
    68.4  <ul class = "menu">
    68.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    68.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    68.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    68.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    68.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   68.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   68.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   68.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   68.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   68.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   68.15 +
   68.16  </ul>
   68.17  </div>
   68.18  
   68.19 @@ -72,13 +73,14 @@
   68.20  <ul class = "menu">
   68.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   68.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   68.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   68.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   68.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   68.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   68.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   68.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   68.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   68.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   68.31 +
   68.32  </ul>
   68.33  </div>
   68.34  
    69.1 --- a/artwork_descriptions/full_body_buffalo_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    69.2 +++ b/artwork_descriptions/full_body_buffalo_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    69.3 @@ -13,13 +13,14 @@
    69.4  <ul class = "menu">
    69.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    69.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    69.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    69.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    69.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   69.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   69.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   69.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   69.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   69.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   69.15 +
   69.16  </ul>
   69.17  </div>
   69.18  
   69.19 @@ -72,13 +73,14 @@
   69.20  <ul class = "menu">
   69.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   69.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   69.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   69.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   69.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   69.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   69.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   69.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   69.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   69.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   69.31 +
   69.32  </ul>
   69.33  </div>
   69.34  
    70.1 --- a/artwork_descriptions/full_body_buffalo_profile_on_white_black_and_pink_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    70.2 +++ b/artwork_descriptions/full_body_buffalo_profile_on_white_black_and_pink_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    70.3 @@ -13,13 +13,14 @@
    70.4  <ul class = "menu">
    70.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    70.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    70.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    70.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    70.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   70.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   70.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   70.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   70.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   70.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   70.15 +
   70.16  </ul>
   70.17  </div>
   70.18  
   70.19 @@ -72,13 +73,14 @@
   70.20  <ul class = "menu">
   70.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   70.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   70.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   70.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   70.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   70.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   70.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   70.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   70.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   70.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   70.31 +
   70.32  </ul>
   70.33  </div>
   70.34  
    71.1 --- a/artwork_descriptions/full_body_white_tailed_deer_walking_through_water_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    71.2 +++ b/artwork_descriptions/full_body_white_tailed_deer_walking_through_water_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    71.3 @@ -13,13 +13,14 @@
    71.4  <ul class = "menu">
    71.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    71.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    71.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    71.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    71.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   71.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   71.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   71.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   71.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   71.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   71.15 +
   71.16  </ul>
   71.17  </div>
   71.18  
   71.19 @@ -72,13 +73,14 @@
   71.20  <ul class = "menu">
   71.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   71.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   71.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   71.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   71.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   71.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   71.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   71.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   71.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   71.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   71.31 +
   71.32  </ul>
   71.33  </div>
   71.34  
    72.1 --- a/artwork_descriptions/full_flying_pheasant_on_ochre_and_black_granite_2002.html	Fri Feb 19 11:14:52 2010 -0500
    72.2 +++ b/artwork_descriptions/full_flying_pheasant_on_ochre_and_black_granite_2002.html	Mon Feb 22 08:02:39 2010 -0500
    72.3 @@ -13,13 +13,14 @@
    72.4  <ul class = "menu">
    72.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    72.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    72.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    72.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    72.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   72.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   72.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   72.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   72.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   72.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   72.15 +
   72.16  </ul>
   72.17  </div>
   72.18  
   72.19 @@ -72,13 +73,14 @@
   72.20  <ul class = "menu">
   72.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   72.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   72.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   72.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   72.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   72.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   72.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   72.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   72.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   72.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   72.31 +
   72.32  </ul>
   72.33  </div>
   72.34  
    73.1 --- a/artwork_descriptions/full_mallard_swmming_straight_at_you_on_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    73.2 +++ b/artwork_descriptions/full_mallard_swmming_straight_at_you_on_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    73.3 @@ -13,13 +13,14 @@
    73.4  <ul class = "menu">
    73.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    73.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    73.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    73.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    73.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   73.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   73.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   73.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   73.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   73.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   73.15 +
   73.16  </ul>
   73.17  </div>
   73.18  
   73.19 @@ -72,13 +73,14 @@
   73.20  <ul class = "menu">
   73.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   73.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   73.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   73.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   73.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   73.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   73.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   73.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   73.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   73.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   73.31 +
   73.32  </ul>
   73.33  </div>
   73.34  
    74.1 --- a/artwork_descriptions/full_pose_pointer_on_ochre_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    74.2 +++ b/artwork_descriptions/full_pose_pointer_on_ochre_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    74.3 @@ -13,13 +13,14 @@
    74.4  <ul class = "menu">
    74.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    74.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    74.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    74.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    74.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   74.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   74.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   74.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   74.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   74.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   74.15 +
   74.16  </ul>
   74.17  </div>
   74.18  
   74.19 @@ -72,13 +73,14 @@
   74.20  <ul class = "menu">
   74.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   74.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   74.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   74.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   74.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   74.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   74.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   74.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   74.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   74.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   74.31 +
   74.32  </ul>
   74.33  </div>
   74.34  
    75.1 --- a/artwork_descriptions/full_pose_pointer_on_ochre_marble_2_1998.html	Fri Feb 19 11:14:52 2010 -0500
    75.2 +++ b/artwork_descriptions/full_pose_pointer_on_ochre_marble_2_1998.html	Mon Feb 22 08:02:39 2010 -0500
    75.3 @@ -13,13 +13,14 @@
    75.4  <ul class = "menu">
    75.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    75.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    75.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    75.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    75.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   75.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   75.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   75.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   75.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   75.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   75.15 +
   75.16  </ul>
   75.17  </div>
   75.18  
   75.19 @@ -72,13 +73,14 @@
   75.20  <ul class = "menu">
   75.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   75.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   75.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   75.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   75.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   75.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   75.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   75.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   75.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   75.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   75.31 +
   75.32  </ul>
   75.33  </div>
   75.34  
    76.1 --- a/artwork_descriptions/full_standing_pheasant_profile_on_grey_and_white_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    76.2 +++ b/artwork_descriptions/full_standing_pheasant_profile_on_grey_and_white_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    76.3 @@ -13,13 +13,14 @@
    76.4  <ul class = "menu">
    76.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    76.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    76.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    76.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    76.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   76.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   76.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   76.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   76.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   76.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   76.15 +
   76.16  </ul>
   76.17  </div>
   76.18  
   76.19 @@ -72,13 +73,14 @@
   76.20  <ul class = "menu">
   76.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   76.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   76.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   76.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   76.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   76.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   76.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   76.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   76.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   76.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   76.31 +
   76.32  </ul>
   76.33  </div>
   76.34  
    77.1 --- a/artwork_descriptions/full_standing_pheasant_profile_on_ochre_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
    77.2 +++ b/artwork_descriptions/full_standing_pheasant_profile_on_ochre_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
    77.3 @@ -13,13 +13,14 @@
    77.4  <ul class = "menu">
    77.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    77.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    77.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    77.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    77.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   77.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   77.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   77.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   77.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   77.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   77.15 +
   77.16  </ul>
   77.17  </div>
   77.18  
   77.19 @@ -72,13 +73,14 @@
   77.20  <ul class = "menu">
   77.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   77.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   77.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   77.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   77.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   77.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   77.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   77.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   77.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   77.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   77.31 +
   77.32  </ul>
   77.33  </div>
   77.34  
    78.1 --- a/artwork_descriptions/gallery_display--custom_order_for_one_person.html	Fri Feb 19 11:14:52 2010 -0500
    78.2 +++ b/artwork_descriptions/gallery_display--custom_order_for_one_person.html	Mon Feb 22 08:02:39 2010 -0500
    78.3 @@ -13,13 +13,14 @@
    78.4  <ul class = "menu">
    78.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    78.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    78.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    78.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    78.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   78.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   78.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   78.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   78.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   78.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   78.15 +
   78.16  </ul>
   78.17  </div>
   78.18  
   78.19 @@ -72,13 +73,14 @@
   78.20  <ul class = "menu">
   78.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   78.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   78.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   78.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   78.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   78.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   78.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   78.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   78.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   78.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   78.31 +
   78.32  </ul>
   78.33  </div>
   78.34  
    79.1 --- a/artwork_descriptions/gallery_display_2--custom_order_for_one_person.html	Fri Feb 19 11:14:52 2010 -0500
    79.2 +++ b/artwork_descriptions/gallery_display_2--custom_order_for_one_person.html	Mon Feb 22 08:02:39 2010 -0500
    79.3 @@ -13,13 +13,14 @@
    79.4  <ul class = "menu">
    79.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    79.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    79.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    79.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    79.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   79.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   79.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   79.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   79.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   79.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   79.15 +
   79.16  </ul>
   79.17  </div>
   79.18  
   79.19 @@ -72,13 +73,14 @@
   79.20  <ul class = "menu">
   79.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   79.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   79.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   79.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   79.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   79.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   79.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   79.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   79.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   79.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   79.31 +
   79.32  </ul>
   79.33  </div>
   79.34  
    80.1 --- a/artwork_descriptions/gallery_display_3--custom_order_for_one_person.html	Fri Feb 19 11:14:52 2010 -0500
    80.2 +++ b/artwork_descriptions/gallery_display_3--custom_order_for_one_person.html	Mon Feb 22 08:02:39 2010 -0500
    80.3 @@ -13,13 +13,14 @@
    80.4  <ul class = "menu">
    80.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    80.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    80.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    80.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    80.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   80.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   80.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   80.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   80.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   80.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   80.15 +
   80.16  </ul>
   80.17  </div>
   80.18  
   80.19 @@ -72,13 +73,14 @@
   80.20  <ul class = "menu">
   80.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   80.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   80.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   80.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   80.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   80.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   80.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   80.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   80.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   80.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   80.31 +
   80.32  </ul>
   80.33  </div>
   80.34  
    81.1 --- a/artwork_descriptions/gallery_display_4--custom_order_for_one_person.html	Fri Feb 19 11:14:52 2010 -0500
    81.2 +++ b/artwork_descriptions/gallery_display_4--custom_order_for_one_person.html	Mon Feb 22 08:02:39 2010 -0500
    81.3 @@ -13,13 +13,14 @@
    81.4  <ul class = "menu">
    81.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    81.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    81.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    81.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    81.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   81.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   81.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   81.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   81.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   81.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   81.15 +
   81.16  </ul>
   81.17  </div>
   81.18  
   81.19 @@ -72,13 +73,14 @@
   81.20  <ul class = "menu">
   81.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   81.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   81.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   81.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   81.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   81.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   81.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   81.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   81.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   81.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   81.31 +
   81.32  </ul>
   81.33  </div>
   81.34  
    82.1 --- a/artwork_descriptions/german_shepard_named_Geta_head_and_chest_on_white_granite_2002.html	Fri Feb 19 11:14:52 2010 -0500
    82.2 +++ b/artwork_descriptions/german_shepard_named_Geta_head_and_chest_on_white_granite_2002.html	Mon Feb 22 08:02:39 2010 -0500
    82.3 @@ -13,13 +13,14 @@
    82.4  <ul class = "menu">
    82.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    82.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    82.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    82.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    82.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   82.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   82.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   82.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   82.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   82.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   82.15 +
   82.16  </ul>
   82.17  </div>
   82.18  
   82.19 @@ -72,13 +73,14 @@
   82.20  <ul class = "menu">
   82.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   82.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   82.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   82.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   82.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   82.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   82.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   82.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   82.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   82.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   82.31 +
   82.32  </ul>
   82.33  </div>
   82.34  
    83.1 --- a/artwork_descriptions/german_shorthair_full_profile_with_quail_on_brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    83.2 +++ b/artwork_descriptions/german_shorthair_full_profile_with_quail_on_brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    83.3 @@ -13,13 +13,14 @@
    83.4  <ul class = "menu">
    83.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    83.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    83.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    83.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    83.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   83.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   83.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   83.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   83.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   83.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   83.15 +
   83.16  </ul>
   83.17  </div>
   83.18  
   83.19 @@ -72,13 +73,14 @@
   83.20  <ul class = "menu">
   83.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   83.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   83.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   83.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   83.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   83.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   83.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   83.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   83.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   83.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   83.31 +
   83.32  </ul>
   83.33  </div>
   83.34  
    84.1 --- a/artwork_descriptions/gobbling_wild_turkey_on_rust_colored_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    84.2 +++ b/artwork_descriptions/gobbling_wild_turkey_on_rust_colored_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    84.3 @@ -13,13 +13,14 @@
    84.4  <ul class = "menu">
    84.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    84.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    84.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    84.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    84.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   84.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   84.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   84.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   84.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   84.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   84.15 +
   84.16  </ul>
   84.17  </div>
   84.18  
   84.19 @@ -72,13 +73,14 @@
   84.20  <ul class = "menu">
   84.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   84.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   84.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   84.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   84.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   84.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   84.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   84.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   84.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   84.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   84.31 +
   84.32  </ul>
   84.33  </div>
   84.34  
    85.1 --- a/artwork_descriptions/golden_eagle_head_with_beak_open_blue_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    85.2 +++ b/artwork_descriptions/golden_eagle_head_with_beak_open_blue_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    85.3 @@ -13,13 +13,14 @@
    85.4  <ul class = "menu">
    85.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    85.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    85.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    85.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    85.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   85.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   85.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   85.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   85.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   85.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   85.15 +
   85.16  </ul>
   85.17  </div>
   85.18  
   85.19 @@ -72,13 +73,14 @@
   85.20  <ul class = "menu">
   85.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   85.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   85.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   85.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   85.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   85.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   85.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   85.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   85.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   85.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   85.31 +
   85.32  </ul>
   85.33  </div>
   85.34  
    86.1 --- a/artwork_descriptions/golden_retreiver_puppy_head_and_fromt_paws_laying_on_brown_marble_1996.html	Fri Feb 19 11:14:52 2010 -0500
    86.2 +++ b/artwork_descriptions/golden_retreiver_puppy_head_and_fromt_paws_laying_on_brown_marble_1996.html	Mon Feb 22 08:02:39 2010 -0500
    86.3 @@ -13,13 +13,14 @@
    86.4  <ul class = "menu">
    86.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    86.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    86.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    86.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    86.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   86.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   86.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   86.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   86.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   86.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   86.15 +
   86.16  </ul>
   86.17  </div>
   86.18  
   86.19 @@ -72,13 +73,14 @@
   86.20  <ul class = "menu">
   86.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   86.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   86.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   86.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   86.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   86.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   86.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   86.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   86.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   86.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   86.31 +
   86.32  </ul>
   86.33  </div>
   86.34  
    87.1 --- a/artwork_descriptions/golden_retriever_head_and_chest_with_mallard_in_mouth_on_paisley_granite_1998.html	Fri Feb 19 11:14:52 2010 -0500
    87.2 +++ b/artwork_descriptions/golden_retriever_head_and_chest_with_mallard_in_mouth_on_paisley_granite_1998.html	Mon Feb 22 08:02:39 2010 -0500
    87.3 @@ -13,13 +13,14 @@
    87.4  <ul class = "menu">
    87.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    87.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    87.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    87.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    87.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   87.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   87.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   87.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   87.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   87.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   87.15 +
   87.16  </ul>
   87.17  </div>
   87.18  
   87.19 @@ -72,13 +73,14 @@
   87.20  <ul class = "menu">
   87.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   87.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   87.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   87.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   87.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   87.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   87.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   87.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   87.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   87.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   87.31 +
   87.32  </ul>
   87.33  </div>
   87.34  
    88.1 --- a/artwork_descriptions/golden_retriever_head_on_light_brown_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
    88.2 +++ b/artwork_descriptions/golden_retriever_head_on_light_brown_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
    88.3 @@ -13,13 +13,14 @@
    88.4  <ul class = "menu">
    88.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    88.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    88.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    88.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    88.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   88.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   88.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   88.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   88.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   88.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   88.15 +
   88.16  </ul>
   88.17  </div>
   88.18  
   88.19 @@ -72,13 +73,14 @@
   88.20  <ul class = "menu">
   88.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   88.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   88.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   88.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   88.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   88.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   88.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   88.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   88.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   88.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   88.31 +
   88.32  </ul>
   88.33  </div>
   88.34  
    89.1 --- a/artwork_descriptions/golden_retriever_head_with_pintail_on_triangular_speckled_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    89.2 +++ b/artwork_descriptions/golden_retriever_head_with_pintail_on_triangular_speckled_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    89.3 @@ -13,13 +13,14 @@
    89.4  <ul class = "menu">
    89.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    89.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    89.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    89.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    89.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   89.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   89.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   89.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   89.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   89.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   89.15 +
   89.16  </ul>
   89.17  </div>
   89.18  
   89.19 @@ -72,13 +73,14 @@
   89.20  <ul class = "menu">
   89.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   89.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   89.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   89.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   89.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   89.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   89.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   89.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   89.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   89.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   89.31 +
   89.32  </ul>
   89.33  </div>
   89.34  
    90.1 --- a/artwork_descriptions/golden_retriever_puppy_head_and_chest_on_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    90.2 +++ b/artwork_descriptions/golden_retriever_puppy_head_and_chest_on_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    90.3 @@ -13,13 +13,14 @@
    90.4  <ul class = "menu">
    90.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    90.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    90.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    90.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    90.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   90.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   90.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   90.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   90.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   90.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   90.15 +
   90.16  </ul>
   90.17  </div>
   90.18  
   90.19 @@ -72,13 +73,14 @@
   90.20  <ul class = "menu">
   90.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   90.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   90.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   90.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   90.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   90.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   90.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   90.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   90.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   90.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   90.31 +
   90.32  </ul>
   90.33  </div>
   90.34  
    91.1 --- a/artwork_descriptions/golden_retriever_resting_on_beige_byzantine_1999.html	Fri Feb 19 11:14:52 2010 -0500
    91.2 +++ b/artwork_descriptions/golden_retriever_resting_on_beige_byzantine_1999.html	Mon Feb 22 08:02:39 2010 -0500
    91.3 @@ -13,13 +13,14 @@
    91.4  <ul class = "menu">
    91.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    91.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    91.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    91.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    91.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   91.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   91.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   91.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   91.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   91.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   91.15 +
   91.16  </ul>
   91.17  </div>
   91.18  
   91.19 @@ -72,13 +73,14 @@
   91.20  <ul class = "menu">
   91.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   91.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   91.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   91.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   91.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   91.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   91.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   91.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   91.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   91.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   91.31 +
   91.32  </ul>
   91.33  </div>
   91.34  
    92.1 --- a/artwork_descriptions/grey_timberwolf_head_study_on_black_granite_with_gold_specks_1998.html	Fri Feb 19 11:14:52 2010 -0500
    92.2 +++ b/artwork_descriptions/grey_timberwolf_head_study_on_black_granite_with_gold_specks_1998.html	Mon Feb 22 08:02:39 2010 -0500
    92.3 @@ -13,13 +13,14 @@
    92.4  <ul class = "menu">
    92.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    92.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    92.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    92.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    92.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   92.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   92.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   92.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   92.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   92.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   92.15 +
   92.16  </ul>
   92.17  </div>
   92.18  
   92.19 @@ -72,13 +73,14 @@
   92.20  <ul class = "menu">
   92.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   92.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   92.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   92.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   92.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   92.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   92.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   92.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   92.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   92.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   92.31 +
   92.32  </ul>
   92.33  </div>
   92.34  
    93.1 --- a/artwork_descriptions/grizly_bear_head_snaging_salmon_out_of_water_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    93.2 +++ b/artwork_descriptions/grizly_bear_head_snaging_salmon_out_of_water_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    93.3 @@ -13,13 +13,14 @@
    93.4  <ul class = "menu">
    93.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    93.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    93.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    93.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    93.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   93.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   93.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   93.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   93.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   93.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   93.15 +
   93.16  </ul>
   93.17  </div>
   93.18  
   93.19 @@ -72,13 +73,14 @@
   93.20  <ul class = "menu">
   93.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   93.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   93.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   93.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   93.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   93.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   93.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   93.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   93.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   93.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   93.31 +
   93.32  </ul>
   93.33  </div>
   93.34  
    94.1 --- a/artwork_descriptions/grizzly_bear_baring_teeth_on_yellow_ochre_1999.html	Fri Feb 19 11:14:52 2010 -0500
    94.2 +++ b/artwork_descriptions/grizzly_bear_baring_teeth_on_yellow_ochre_1999.html	Mon Feb 22 08:02:39 2010 -0500
    94.3 @@ -13,13 +13,14 @@
    94.4  <ul class = "menu">
    94.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    94.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    94.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    94.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    94.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   94.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   94.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   94.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   94.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   94.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   94.15 +
   94.16  </ul>
   94.17  </div>
   94.18  
   94.19 @@ -72,13 +73,14 @@
   94.20  <ul class = "menu">
   94.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   94.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   94.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   94.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   94.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   94.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   94.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   94.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   94.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   94.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   94.31 +
   94.32  </ul>
   94.33  </div>
   94.34  
    95.1 --- a/artwork_descriptions/growling_grizzly_bear_on_black_and_white_marble_with_rust_inclusions_2007.html	Fri Feb 19 11:14:52 2010 -0500
    95.2 +++ b/artwork_descriptions/growling_grizzly_bear_on_black_and_white_marble_with_rust_inclusions_2007.html	Mon Feb 22 08:02:39 2010 -0500
    95.3 @@ -13,13 +13,14 @@
    95.4  <ul class = "menu">
    95.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    95.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    95.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    95.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    95.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   95.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   95.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   95.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   95.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   95.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   95.15 +
   95.16  </ul>
   95.17  </div>
   95.18  
   95.19 @@ -76,13 +77,14 @@
   95.20  <ul class = "menu">
   95.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   95.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   95.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   95.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   95.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   95.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   95.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   95.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   95.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   95.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   95.31 +
   95.32  </ul>
   95.33  </div>
   95.34  
    96.1 --- a/artwork_descriptions/half_body_mule_deer_buck_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    96.2 +++ b/artwork_descriptions/half_body_mule_deer_buck_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    96.3 @@ -13,13 +13,14 @@
    96.4  <ul class = "menu">
    96.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    96.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    96.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    96.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    96.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   96.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   96.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   96.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   96.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   96.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   96.15 +
   96.16  </ul>
   96.17  </div>
   96.18  
   96.19 @@ -72,13 +73,14 @@
   96.20  <ul class = "menu">
   96.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   96.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   96.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   96.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   96.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   96.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   96.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   96.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   96.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   96.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   96.31 +
   96.32  </ul>
   96.33  </div>
   96.34  
    97.1 --- a/artwork_descriptions/happy_golden_retriever_head_study_on_black_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
    97.2 +++ b/artwork_descriptions/happy_golden_retriever_head_study_on_black_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
    97.3 @@ -13,13 +13,14 @@
    97.4  <ul class = "menu">
    97.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    97.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    97.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    97.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    97.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   97.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   97.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   97.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   97.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   97.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   97.15 +
   97.16  </ul>
   97.17  </div>
   97.18  
   97.19 @@ -72,13 +73,14 @@
   97.20  <ul class = "menu">
   97.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   97.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   97.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   97.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   97.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   97.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   97.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   97.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   97.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   97.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   97.31 +
   97.32  </ul>
   97.33  </div>
   97.34  
    98.1 --- a/artwork_descriptions/hooked_big_mouth_bass_on_green_and_yellow_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    98.2 +++ b/artwork_descriptions/hooked_big_mouth_bass_on_green_and_yellow_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    98.3 @@ -13,13 +13,14 @@
    98.4  <ul class = "menu">
    98.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    98.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    98.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    98.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    98.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   98.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   98.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   98.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   98.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   98.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   98.15 +
   98.16  </ul>
   98.17  </div>
   98.18  
   98.19 @@ -72,13 +73,14 @@
   98.20  <ul class = "menu">
   98.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   98.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   98.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   98.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   98.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   98.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   98.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   98.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   98.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   98.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   98.31 +
   98.32  </ul>
   98.33  </div>
   98.34  
    99.1 --- a/artwork_descriptions/horn_toad_lizard_on_light_brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
    99.2 +++ b/artwork_descriptions/horn_toad_lizard_on_light_brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
    99.3 @@ -13,13 +13,14 @@
    99.4  <ul class = "menu">
    99.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
    99.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
    99.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
    99.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
    99.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   99.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   99.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   99.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   99.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   99.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   99.15 +
   99.16  </ul>
   99.17  </div>
   99.18  
   99.19 @@ -72,13 +73,14 @@
   99.20  <ul class = "menu">
   99.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   99.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   99.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   99.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   99.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
   99.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
   99.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
   99.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
   99.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
   99.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
   99.31 +
   99.32  </ul>
   99.33  </div>
   99.34  
   100.1 --- a/artwork_descriptions/horned_owl_head_and_chest_on_beige_and_ochre_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
   100.2 +++ b/artwork_descriptions/horned_owl_head_and_chest_on_beige_and_ochre_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
   100.3 @@ -13,13 +13,14 @@
   100.4  <ul class = "menu">
   100.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   100.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   100.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   100.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   100.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  100.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  100.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  100.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  100.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  100.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  100.15 +
  100.16  </ul>
  100.17  </div>
  100.18  
  100.19 @@ -72,13 +73,14 @@
  100.20  <ul class = "menu">
  100.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  100.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  100.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  100.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  100.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  100.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  100.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  100.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  100.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  100.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  100.31 +
  100.32  </ul>
  100.33  </div>
  100.34  
   101.1 --- a/artwork_descriptions/howling_timberwolf_on_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   101.2 +++ b/artwork_descriptions/howling_timberwolf_on_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   101.3 @@ -13,13 +13,14 @@
   101.4  <ul class = "menu">
   101.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   101.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   101.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   101.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   101.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  101.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  101.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  101.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  101.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  101.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  101.15 +
  101.16  </ul>
  101.17  </div>
  101.18  
  101.19 @@ -72,13 +73,14 @@
  101.20  <ul class = "menu">
  101.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  101.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  101.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  101.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  101.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  101.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  101.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  101.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  101.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  101.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  101.31 +
  101.32  </ul>
  101.33  </div>
  101.34  
   102.1 --- a/artwork_descriptions/hummingbird_sipping_from_yellow_columbine_on_beige_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   102.2 +++ b/artwork_descriptions/hummingbird_sipping_from_yellow_columbine_on_beige_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   102.3 @@ -13,13 +13,14 @@
   102.4  <ul class = "menu">
   102.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   102.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   102.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   102.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   102.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  102.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  102.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  102.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  102.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  102.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  102.15 +
  102.16  </ul>
  102.17  </div>
  102.18  
  102.19 @@ -72,13 +73,14 @@
  102.20  <ul class = "menu">
  102.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  102.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  102.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  102.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  102.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  102.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  102.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  102.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  102.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  102.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  102.31 +
  102.32  </ul>
  102.33  </div>
  102.34  
   103.1 --- a/artwork_descriptions/hunting_1.html	Fri Feb 19 11:14:52 2010 -0500
   103.2 +++ b/artwork_descriptions/hunting_1.html	Mon Feb 22 08:02:39 2010 -0500
   103.3 @@ -13,13 +13,14 @@
   103.4  <ul class = "menu">
   103.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   103.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   103.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   103.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   103.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  103.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  103.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  103.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  103.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  103.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  103.15 +
  103.16  </ul>
  103.17  </div>
  103.18  
  103.19 @@ -39,13 +40,14 @@
  103.20  <ul class = "menu">
  103.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  103.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  103.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  103.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  103.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  103.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  103.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  103.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  103.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  103.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  103.31 +
  103.32  </ul>
  103.33  </div>
  103.34  
   104.1 --- a/artwork_descriptions/hunting_10.html	Fri Feb 19 11:14:52 2010 -0500
   104.2 +++ b/artwork_descriptions/hunting_10.html	Mon Feb 22 08:02:39 2010 -0500
   104.3 @@ -13,13 +13,14 @@
   104.4  <ul class = "menu">
   104.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   104.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   104.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   104.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   104.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  104.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  104.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  104.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  104.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  104.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  104.15 +
  104.16  </ul>
  104.17  </div>
  104.18  
  104.19 @@ -39,13 +40,14 @@
  104.20  <ul class = "menu">
  104.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  104.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  104.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  104.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  104.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  104.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  104.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  104.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  104.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  104.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  104.31 +
  104.32  </ul>
  104.33  </div>
  104.34  
   105.1 --- a/artwork_descriptions/hunting_11.html	Fri Feb 19 11:14:52 2010 -0500
   105.2 +++ b/artwork_descriptions/hunting_11.html	Mon Feb 22 08:02:39 2010 -0500
   105.3 @@ -13,13 +13,14 @@
   105.4  <ul class = "menu">
   105.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   105.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   105.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   105.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   105.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  105.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  105.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  105.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  105.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  105.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  105.15 +
  105.16  </ul>
  105.17  </div>
  105.18  
  105.19 @@ -39,13 +40,14 @@
  105.20  <ul class = "menu">
  105.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  105.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  105.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  105.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  105.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  105.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  105.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  105.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  105.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  105.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  105.31 +
  105.32  </ul>
  105.33  </div>
  105.34  
   106.1 --- a/artwork_descriptions/hunting_12.html	Fri Feb 19 11:14:52 2010 -0500
   106.2 +++ b/artwork_descriptions/hunting_12.html	Mon Feb 22 08:02:39 2010 -0500
   106.3 @@ -13,13 +13,14 @@
   106.4  <ul class = "menu">
   106.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   106.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   106.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   106.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   106.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  106.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  106.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  106.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  106.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  106.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  106.15 +
  106.16  </ul>
  106.17  </div>
  106.18  
  106.19 @@ -39,13 +40,14 @@
  106.20  <ul class = "menu">
  106.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  106.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  106.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  106.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  106.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  106.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  106.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  106.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  106.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  106.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  106.31 +
  106.32  </ul>
  106.33  </div>
  106.34  
   107.1 --- a/artwork_descriptions/hunting_2.html	Fri Feb 19 11:14:52 2010 -0500
   107.2 +++ b/artwork_descriptions/hunting_2.html	Mon Feb 22 08:02:39 2010 -0500
   107.3 @@ -13,13 +13,14 @@
   107.4  <ul class = "menu">
   107.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   107.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   107.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   107.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   107.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  107.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  107.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  107.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  107.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  107.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  107.15 +
  107.16  </ul>
  107.17  </div>
  107.18  
  107.19 @@ -39,13 +40,14 @@
  107.20  <ul class = "menu">
  107.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  107.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  107.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  107.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  107.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  107.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  107.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  107.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  107.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  107.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  107.31 +
  107.32  </ul>
  107.33  </div>
  107.34  
   108.1 --- a/artwork_descriptions/hunting_3.html	Fri Feb 19 11:14:52 2010 -0500
   108.2 +++ b/artwork_descriptions/hunting_3.html	Mon Feb 22 08:02:39 2010 -0500
   108.3 @@ -13,13 +13,14 @@
   108.4  <ul class = "menu">
   108.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   108.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   108.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   108.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   108.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  108.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  108.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  108.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  108.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  108.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  108.15 +
  108.16  </ul>
  108.17  </div>
  108.18  
  108.19 @@ -39,13 +40,14 @@
  108.20  <ul class = "menu">
  108.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  108.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  108.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  108.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  108.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  108.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  108.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  108.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  108.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  108.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  108.31 +
  108.32  </ul>
  108.33  </div>
  108.34  
   109.1 --- a/artwork_descriptions/hunting_4.html	Fri Feb 19 11:14:52 2010 -0500
   109.2 +++ b/artwork_descriptions/hunting_4.html	Mon Feb 22 08:02:39 2010 -0500
   109.3 @@ -13,13 +13,14 @@
   109.4  <ul class = "menu">
   109.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   109.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   109.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   109.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   109.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  109.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  109.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  109.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  109.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  109.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  109.15 +
  109.16  </ul>
  109.17  </div>
  109.18  
  109.19 @@ -39,13 +40,14 @@
  109.20  <ul class = "menu">
  109.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  109.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  109.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  109.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  109.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  109.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  109.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  109.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  109.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  109.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  109.31 +
  109.32  </ul>
  109.33  </div>
  109.34  
   110.1 --- a/artwork_descriptions/hunting_5.html	Fri Feb 19 11:14:52 2010 -0500
   110.2 +++ b/artwork_descriptions/hunting_5.html	Mon Feb 22 08:02:39 2010 -0500
   110.3 @@ -13,13 +13,14 @@
   110.4  <ul class = "menu">
   110.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   110.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   110.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   110.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   110.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  110.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  110.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  110.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  110.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  110.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  110.15 +
  110.16  </ul>
  110.17  </div>
  110.18  
  110.19 @@ -39,13 +40,14 @@
  110.20  <ul class = "menu">
  110.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  110.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  110.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  110.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  110.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  110.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  110.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  110.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  110.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  110.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  110.31 +
  110.32  </ul>
  110.33  </div>
  110.34  
   111.1 --- a/artwork_descriptions/hunting_6.html	Fri Feb 19 11:14:52 2010 -0500
   111.2 +++ b/artwork_descriptions/hunting_6.html	Mon Feb 22 08:02:39 2010 -0500
   111.3 @@ -13,13 +13,14 @@
   111.4  <ul class = "menu">
   111.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   111.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   111.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   111.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   111.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  111.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  111.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  111.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  111.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  111.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  111.15 +
  111.16  </ul>
  111.17  </div>
  111.18  
  111.19 @@ -39,13 +40,14 @@
  111.20  <ul class = "menu">
  111.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  111.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  111.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  111.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  111.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  111.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  111.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  111.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  111.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  111.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  111.31 +
  111.32  </ul>
  111.33  </div>
  111.34  
   112.1 --- a/artwork_descriptions/hunting_7.html	Fri Feb 19 11:14:52 2010 -0500
   112.2 +++ b/artwork_descriptions/hunting_7.html	Mon Feb 22 08:02:39 2010 -0500
   112.3 @@ -13,13 +13,14 @@
   112.4  <ul class = "menu">
   112.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   112.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   112.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   112.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   112.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  112.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  112.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  112.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  112.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  112.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  112.15 +
  112.16  </ul>
  112.17  </div>
  112.18  
  112.19 @@ -39,13 +40,14 @@
  112.20  <ul class = "menu">
  112.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  112.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  112.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  112.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  112.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  112.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  112.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  112.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  112.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  112.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  112.31 +
  112.32  </ul>
  112.33  </div>
  112.34  
   113.1 --- a/artwork_descriptions/hunting_8.html	Fri Feb 19 11:14:52 2010 -0500
   113.2 +++ b/artwork_descriptions/hunting_8.html	Mon Feb 22 08:02:39 2010 -0500
   113.3 @@ -13,13 +13,14 @@
   113.4  <ul class = "menu">
   113.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   113.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   113.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   113.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   113.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  113.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  113.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  113.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  113.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  113.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  113.15 +
  113.16  </ul>
  113.17  </div>
  113.18  
  113.19 @@ -39,13 +40,14 @@
  113.20  <ul class = "menu">
  113.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  113.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  113.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  113.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  113.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  113.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  113.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  113.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  113.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  113.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  113.31 +
  113.32  </ul>
  113.33  </div>
  113.34  
   114.1 --- a/artwork_descriptions/hunting_9.html	Fri Feb 19 11:14:52 2010 -0500
   114.2 +++ b/artwork_descriptions/hunting_9.html	Mon Feb 22 08:02:39 2010 -0500
   114.3 @@ -13,13 +13,14 @@
   114.4  <ul class = "menu">
   114.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   114.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   114.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   114.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   114.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  114.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  114.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  114.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  114.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  114.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  114.15 +
  114.16  </ul>
  114.17  </div>
  114.18  
  114.19 @@ -39,13 +40,14 @@
  114.20  <ul class = "menu">
  114.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  114.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  114.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  114.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  114.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  114.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  114.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  114.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  114.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  114.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  114.31 +
  114.32  </ul>
  114.33  </div>
  114.34  
   115.1 --- a/artwork_descriptions/irish_setter_laying_on_grass_on_brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   115.2 +++ b/artwork_descriptions/irish_setter_laying_on_grass_on_brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   115.3 @@ -13,13 +13,14 @@
   115.4  <ul class = "menu">
   115.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   115.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   115.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   115.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   115.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  115.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  115.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  115.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  115.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  115.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  115.15 +
  115.16  </ul>
  115.17  </div>
  115.18  
  115.19 @@ -72,13 +73,14 @@
  115.20  <ul class = "menu">
  115.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  115.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  115.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  115.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  115.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  115.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  115.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  115.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  115.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  115.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  115.31 +
  115.32  </ul>
  115.33  </div>
  115.34  
   116.1 --- a/artwork_descriptions/jumping_big_mouth_bass_with_yellow_lure_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   116.2 +++ b/artwork_descriptions/jumping_big_mouth_bass_with_yellow_lure_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   116.3 @@ -13,13 +13,14 @@
   116.4  <ul class = "menu">
   116.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   116.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   116.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   116.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   116.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  116.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  116.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  116.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  116.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  116.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  116.15 +
  116.16  </ul>
  116.17  </div>
  116.18  
  116.19 @@ -72,13 +73,14 @@
  116.20  <ul class = "menu">
  116.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  116.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  116.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  116.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  116.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  116.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  116.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  116.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  116.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  116.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  116.31 +
  116.32  </ul>
  116.33  </div>
  116.34  
   117.1 --- a/artwork_descriptions/killer_whale_head_emerging_from_ocean_on_greenish_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   117.2 +++ b/artwork_descriptions/killer_whale_head_emerging_from_ocean_on_greenish_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   117.3 @@ -13,13 +13,14 @@
   117.4  <ul class = "menu">
   117.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   117.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   117.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   117.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   117.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  117.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  117.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  117.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  117.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  117.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  117.15 +
  117.16  </ul>
  117.17  </div>
  117.18  
  117.19 @@ -72,13 +73,14 @@
  117.20  <ul class = "menu">
  117.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  117.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  117.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  117.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  117.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  117.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  117.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  117.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  117.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  117.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  117.31 +
  117.32  </ul>
  117.33  </div>
  117.34  
   118.1 --- a/artwork_descriptions/king_charles_spaniel_named_sophie_on_beige_marble_2002.html	Fri Feb 19 11:14:52 2010 -0500
   118.2 +++ b/artwork_descriptions/king_charles_spaniel_named_sophie_on_beige_marble_2002.html	Mon Feb 22 08:02:39 2010 -0500
   118.3 @@ -13,13 +13,14 @@
   118.4  <ul class = "menu">
   118.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   118.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   118.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   118.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   118.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  118.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  118.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  118.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  118.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  118.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  118.15 +
  118.16  </ul>
  118.17  </div>
  118.18  
  118.19 @@ -72,13 +73,14 @@
  118.20  <ul class = "menu">
  118.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  118.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  118.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  118.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  118.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  118.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  118.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  118.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  118.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  118.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  118.31 +
  118.32  </ul>
  118.33  </div>
  118.34  
   119.1 --- a/artwork_descriptions/loon_on_water_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   119.2 +++ b/artwork_descriptions/loon_on_water_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   119.3 @@ -13,13 +13,14 @@
   119.4  <ul class = "menu">
   119.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   119.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   119.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   119.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   119.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  119.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  119.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  119.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  119.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  119.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  119.15 +
  119.16  </ul>
  119.17  </div>
  119.18  
  119.19 @@ -72,13 +73,14 @@
  119.20  <ul class = "menu">
  119.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  119.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  119.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  119.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  119.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  119.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  119.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  119.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  119.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  119.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  119.31 +
  119.32  </ul>
  119.33  </div>
  119.34  
   120.1 --- a/artwork_descriptions/majestic_caribou_head_and_chest_on_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   120.2 +++ b/artwork_descriptions/majestic_caribou_head_and_chest_on_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   120.3 @@ -13,13 +13,14 @@
   120.4  <ul class = "menu">
   120.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   120.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   120.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   120.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   120.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  120.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  120.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  120.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  120.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  120.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  120.15 +
  120.16  </ul>
  120.17  </div>
  120.18  
  120.19 @@ -72,13 +73,14 @@
  120.20  <ul class = "menu">
  120.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  120.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  120.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  120.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  120.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  120.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  120.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  120.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  120.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  120.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  120.31 +
  120.32  </ul>
  120.33  </div>
  120.34  
   121.1 --- a/artwork_descriptions/male_cardinal_perched_on_purple_and_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   121.2 +++ b/artwork_descriptions/male_cardinal_perched_on_purple_and_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   121.3 @@ -13,13 +13,14 @@
   121.4  <ul class = "menu">
   121.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   121.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   121.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   121.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   121.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  121.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  121.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  121.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  121.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  121.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  121.15 +
  121.16  </ul>
  121.17  </div>
  121.18  
  121.19 @@ -72,13 +73,14 @@
  121.20  <ul class = "menu">
  121.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  121.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  121.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  121.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  121.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  121.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  121.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  121.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  121.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  121.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  121.31 +
  121.32  </ul>
  121.33  </div>
  121.34  
   122.1 --- a/artwork_descriptions/mallard_coming_in_to_land_on_pink_and_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   122.2 +++ b/artwork_descriptions/mallard_coming_in_to_land_on_pink_and_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   122.3 @@ -13,13 +13,14 @@
   122.4  <ul class = "menu">
   122.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   122.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   122.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   122.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   122.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  122.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  122.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  122.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  122.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  122.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  122.15 +
  122.16  </ul>
  122.17  </div>
  122.18  
  122.19 @@ -72,13 +73,14 @@
  122.20  <ul class = "menu">
  122.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  122.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  122.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  122.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  122.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  122.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  122.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  122.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  122.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  122.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  122.31 +
  122.32  </ul>
  122.33  </div>
  122.34  
   123.1 --- a/artwork_descriptions/mallard_landing_on_water_on_bluish-grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   123.2 +++ b/artwork_descriptions/mallard_landing_on_water_on_bluish-grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   123.3 @@ -13,13 +13,14 @@
   123.4  <ul class = "menu">
   123.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   123.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   123.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   123.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   123.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  123.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  123.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  123.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  123.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  123.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  123.15 +
  123.16  </ul>
  123.17  </div>
  123.18  
  123.19 @@ -72,13 +73,14 @@
  123.20  <ul class = "menu">
  123.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  123.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  123.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  123.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  123.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  123.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  123.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  123.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  123.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  123.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  123.31 +
  123.32  </ul>
  123.33  </div>
  123.34  
   124.1 --- a/artwork_descriptions/mallard_male_and_female_pair_swimming_on_blue_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   124.2 +++ b/artwork_descriptions/mallard_male_and_female_pair_swimming_on_blue_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   124.3 @@ -13,13 +13,14 @@
   124.4  <ul class = "menu">
   124.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   124.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   124.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   124.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   124.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  124.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  124.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  124.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  124.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  124.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  124.15 +
  124.16  </ul>
  124.17  </div>
  124.18  
  124.19 @@ -72,13 +73,14 @@
  124.20  <ul class = "menu">
  124.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  124.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  124.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  124.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  124.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  124.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  124.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  124.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  124.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  124.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  124.31 +
  124.32  </ul>
  124.33  </div>
  124.34  
   125.1 --- a/artwork_descriptions/maltese_named_happy_3_ages_on_black_granite_unsigned_undated.html	Fri Feb 19 11:14:52 2010 -0500
   125.2 +++ b/artwork_descriptions/maltese_named_happy_3_ages_on_black_granite_unsigned_undated.html	Mon Feb 22 08:02:39 2010 -0500
   125.3 @@ -13,13 +13,14 @@
   125.4  <ul class = "menu">
   125.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   125.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   125.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   125.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   125.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  125.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  125.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  125.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  125.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  125.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  125.15 +
  125.16  </ul>
  125.17  </div>
  125.18  
  125.19 @@ -72,13 +73,14 @@
  125.20  <ul class = "menu">
  125.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  125.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  125.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  125.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  125.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  125.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  125.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  125.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  125.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  125.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  125.31 +
  125.32  </ul>
  125.33  </div>
  125.34  
   126.1 --- a/artwork_descriptions/mockingbird_perched_on_a_branch_on_dark_and_light_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   126.2 +++ b/artwork_descriptions/mockingbird_perched_on_a_branch_on_dark_and_light_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   126.3 @@ -13,13 +13,14 @@
   126.4  <ul class = "menu">
   126.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   126.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   126.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   126.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   126.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  126.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  126.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  126.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  126.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  126.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  126.15 +
  126.16  </ul>
  126.17  </div>
  126.18  
  126.19 @@ -72,13 +73,14 @@
  126.20  <ul class = "menu">
  126.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  126.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  126.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  126.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  126.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  126.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  126.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  126.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  126.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  126.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  126.31 +
  126.32  </ul>
  126.33  </div>
  126.34  
   127.1 --- a/artwork_descriptions/monster_whitetail_buck_and_doe_standing_in_water_on_azul_do_mar_1999.html	Fri Feb 19 11:14:52 2010 -0500
   127.2 +++ b/artwork_descriptions/monster_whitetail_buck_and_doe_standing_in_water_on_azul_do_mar_1999.html	Mon Feb 22 08:02:39 2010 -0500
   127.3 @@ -13,13 +13,14 @@
   127.4  <ul class = "menu">
   127.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   127.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   127.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   127.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   127.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  127.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  127.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  127.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  127.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  127.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  127.15 +
  127.16  </ul>
  127.17  </div>
  127.18  
  127.19 @@ -72,13 +73,14 @@
  127.20  <ul class = "menu">
  127.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  127.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  127.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  127.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  127.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  127.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  127.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  127.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  127.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  127.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  127.31 +
  127.32  </ul>
  127.33  </div>
  127.34  
   128.1 --- a/artwork_descriptions/mountain_goat_full_body_on_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   128.2 +++ b/artwork_descriptions/mountain_goat_full_body_on_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   128.3 @@ -13,13 +13,14 @@
   128.4  <ul class = "menu">
   128.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   128.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   128.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   128.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   128.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  128.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  128.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  128.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  128.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  128.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  128.15 +
  128.16  </ul>
  128.17  </div>
  128.18  
  128.19 @@ -72,13 +73,14 @@
  128.20  <ul class = "menu">
  128.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  128.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  128.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  128.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  128.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  128.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  128.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  128.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  128.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  128.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  128.31 +
  128.32  </ul>
  128.33  </div>
  128.34  
   129.1 --- a/artwork_descriptions/mountain_goat_head_profile_on_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   129.2 +++ b/artwork_descriptions/mountain_goat_head_profile_on_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   129.3 @@ -13,13 +13,14 @@
   129.4  <ul class = "menu">
   129.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   129.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   129.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   129.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   129.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  129.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  129.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  129.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  129.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  129.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  129.15 +
  129.16  </ul>
  129.17  </div>
  129.18  
  129.19 @@ -72,13 +73,14 @@
  129.20  <ul class = "menu">
  129.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  129.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  129.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  129.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  129.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  129.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  129.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  129.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  129.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  129.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  129.31 +
  129.32  </ul>
  129.33  </div>
  129.34  
   130.1 --- a/artwork_descriptions/mountain_lion_sitting_on_black_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   130.2 +++ b/artwork_descriptions/mountain_lion_sitting_on_black_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   130.3 @@ -13,13 +13,14 @@
   130.4  <ul class = "menu">
   130.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   130.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   130.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   130.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   130.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  130.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  130.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  130.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  130.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  130.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  130.15 +
  130.16  </ul>
  130.17  </div>
  130.18  
  130.19 @@ -72,13 +73,14 @@
  130.20  <ul class = "menu">
  130.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  130.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  130.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  130.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  130.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  130.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  130.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  130.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  130.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  130.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  130.31 +
  130.32  </ul>
  130.33  </div>
  130.34  
   131.1 --- a/artwork_descriptions/mourning_dove_dodging_bullet_on_grey_and_rust_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   131.2 +++ b/artwork_descriptions/mourning_dove_dodging_bullet_on_grey_and_rust_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   131.3 @@ -13,13 +13,14 @@
   131.4  <ul class = "menu">
   131.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   131.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   131.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   131.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   131.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  131.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  131.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  131.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  131.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  131.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  131.15 +
  131.16  </ul>
  131.17  </div>
  131.18  
  131.19 @@ -72,13 +73,14 @@
  131.20  <ul class = "menu">
  131.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  131.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  131.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  131.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  131.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  131.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  131.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  131.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  131.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  131.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  131.31 +
  131.32  </ul>
  131.33  </div>
  131.34  
   132.1 --- a/artwork_descriptions/mourning_dove_sitting_on_branch_on_purple_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   132.2 +++ b/artwork_descriptions/mourning_dove_sitting_on_branch_on_purple_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   132.3 @@ -13,13 +13,14 @@
   132.4  <ul class = "menu">
   132.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   132.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   132.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   132.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   132.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  132.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  132.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  132.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  132.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  132.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  132.15 +
  132.16  </ul>
  132.17  </div>
  132.18  
  132.19 @@ -72,13 +73,14 @@
  132.20  <ul class = "menu">
  132.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  132.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  132.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  132.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  132.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  132.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  132.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  132.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  132.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  132.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  132.31 +
  132.32  </ul>
  132.33  </div>
  132.34  
   133.1 --- a/artwork_descriptions/non-typical_mule_deer_buck_walking_on_light_brown_marble_2007.html	Fri Feb 19 11:14:52 2010 -0500
   133.2 +++ b/artwork_descriptions/non-typical_mule_deer_buck_walking_on_light_brown_marble_2007.html	Mon Feb 22 08:02:39 2010 -0500
   133.3 @@ -13,13 +13,14 @@
   133.4  <ul class = "menu">
   133.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   133.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   133.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   133.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   133.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  133.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  133.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  133.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  133.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  133.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  133.15 +
  133.16  </ul>
  133.17  </div>
  133.18  
  133.19 @@ -80,13 +81,14 @@
  133.20  <ul class = "menu">
  133.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  133.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  133.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  133.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  133.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  133.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  133.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  133.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  133.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  133.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  133.31 +
  133.32  </ul>
  133.33  </div>
  133.34  
   134.1 --- a/artwork_descriptions/non-typical_trophy_whitetail_buck_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   134.2 +++ b/artwork_descriptions/non-typical_trophy_whitetail_buck_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   134.3 @@ -13,13 +13,14 @@
   134.4  <ul class = "menu">
   134.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   134.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   134.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   134.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   134.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  134.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  134.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  134.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  134.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  134.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  134.15 +
  134.16  </ul>
  134.17  </div>
  134.18  
  134.19 @@ -72,13 +73,14 @@
  134.20  <ul class = "menu">
  134.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  134.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  134.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  134.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  134.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  134.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  134.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  134.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  134.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  134.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  134.31 +
  134.32  </ul>
  134.33  </div>
  134.34  
   135.1 --- a/artwork_descriptions/orca_whale_jumping_out_of_water_on_blue_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   135.2 +++ b/artwork_descriptions/orca_whale_jumping_out_of_water_on_blue_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   135.3 @@ -13,13 +13,14 @@
   135.4  <ul class = "menu">
   135.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   135.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   135.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   135.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   135.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  135.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  135.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  135.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  135.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  135.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  135.15 +
  135.16  </ul>
  135.17  </div>
  135.18  
  135.19 @@ -72,13 +73,14 @@
  135.20  <ul class = "menu">
  135.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  135.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  135.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  135.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  135.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  135.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  135.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  135.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  135.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  135.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  135.31 +
  135.32  </ul>
  135.33  </div>
  135.34  
   136.1 --- a/artwork_descriptions/orca_whale_preforming_bellyflop_on_green_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   136.2 +++ b/artwork_descriptions/orca_whale_preforming_bellyflop_on_green_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   136.3 @@ -13,13 +13,14 @@
   136.4  <ul class = "menu">
   136.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   136.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   136.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   136.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   136.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  136.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  136.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  136.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  136.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  136.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  136.15 +
  136.16  </ul>
  136.17  </div>
  136.18  
  136.19 @@ -72,13 +73,14 @@
  136.20  <ul class = "menu">
  136.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  136.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  136.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  136.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  136.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  136.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  136.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  136.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  136.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  136.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  136.31 +
  136.32  </ul>
  136.33  </div>
  136.34  
   137.1 --- a/artwork_descriptions/pair_of_flying_mallards_on_green_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   137.2 +++ b/artwork_descriptions/pair_of_flying_mallards_on_green_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   137.3 @@ -13,13 +13,14 @@
   137.4  <ul class = "menu">
   137.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   137.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   137.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   137.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   137.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  137.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  137.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  137.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  137.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  137.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  137.15 +
  137.16  </ul>
  137.17  </div>
  137.18  
  137.19 @@ -72,13 +73,14 @@
  137.20  <ul class = "menu">
  137.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  137.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  137.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  137.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  137.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  137.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  137.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  137.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  137.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  137.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  137.31 +
  137.32  </ul>
  137.33  </div>
  137.34  
   138.1 --- a/artwork_descriptions/peregrine_falcon_head_and_chest_on_triangular_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   138.2 +++ b/artwork_descriptions/peregrine_falcon_head_and_chest_on_triangular_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   138.3 @@ -13,13 +13,14 @@
   138.4  <ul class = "menu">
   138.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   138.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   138.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   138.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   138.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  138.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  138.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  138.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  138.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  138.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  138.15 +
  138.16  </ul>
  138.17  </div>
  138.18  
  138.19 @@ -72,13 +73,14 @@
  138.20  <ul class = "menu">
  138.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  138.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  138.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  138.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  138.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  138.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  138.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  138.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  138.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  138.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  138.31 +
  138.32  </ul>
  138.33  </div>
  138.34  
   139.1 --- a/artwork_descriptions/pheasant_flying_on_light_multicolored_marble_2003.html	Fri Feb 19 11:14:52 2010 -0500
   139.2 +++ b/artwork_descriptions/pheasant_flying_on_light_multicolored_marble_2003.html	Mon Feb 22 08:02:39 2010 -0500
   139.3 @@ -13,13 +13,14 @@
   139.4  <ul class = "menu">
   139.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   139.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   139.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   139.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   139.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  139.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  139.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  139.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  139.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  139.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  139.15 +
  139.16  </ul>
  139.17  </div>
  139.18  
  139.19 @@ -72,13 +73,14 @@
  139.20  <ul class = "menu">
  139.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  139.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  139.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  139.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  139.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  139.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  139.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  139.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  139.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  139.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  139.31 +
  139.32  </ul>
  139.33  </div>
  139.34  
   140.1 --- a/artwork_descriptions/pheasant_head_profile_on_black_granite_2007.html	Fri Feb 19 11:14:52 2010 -0500
   140.2 +++ b/artwork_descriptions/pheasant_head_profile_on_black_granite_2007.html	Mon Feb 22 08:02:39 2010 -0500
   140.3 @@ -13,13 +13,14 @@
   140.4  <ul class = "menu">
   140.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   140.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   140.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   140.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   140.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  140.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  140.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  140.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  140.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  140.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  140.15 +
  140.16  </ul>
  140.17  </div>
  140.18  
  140.19 @@ -76,13 +77,14 @@
  140.20  <ul class = "menu">
  140.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  140.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  140.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  140.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  140.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  140.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  140.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  140.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  140.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  140.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  140.31 +
  140.32  </ul>
  140.33  </div>
  140.34  
   141.1 --- a/artwork_descriptions/pheasant_head_profile_on_ochre_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   141.2 +++ b/artwork_descriptions/pheasant_head_profile_on_ochre_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   141.3 @@ -13,13 +13,14 @@
   141.4  <ul class = "menu">
   141.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   141.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   141.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   141.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   141.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  141.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  141.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  141.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  141.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  141.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  141.15 +
  141.16  </ul>
  141.17  </div>
  141.18  
  141.19 @@ -72,13 +73,14 @@
  141.20  <ul class = "menu">
  141.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  141.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  141.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  141.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  141.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  141.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  141.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  141.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  141.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  141.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  141.31 +
  141.32  </ul>
  141.33  </div>
  141.34  
   142.1 --- a/artwork_descriptions/pink_rose_and_rosebud_on_black_granite_with_gold_specks_1999.html	Fri Feb 19 11:14:52 2010 -0500
   142.2 +++ b/artwork_descriptions/pink_rose_and_rosebud_on_black_granite_with_gold_specks_1999.html	Mon Feb 22 08:02:39 2010 -0500
   142.3 @@ -13,13 +13,14 @@
   142.4  <ul class = "menu">
   142.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   142.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   142.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   142.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   142.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  142.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  142.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  142.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  142.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  142.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  142.15 +
  142.16  </ul>
  142.17  </div>
  142.18  
  142.19 @@ -72,13 +73,14 @@
  142.20  <ul class = "menu">
  142.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  142.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  142.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  142.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  142.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  142.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  142.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  142.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  142.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  142.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  142.31 +
  142.32  </ul>
  142.33  </div>
  142.34  
   143.1 --- a/artwork_descriptions/pintail_duck_in_flight_on_azul_do_mar_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   143.2 +++ b/artwork_descriptions/pintail_duck_in_flight_on_azul_do_mar_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   143.3 @@ -13,13 +13,14 @@
   143.4  <ul class = "menu">
   143.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   143.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   143.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   143.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   143.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  143.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  143.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  143.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  143.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  143.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  143.15 +
  143.16  </ul>
  143.17  </div>
  143.18  
  143.19 @@ -72,13 +73,14 @@
  143.20  <ul class = "menu">
  143.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  143.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  143.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  143.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  143.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  143.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  143.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  143.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  143.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  143.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  143.31 +
  143.32  </ul>
  143.33  </div>
  143.34  
   144.1 --- a/artwork_descriptions/pintail_pair--drake_and_hen_flying_on_pink-grey_paisley_1999.html	Fri Feb 19 11:14:52 2010 -0500
   144.2 +++ b/artwork_descriptions/pintail_pair--drake_and_hen_flying_on_pink-grey_paisley_1999.html	Mon Feb 22 08:02:39 2010 -0500
   144.3 @@ -13,13 +13,14 @@
   144.4  <ul class = "menu">
   144.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   144.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   144.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   144.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   144.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  144.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  144.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  144.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  144.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  144.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  144.15 +
  144.16  </ul>
  144.17  </div>
  144.18  
  144.19 @@ -72,13 +73,14 @@
  144.20  <ul class = "menu">
  144.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  144.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  144.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  144.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  144.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  144.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  144.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  144.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  144.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  144.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  144.31 +
  144.32  </ul>
  144.33  </div>
  144.34  
   145.1 --- a/artwork_descriptions/pintail_sitting_on_water_with_cat-tail_reeds_on_bluish-grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   145.2 +++ b/artwork_descriptions/pintail_sitting_on_water_with_cat-tail_reeds_on_bluish-grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   145.3 @@ -13,13 +13,14 @@
   145.4  <ul class = "menu">
   145.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   145.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   145.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   145.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   145.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  145.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  145.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  145.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  145.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  145.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  145.15 +
  145.16  </ul>
  145.17  </div>
  145.18  
  145.19 @@ -72,13 +73,14 @@
  145.20  <ul class = "menu">
  145.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  145.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  145.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  145.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  145.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  145.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  145.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  145.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  145.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  145.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  145.31 +
  145.32  </ul>
  145.33  </div>
  145.34  
   146.1 --- a/artwork_descriptions/pointer_head_with_quail_on_beige_travertine_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   146.2 +++ b/artwork_descriptions/pointer_head_with_quail_on_beige_travertine_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   146.3 @@ -13,13 +13,14 @@
   146.4  <ul class = "menu">
   146.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   146.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   146.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   146.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   146.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  146.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  146.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  146.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  146.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  146.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  146.15 +
  146.16  </ul>
  146.17  </div>
  146.18  
  146.19 @@ -72,13 +73,14 @@
  146.20  <ul class = "menu">
  146.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  146.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  146.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  146.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  146.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  146.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  146.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  146.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  146.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  146.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  146.31 +
  146.32  </ul>
  146.33  </div>
  146.34  
   147.1 --- a/artwork_descriptions/poodle_named_Scarlett_on_black_granite_2002.html	Fri Feb 19 11:14:52 2010 -0500
   147.2 +++ b/artwork_descriptions/poodle_named_Scarlett_on_black_granite_2002.html	Mon Feb 22 08:02:39 2010 -0500
   147.3 @@ -13,13 +13,14 @@
   147.4  <ul class = "menu">
   147.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   147.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   147.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   147.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   147.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  147.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  147.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  147.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  147.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  147.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  147.15 +
  147.16  </ul>
  147.17  </div>
  147.18  
  147.19 @@ -72,13 +73,14 @@
  147.20  <ul class = "menu">
  147.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  147.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  147.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  147.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  147.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  147.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  147.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  147.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  147.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  147.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  147.31 +
  147.32  </ul>
  147.33  </div>
  147.34  
   148.1 --- a/artwork_descriptions/prong-horn_male_antelope_head_study_on_pink_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   148.2 +++ b/artwork_descriptions/prong-horn_male_antelope_head_study_on_pink_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   148.3 @@ -13,13 +13,14 @@
   148.4  <ul class = "menu">
   148.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   148.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   148.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   148.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   148.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  148.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  148.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  148.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  148.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  148.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  148.15 +
  148.16  </ul>
  148.17  </div>
  148.18  
  148.19 @@ -72,13 +73,14 @@
  148.20  <ul class = "menu">
  148.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  148.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  148.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  148.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  148.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  148.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  148.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  148.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  148.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  148.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  148.31 +
  148.32  </ul>
  148.33  </div>
  148.34  
   149.1 --- a/artwork_descriptions/red_fox_on_travertine_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   149.2 +++ b/artwork_descriptions/red_fox_on_travertine_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   149.3 @@ -13,13 +13,14 @@
   149.4  <ul class = "menu">
   149.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   149.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   149.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   149.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   149.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  149.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  149.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  149.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  149.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  149.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  149.15 +
  149.16  </ul>
  149.17  </div>
  149.18  
  149.19 @@ -72,13 +73,14 @@
  149.20  <ul class = "menu">
  149.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  149.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  149.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  149.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  149.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  149.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  149.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  149.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  149.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  149.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  149.31 +
  149.32  </ul>
  149.33  </div>
  149.34  
   150.1 --- a/artwork_descriptions/red_fox_standing_in_snow_on_right_triangular_white_marble_with_grey_vein_1997.html	Fri Feb 19 11:14:52 2010 -0500
   150.2 +++ b/artwork_descriptions/red_fox_standing_in_snow_on_right_triangular_white_marble_with_grey_vein_1997.html	Mon Feb 22 08:02:39 2010 -0500
   150.3 @@ -13,13 +13,14 @@
   150.4  <ul class = "menu">
   150.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   150.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   150.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   150.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   150.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  150.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  150.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  150.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  150.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  150.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  150.15 +
  150.16  </ul>
  150.17  </div>
  150.18  
  150.19 @@ -72,13 +73,14 @@
  150.20  <ul class = "menu">
  150.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  150.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  150.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  150.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  150.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  150.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  150.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  150.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  150.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  150.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  150.31 +
  150.32  </ul>
  150.33  </div>
  150.34  
   151.1 --- a/artwork_descriptions/red_fox_walking_straight_at_you_on_snow_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   151.2 +++ b/artwork_descriptions/red_fox_walking_straight_at_you_on_snow_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   151.3 @@ -13,13 +13,14 @@
   151.4  <ul class = "menu">
   151.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   151.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   151.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   151.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   151.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  151.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  151.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  151.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  151.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  151.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  151.15 +
  151.16  </ul>
  151.17  </div>
  151.18  
  151.19 @@ -72,13 +73,14 @@
  151.20  <ul class = "menu">
  151.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  151.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  151.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  151.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  151.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  151.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  151.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  151.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  151.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  151.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  151.31 +
  151.32  </ul>
  151.33  </div>
  151.34  
   152.1 --- a/artwork_descriptions/red_head_pair_drake_and_hen_flying_on_beige_and_grey_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
   152.2 +++ b/artwork_descriptions/red_head_pair_drake_and_hen_flying_on_beige_and_grey_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
   152.3 @@ -13,13 +13,14 @@
   152.4  <ul class = "menu">
   152.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   152.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   152.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   152.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   152.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  152.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  152.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  152.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  152.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  152.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  152.15 +
  152.16  </ul>
  152.17  </div>
  152.18  
  152.19 @@ -72,13 +73,14 @@
  152.20  <ul class = "menu">
  152.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  152.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  152.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  152.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  152.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  152.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  152.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  152.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  152.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  152.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  152.31 +
  152.32  </ul>
  152.33  </div>
  152.34  
   153.1 --- a/artwork_descriptions/red_texas_longhorn_head_on_triangular_speckled_green_and_beige_granite_undated.html	Fri Feb 19 11:14:52 2010 -0500
   153.2 +++ b/artwork_descriptions/red_texas_longhorn_head_on_triangular_speckled_green_and_beige_granite_undated.html	Mon Feb 22 08:02:39 2010 -0500
   153.3 @@ -13,13 +13,14 @@
   153.4  <ul class = "menu">
   153.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   153.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   153.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   153.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   153.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  153.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  153.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  153.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  153.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  153.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  153.15 +
  153.16  </ul>
  153.17  </div>
  153.18  
  153.19 @@ -72,13 +73,14 @@
  153.20  <ul class = "menu">
  153.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  153.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  153.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  153.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  153.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  153.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  153.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  153.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  153.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  153.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  153.31 +
  153.32  </ul>
  153.33  </div>
  153.34  
   154.1 --- a/artwork_descriptions/red_texas_longhorn_on_white_triangular_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   154.2 +++ b/artwork_descriptions/red_texas_longhorn_on_white_triangular_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   154.3 @@ -13,13 +13,14 @@
   154.4  <ul class = "menu">
   154.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   154.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   154.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   154.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   154.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  154.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  154.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  154.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  154.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  154.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  154.15 +
  154.16  </ul>
  154.17  </div>
  154.18  
  154.19 @@ -72,13 +73,14 @@
  154.20  <ul class = "menu">
  154.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  154.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  154.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  154.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  154.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  154.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  154.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  154.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  154.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  154.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  154.31 +
  154.32  </ul>
  154.33  </div>
  154.34  
   155.1 --- a/artwork_descriptions/redbird_on_branch_on_green_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   155.2 +++ b/artwork_descriptions/redbird_on_branch_on_green_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   155.3 @@ -13,13 +13,14 @@
   155.4  <ul class = "menu">
   155.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   155.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   155.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   155.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   155.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  155.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  155.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  155.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  155.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  155.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  155.15 +
  155.16  </ul>
  155.17  </div>
  155.18  
  155.19 @@ -72,13 +73,14 @@
  155.20  <ul class = "menu">
  155.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  155.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  155.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  155.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  155.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  155.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  155.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  155.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  155.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  155.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  155.31 +
  155.32  </ul>
  155.33  </div>
  155.34  
   156.1 --- a/artwork_descriptions/redhead_drake_duck_head_study_on_greenish_grey_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   156.2 +++ b/artwork_descriptions/redhead_drake_duck_head_study_on_greenish_grey_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   156.3 @@ -13,13 +13,14 @@
   156.4  <ul class = "menu">
   156.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   156.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   156.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   156.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   156.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  156.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  156.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  156.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  156.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  156.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  156.15 +
  156.16  </ul>
  156.17  </div>
  156.18  
  156.19 @@ -72,13 +73,14 @@
  156.20  <ul class = "menu">
  156.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  156.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  156.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  156.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  156.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  156.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  156.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  156.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  156.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  156.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  156.31 +
  156.32  </ul>
  156.33  </div>
  156.34  
   157.1 --- a/artwork_descriptions/roadrunner_on_ochre_1999.html	Fri Feb 19 11:14:52 2010 -0500
   157.2 +++ b/artwork_descriptions/roadrunner_on_ochre_1999.html	Mon Feb 22 08:02:39 2010 -0500
   157.3 @@ -13,13 +13,14 @@
   157.4  <ul class = "menu">
   157.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   157.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   157.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   157.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   157.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  157.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  157.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  157.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  157.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  157.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  157.15 +
  157.16  </ul>
  157.17  </div>
  157.18  
  157.19 @@ -72,13 +73,14 @@
  157.20  <ul class = "menu">
  157.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  157.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  157.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  157.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  157.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  157.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  157.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  157.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  157.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  157.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  157.31 +
  157.32  </ul>
  157.33  </div>
  157.34  
   158.1 --- a/artwork_descriptions/roan_texas_longhorn_steer_on_triangular_green_and_white_marble_with_silver_specks_2007.html	Fri Feb 19 11:14:52 2010 -0500
   158.2 +++ b/artwork_descriptions/roan_texas_longhorn_steer_on_triangular_green_and_white_marble_with_silver_specks_2007.html	Mon Feb 22 08:02:39 2010 -0500
   158.3 @@ -13,13 +13,14 @@
   158.4  <ul class = "menu">
   158.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   158.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   158.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   158.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   158.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  158.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  158.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  158.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  158.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  158.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  158.15 +
  158.16  </ul>
  158.17  </div>
  158.18  
  158.19 @@ -78,13 +79,14 @@
  158.20  <ul class = "menu">
  158.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  158.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  158.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  158.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  158.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  158.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  158.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  158.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  158.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  158.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  158.31 +
  158.32  </ul>
  158.33  </div>
  158.34  
   159.1 --- a/artwork_descriptions/ruby_throated_sipping_from_cluster_of_pink_flowers_on_flesh_tone_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   159.2 +++ b/artwork_descriptions/ruby_throated_sipping_from_cluster_of_pink_flowers_on_flesh_tone_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   159.3 @@ -13,13 +13,14 @@
   159.4  <ul class = "menu">
   159.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   159.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   159.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   159.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   159.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  159.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  159.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  159.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  159.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  159.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  159.15 +
  159.16  </ul>
  159.17  </div>
  159.18  
  159.19 @@ -72,13 +73,14 @@
  159.20  <ul class = "menu">
  159.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  159.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  159.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  159.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  159.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  159.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  159.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  159.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  159.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  159.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  159.31 +
  159.32  </ul>
  159.33  </div>
  159.34  
   160.1 --- a/artwork_descriptions/rufus_hummingbird_sipping_nectar_from_red_flowers_on__brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   160.2 +++ b/artwork_descriptions/rufus_hummingbird_sipping_nectar_from_red_flowers_on__brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   160.3 @@ -13,13 +13,14 @@
   160.4  <ul class = "menu">
   160.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   160.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   160.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   160.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   160.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  160.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  160.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  160.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  160.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  160.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  160.15 +
  160.16  </ul>
  160.17  </div>
  160.18  
  160.19 @@ -72,13 +73,14 @@
  160.20  <ul class = "menu">
  160.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  160.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  160.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  160.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  160.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  160.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  160.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  160.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  160.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  160.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  160.31 +
  160.32  </ul>
  160.33  </div>
  160.34  
   161.1 --- a/artwork_descriptions/san_photo001.html	Fri Feb 19 11:14:52 2010 -0500
   161.2 +++ b/artwork_descriptions/san_photo001.html	Mon Feb 22 08:02:39 2010 -0500
   161.3 @@ -13,13 +13,14 @@
   161.4  <ul class = "menu">
   161.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   161.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   161.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   161.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   161.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  161.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  161.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  161.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  161.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  161.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  161.15 +
  161.16  </ul>
  161.17  </div>
  161.18  
  161.19 @@ -39,13 +40,14 @@
  161.20  <ul class = "menu">
  161.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  161.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  161.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  161.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  161.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  161.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  161.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  161.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  161.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  161.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  161.31 +
  161.32  </ul>
  161.33  </div>
  161.34  
   162.1 --- a/artwork_descriptions/san_photo002.html	Fri Feb 19 11:14:52 2010 -0500
   162.2 +++ b/artwork_descriptions/san_photo002.html	Mon Feb 22 08:02:39 2010 -0500
   162.3 @@ -13,13 +13,14 @@
   162.4  <ul class = "menu">
   162.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   162.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   162.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   162.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   162.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  162.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  162.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  162.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  162.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  162.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  162.15 +
  162.16  </ul>
  162.17  </div>
  162.18  
  162.19 @@ -39,13 +40,14 @@
  162.20  <ul class = "menu">
  162.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  162.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  162.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  162.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  162.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  162.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  162.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  162.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  162.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  162.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  162.31 +
  162.32  </ul>
  162.33  </div>
  162.34  
   163.1 --- a/artwork_descriptions/san_photo003.html	Fri Feb 19 11:14:52 2010 -0500
   163.2 +++ b/artwork_descriptions/san_photo003.html	Mon Feb 22 08:02:39 2010 -0500
   163.3 @@ -13,13 +13,14 @@
   163.4  <ul class = "menu">
   163.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   163.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   163.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   163.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   163.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  163.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  163.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  163.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  163.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  163.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  163.15 +
  163.16  </ul>
  163.17  </div>
  163.18  
  163.19 @@ -39,13 +40,14 @@
  163.20  <ul class = "menu">
  163.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  163.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  163.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  163.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  163.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  163.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  163.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  163.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  163.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  163.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  163.31 +
  163.32  </ul>
  163.33  </div>
  163.34  
   164.1 --- a/artwork_descriptions/san_photo004.html	Fri Feb 19 11:14:52 2010 -0500
   164.2 +++ b/artwork_descriptions/san_photo004.html	Mon Feb 22 08:02:39 2010 -0500
   164.3 @@ -13,13 +13,14 @@
   164.4  <ul class = "menu">
   164.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   164.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   164.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   164.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   164.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  164.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  164.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  164.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  164.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  164.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  164.15 +
  164.16  </ul>
  164.17  </div>
  164.18  
  164.19 @@ -39,13 +40,14 @@
  164.20  <ul class = "menu">
  164.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  164.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  164.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  164.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  164.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  164.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  164.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  164.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  164.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  164.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  164.31 +
  164.32  </ul>
  164.33  </div>
  164.34  
   165.1 --- a/artwork_descriptions/san_photo005.html	Fri Feb 19 11:14:52 2010 -0500
   165.2 +++ b/artwork_descriptions/san_photo005.html	Mon Feb 22 08:02:39 2010 -0500
   165.3 @@ -13,13 +13,14 @@
   165.4  <ul class = "menu">
   165.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   165.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   165.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   165.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   165.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  165.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  165.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  165.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  165.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  165.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  165.15 +
  165.16  </ul>
  165.17  </div>
  165.18  
  165.19 @@ -39,13 +40,14 @@
  165.20  <ul class = "menu">
  165.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  165.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  165.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  165.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  165.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  165.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  165.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  165.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  165.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  165.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  165.31 +
  165.32  </ul>
  165.33  </div>
  165.34  
   166.1 --- a/artwork_descriptions/san_photo006.html	Fri Feb 19 11:14:52 2010 -0500
   166.2 +++ b/artwork_descriptions/san_photo006.html	Mon Feb 22 08:02:39 2010 -0500
   166.3 @@ -13,13 +13,14 @@
   166.4  <ul class = "menu">
   166.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   166.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   166.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   166.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   166.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  166.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  166.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  166.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  166.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  166.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  166.15 +
  166.16  </ul>
  166.17  </div>
  166.18  
  166.19 @@ -39,13 +40,14 @@
  166.20  <ul class = "menu">
  166.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  166.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  166.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  166.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  166.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  166.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  166.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  166.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  166.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  166.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  166.31 +
  166.32  </ul>
  166.33  </div>
  166.34  
   167.1 --- a/artwork_descriptions/san_photo007.html	Fri Feb 19 11:14:52 2010 -0500
   167.2 +++ b/artwork_descriptions/san_photo007.html	Mon Feb 22 08:02:39 2010 -0500
   167.3 @@ -13,13 +13,14 @@
   167.4  <ul class = "menu">
   167.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   167.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   167.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   167.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   167.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  167.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  167.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  167.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  167.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  167.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  167.15 +
  167.16  </ul>
  167.17  </div>
  167.18  
  167.19 @@ -39,13 +40,14 @@
  167.20  <ul class = "menu">
  167.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  167.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  167.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  167.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  167.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  167.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  167.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  167.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  167.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  167.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  167.31 +
  167.32  </ul>
  167.33  </div>
  167.34  
   168.1 --- a/artwork_descriptions/san_photo008.html	Fri Feb 19 11:14:52 2010 -0500
   168.2 +++ b/artwork_descriptions/san_photo008.html	Mon Feb 22 08:02:39 2010 -0500
   168.3 @@ -13,13 +13,14 @@
   168.4  <ul class = "menu">
   168.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   168.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   168.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   168.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   168.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  168.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  168.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  168.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  168.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  168.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  168.15 +
  168.16  </ul>
  168.17  </div>
  168.18  
  168.19 @@ -39,13 +40,14 @@
  168.20  <ul class = "menu">
  168.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  168.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  168.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  168.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  168.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  168.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  168.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  168.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  168.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  168.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  168.31 +
  168.32  </ul>
  168.33  </div>
  168.34  
   169.1 --- a/artwork_descriptions/san_photo009.html	Fri Feb 19 11:14:52 2010 -0500
   169.2 +++ b/artwork_descriptions/san_photo009.html	Mon Feb 22 08:02:39 2010 -0500
   169.3 @@ -13,13 +13,14 @@
   169.4  <ul class = "menu">
   169.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   169.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   169.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   169.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   169.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  169.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  169.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  169.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  169.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  169.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  169.15 +
  169.16  </ul>
  169.17  </div>
  169.18  
  169.19 @@ -39,13 +40,14 @@
  169.20  <ul class = "menu">
  169.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  169.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  169.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  169.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  169.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  169.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  169.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  169.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  169.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  169.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  169.31 +
  169.32  </ul>
  169.33  </div>
  169.34  
   170.1 --- a/artwork_descriptions/san_photo010.html	Fri Feb 19 11:14:52 2010 -0500
   170.2 +++ b/artwork_descriptions/san_photo010.html	Mon Feb 22 08:02:39 2010 -0500
   170.3 @@ -13,13 +13,14 @@
   170.4  <ul class = "menu">
   170.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   170.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   170.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   170.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   170.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  170.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  170.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  170.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  170.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  170.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  170.15 +
  170.16  </ul>
  170.17  </div>
  170.18  
  170.19 @@ -39,13 +40,14 @@
  170.20  <ul class = "menu">
  170.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  170.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  170.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  170.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  170.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  170.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  170.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  170.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  170.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  170.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  170.31 +
  170.32  </ul>
  170.33  </div>
  170.34  
   171.1 --- a/artwork_descriptions/san_photo011.html	Fri Feb 19 11:14:52 2010 -0500
   171.2 +++ b/artwork_descriptions/san_photo011.html	Mon Feb 22 08:02:39 2010 -0500
   171.3 @@ -13,13 +13,14 @@
   171.4  <ul class = "menu">
   171.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   171.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   171.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   171.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   171.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  171.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  171.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  171.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  171.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  171.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  171.15 +
  171.16  </ul>
  171.17  </div>
  171.18  
  171.19 @@ -39,13 +40,14 @@
  171.20  <ul class = "menu">
  171.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  171.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  171.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  171.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  171.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  171.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  171.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  171.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  171.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  171.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  171.31 +
  171.32  </ul>
  171.33  </div>
  171.34  
   172.1 --- a/artwork_descriptions/san_photo012.html	Fri Feb 19 11:14:52 2010 -0500
   172.2 +++ b/artwork_descriptions/san_photo012.html	Mon Feb 22 08:02:39 2010 -0500
   172.3 @@ -13,13 +13,14 @@
   172.4  <ul class = "menu">
   172.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   172.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   172.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   172.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   172.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  172.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  172.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  172.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  172.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  172.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  172.15 +
  172.16  </ul>
  172.17  </div>
  172.18  
  172.19 @@ -39,13 +40,14 @@
  172.20  <ul class = "menu">
  172.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  172.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  172.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  172.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  172.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  172.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  172.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  172.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  172.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  172.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  172.31 +
  172.32  </ul>
  172.33  </div>
  172.34  
   173.1 --- a/artwork_descriptions/san_photo013.html	Fri Feb 19 11:14:52 2010 -0500
   173.2 +++ b/artwork_descriptions/san_photo013.html	Mon Feb 22 08:02:39 2010 -0500
   173.3 @@ -13,13 +13,14 @@
   173.4  <ul class = "menu">
   173.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   173.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   173.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   173.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   173.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  173.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  173.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  173.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  173.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  173.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  173.15 +
  173.16  </ul>
  173.17  </div>
  173.18  
  173.19 @@ -39,13 +40,14 @@
  173.20  <ul class = "menu">
  173.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  173.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  173.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  173.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  173.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  173.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  173.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  173.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  173.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  173.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  173.31 +
  173.32  </ul>
  173.33  </div>
  173.34  
   174.1 --- a/artwork_descriptions/san_photo014.html	Fri Feb 19 11:14:52 2010 -0500
   174.2 +++ b/artwork_descriptions/san_photo014.html	Mon Feb 22 08:02:39 2010 -0500
   174.3 @@ -13,13 +13,14 @@
   174.4  <ul class = "menu">
   174.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   174.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   174.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   174.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   174.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  174.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  174.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  174.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  174.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  174.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  174.15 +
  174.16  </ul>
  174.17  </div>
  174.18  
  174.19 @@ -39,13 +40,14 @@
  174.20  <ul class = "menu">
  174.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  174.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  174.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  174.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  174.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  174.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  174.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  174.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  174.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  174.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  174.31 +
  174.32  </ul>
  174.33  </div>
  174.34  
   175.1 --- a/artwork_descriptions/san_photo015.html	Fri Feb 19 11:14:52 2010 -0500
   175.2 +++ b/artwork_descriptions/san_photo015.html	Mon Feb 22 08:02:39 2010 -0500
   175.3 @@ -13,13 +13,14 @@
   175.4  <ul class = "menu">
   175.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   175.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   175.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   175.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   175.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  175.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  175.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  175.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  175.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  175.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  175.15 +
  175.16  </ul>
  175.17  </div>
  175.18  
  175.19 @@ -39,13 +40,14 @@
  175.20  <ul class = "menu">
  175.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  175.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  175.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  175.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  175.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  175.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  175.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  175.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  175.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  175.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  175.31 +
  175.32  </ul>
  175.33  </div>
  175.34  
   176.1 --- a/artwork_descriptions/san_photo016.html	Fri Feb 19 11:14:52 2010 -0500
   176.2 +++ b/artwork_descriptions/san_photo016.html	Mon Feb 22 08:02:39 2010 -0500
   176.3 @@ -13,13 +13,14 @@
   176.4  <ul class = "menu">
   176.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   176.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   176.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   176.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   176.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  176.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  176.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  176.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  176.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  176.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  176.15 +
  176.16  </ul>
  176.17  </div>
  176.18  
  176.19 @@ -39,13 +40,14 @@
  176.20  <ul class = "menu">
  176.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  176.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  176.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  176.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  176.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  176.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  176.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  176.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  176.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  176.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  176.31 +
  176.32  </ul>
  176.33  </div>
  176.34  
   177.1 --- a/artwork_descriptions/san_photo017.html	Fri Feb 19 11:14:52 2010 -0500
   177.2 +++ b/artwork_descriptions/san_photo017.html	Mon Feb 22 08:02:39 2010 -0500
   177.3 @@ -13,13 +13,14 @@
   177.4  <ul class = "menu">
   177.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   177.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   177.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   177.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   177.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  177.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  177.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  177.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  177.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  177.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  177.15 +
  177.16  </ul>
  177.17  </div>
  177.18  
  177.19 @@ -39,13 +40,14 @@
  177.20  <ul class = "menu">
  177.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  177.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  177.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  177.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  177.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  177.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  177.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  177.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  177.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  177.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  177.31 +
  177.32  </ul>
  177.33  </div>
  177.34  
   178.1 --- a/artwork_descriptions/san_photo018.html	Fri Feb 19 11:14:52 2010 -0500
   178.2 +++ b/artwork_descriptions/san_photo018.html	Mon Feb 22 08:02:39 2010 -0500
   178.3 @@ -13,13 +13,14 @@
   178.4  <ul class = "menu">
   178.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   178.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   178.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   178.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   178.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  178.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  178.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  178.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  178.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  178.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  178.15 +
  178.16  </ul>
  178.17  </div>
  178.18  
  178.19 @@ -39,13 +40,14 @@
  178.20  <ul class = "menu">
  178.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  178.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  178.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  178.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  178.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  178.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  178.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  178.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  178.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  178.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  178.31 +
  178.32  </ul>
  178.33  </div>
  178.34  
   179.1 --- a/artwork_descriptions/san_photo019.html	Fri Feb 19 11:14:52 2010 -0500
   179.2 +++ b/artwork_descriptions/san_photo019.html	Mon Feb 22 08:02:39 2010 -0500
   179.3 @@ -13,13 +13,14 @@
   179.4  <ul class = "menu">
   179.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   179.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   179.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   179.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   179.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  179.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  179.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  179.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  179.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  179.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  179.15 +
  179.16  </ul>
  179.17  </div>
  179.18  
  179.19 @@ -39,13 +40,14 @@
  179.20  <ul class = "menu">
  179.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  179.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  179.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  179.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  179.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  179.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  179.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  179.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  179.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  179.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  179.31 +
  179.32  </ul>
  179.33  </div>
  179.34  
   180.1 --- a/artwork_descriptions/san_photo020.html	Fri Feb 19 11:14:52 2010 -0500
   180.2 +++ b/artwork_descriptions/san_photo020.html	Mon Feb 22 08:02:39 2010 -0500
   180.3 @@ -13,13 +13,14 @@
   180.4  <ul class = "menu">
   180.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   180.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   180.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   180.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   180.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  180.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  180.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  180.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  180.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  180.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  180.15 +
  180.16  </ul>
  180.17  </div>
  180.18  
  180.19 @@ -39,13 +40,14 @@
  180.20  <ul class = "menu">
  180.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  180.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  180.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  180.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  180.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  180.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  180.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  180.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  180.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  180.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  180.31 +
  180.32  </ul>
  180.33  </div>
  180.34  
   181.1 --- a/artwork_descriptions/san_photo021.html	Fri Feb 19 11:14:52 2010 -0500
   181.2 +++ b/artwork_descriptions/san_photo021.html	Mon Feb 22 08:02:39 2010 -0500
   181.3 @@ -13,13 +13,14 @@
   181.4  <ul class = "menu">
   181.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   181.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   181.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   181.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   181.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  181.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  181.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  181.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  181.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  181.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  181.15 +
  181.16  </ul>
  181.17  </div>
  181.18  
  181.19 @@ -39,13 +40,14 @@
  181.20  <ul class = "menu">
  181.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  181.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  181.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  181.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  181.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  181.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  181.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  181.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  181.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  181.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  181.31 +
  181.32  </ul>
  181.33  </div>
  181.34  
   182.1 --- a/artwork_descriptions/san_photo022.html	Fri Feb 19 11:14:52 2010 -0500
   182.2 +++ b/artwork_descriptions/san_photo022.html	Mon Feb 22 08:02:39 2010 -0500
   182.3 @@ -13,13 +13,14 @@
   182.4  <ul class = "menu">
   182.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   182.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   182.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   182.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   182.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  182.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  182.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  182.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  182.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  182.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  182.15 +
  182.16  </ul>
  182.17  </div>
  182.18  
  182.19 @@ -39,13 +40,14 @@
  182.20  <ul class = "menu">
  182.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  182.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  182.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  182.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  182.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  182.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  182.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  182.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  182.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  182.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  182.31 +
  182.32  </ul>
  182.33  </div>
  182.34  
   183.1 --- a/artwork_descriptions/san_photo023.html	Fri Feb 19 11:14:52 2010 -0500
   183.2 +++ b/artwork_descriptions/san_photo023.html	Mon Feb 22 08:02:39 2010 -0500
   183.3 @@ -13,13 +13,14 @@
   183.4  <ul class = "menu">
   183.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   183.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   183.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   183.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   183.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  183.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  183.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  183.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  183.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  183.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  183.15 +
  183.16  </ul>
  183.17  </div>
  183.18  
  183.19 @@ -39,13 +40,14 @@
  183.20  <ul class = "menu">
  183.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  183.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  183.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  183.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  183.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  183.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  183.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  183.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  183.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  183.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  183.31 +
  183.32  </ul>
  183.33  </div>
  183.34  
   184.1 --- a/artwork_descriptions/san_photo024.html	Fri Feb 19 11:14:52 2010 -0500
   184.2 +++ b/artwork_descriptions/san_photo024.html	Mon Feb 22 08:02:39 2010 -0500
   184.3 @@ -13,13 +13,14 @@
   184.4  <ul class = "menu">
   184.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   184.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   184.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   184.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   184.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  184.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  184.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  184.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  184.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  184.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  184.15 +
  184.16  </ul>
  184.17  </div>
  184.18  
  184.19 @@ -39,13 +40,14 @@
  184.20  <ul class = "menu">
  184.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  184.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  184.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  184.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  184.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  184.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  184.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  184.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  184.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  184.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  184.31 +
  184.32  </ul>
  184.33  </div>
  184.34  
   185.1 --- a/artwork_descriptions/san_photo025.html	Fri Feb 19 11:14:52 2010 -0500
   185.2 +++ b/artwork_descriptions/san_photo025.html	Mon Feb 22 08:02:39 2010 -0500
   185.3 @@ -13,13 +13,14 @@
   185.4  <ul class = "menu">
   185.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   185.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   185.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   185.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   185.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  185.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  185.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  185.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  185.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  185.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  185.15 +
  185.16  </ul>
  185.17  </div>
  185.18  
  185.19 @@ -39,13 +40,14 @@
  185.20  <ul class = "menu">
  185.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  185.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  185.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  185.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  185.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  185.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  185.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  185.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  185.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  185.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  185.31 +
  185.32  </ul>
  185.33  </div>
  185.34  
   186.1 --- a/artwork_descriptions/san_photo026.html	Fri Feb 19 11:14:52 2010 -0500
   186.2 +++ b/artwork_descriptions/san_photo026.html	Mon Feb 22 08:02:39 2010 -0500
   186.3 @@ -13,13 +13,14 @@
   186.4  <ul class = "menu">
   186.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   186.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   186.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   186.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   186.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  186.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  186.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  186.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  186.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  186.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  186.15 +
  186.16  </ul>
  186.17  </div>
  186.18  
  186.19 @@ -39,13 +40,14 @@
  186.20  <ul class = "menu">
  186.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  186.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  186.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  186.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  186.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  186.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  186.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  186.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  186.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  186.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  186.31 +
  186.32  </ul>
  186.33  </div>
  186.34  
   187.1 --- a/artwork_descriptions/san_photo027.html	Fri Feb 19 11:14:52 2010 -0500
   187.2 +++ b/artwork_descriptions/san_photo027.html	Mon Feb 22 08:02:39 2010 -0500
   187.3 @@ -13,13 +13,14 @@
   187.4  <ul class = "menu">
   187.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   187.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   187.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   187.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   187.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  187.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  187.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  187.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  187.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  187.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  187.15 +
  187.16  </ul>
  187.17  </div>
  187.18  
  187.19 @@ -39,13 +40,14 @@
  187.20  <ul class = "menu">
  187.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  187.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  187.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  187.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  187.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  187.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  187.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  187.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  187.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  187.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  187.31 +
  187.32  </ul>
  187.33  </div>
  187.34  
   188.1 --- a/artwork_descriptions/san_photo028.html	Fri Feb 19 11:14:52 2010 -0500
   188.2 +++ b/artwork_descriptions/san_photo028.html	Mon Feb 22 08:02:39 2010 -0500
   188.3 @@ -13,13 +13,14 @@
   188.4  <ul class = "menu">
   188.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   188.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   188.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   188.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   188.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  188.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  188.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  188.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  188.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  188.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  188.15 +
  188.16  </ul>
  188.17  </div>
  188.18  
  188.19 @@ -39,13 +40,14 @@
  188.20  <ul class = "menu">
  188.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  188.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  188.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  188.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  188.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  188.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  188.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  188.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  188.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  188.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  188.31 +
  188.32  </ul>
  188.33  </div>
  188.34  
   189.1 --- a/artwork_descriptions/san_photo029.html	Fri Feb 19 11:14:52 2010 -0500
   189.2 +++ b/artwork_descriptions/san_photo029.html	Mon Feb 22 08:02:39 2010 -0500
   189.3 @@ -13,13 +13,14 @@
   189.4  <ul class = "menu">
   189.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   189.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   189.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   189.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   189.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  189.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  189.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  189.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  189.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  189.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  189.15 +
  189.16  </ul>
  189.17  </div>
  189.18  
  189.19 @@ -39,13 +40,14 @@
  189.20  <ul class = "menu">
  189.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  189.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  189.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  189.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  189.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  189.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  189.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  189.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  189.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  189.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  189.31 +
  189.32  </ul>
  189.33  </div>
  189.34  
   190.1 --- a/artwork_descriptions/san_photo030.html	Fri Feb 19 11:14:52 2010 -0500
   190.2 +++ b/artwork_descriptions/san_photo030.html	Mon Feb 22 08:02:39 2010 -0500
   190.3 @@ -13,13 +13,14 @@
   190.4  <ul class = "menu">
   190.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   190.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   190.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   190.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   190.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  190.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  190.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  190.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  190.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  190.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  190.15 +
  190.16  </ul>
  190.17  </div>
  190.18  
  190.19 @@ -39,13 +40,14 @@
  190.20  <ul class = "menu">
  190.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  190.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  190.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  190.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  190.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  190.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  190.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  190.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  190.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  190.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  190.31 +
  190.32  </ul>
  190.33  </div>
  190.34  
   191.1 --- a/artwork_descriptions/san_photo031.html	Fri Feb 19 11:14:52 2010 -0500
   191.2 +++ b/artwork_descriptions/san_photo031.html	Mon Feb 22 08:02:39 2010 -0500
   191.3 @@ -13,13 +13,14 @@
   191.4  <ul class = "menu">
   191.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   191.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   191.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   191.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   191.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  191.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  191.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  191.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  191.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  191.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  191.15 +
  191.16  </ul>
  191.17  </div>
  191.18  
  191.19 @@ -39,13 +40,14 @@
  191.20  <ul class = "menu">
  191.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  191.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  191.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  191.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  191.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  191.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  191.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  191.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  191.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  191.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  191.31 +
  191.32  </ul>
  191.33  </div>
  191.34  
   192.1 --- a/artwork_descriptions/san_photo032.html	Fri Feb 19 11:14:52 2010 -0500
   192.2 +++ b/artwork_descriptions/san_photo032.html	Mon Feb 22 08:02:39 2010 -0500
   192.3 @@ -13,13 +13,14 @@
   192.4  <ul class = "menu">
   192.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   192.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   192.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   192.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   192.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  192.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  192.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  192.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  192.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  192.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  192.15 +
  192.16  </ul>
  192.17  </div>
  192.18  
  192.19 @@ -39,13 +40,14 @@
  192.20  <ul class = "menu">
  192.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  192.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  192.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  192.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  192.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  192.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  192.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  192.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  192.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  192.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  192.31 +
  192.32  </ul>
  192.33  </div>
  192.34  
   193.1 --- a/artwork_descriptions/san_photo033.html	Fri Feb 19 11:14:52 2010 -0500
   193.2 +++ b/artwork_descriptions/san_photo033.html	Mon Feb 22 08:02:39 2010 -0500
   193.3 @@ -13,13 +13,14 @@
   193.4  <ul class = "menu">
   193.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   193.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   193.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   193.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   193.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  193.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  193.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  193.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  193.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  193.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  193.15 +
  193.16  </ul>
  193.17  </div>
  193.18  
  193.19 @@ -39,13 +40,14 @@
  193.20  <ul class = "menu">
  193.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  193.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  193.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  193.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  193.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  193.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  193.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  193.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  193.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  193.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  193.31 +
  193.32  </ul>
  193.33  </div>
  193.34  
   194.1 --- a/artwork_descriptions/san_photo034.html	Fri Feb 19 11:14:52 2010 -0500
   194.2 +++ b/artwork_descriptions/san_photo034.html	Mon Feb 22 08:02:39 2010 -0500
   194.3 @@ -13,13 +13,14 @@
   194.4  <ul class = "menu">
   194.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   194.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   194.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   194.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   194.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  194.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  194.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  194.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  194.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  194.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  194.15 +
  194.16  </ul>
  194.17  </div>
  194.18  
  194.19 @@ -39,13 +40,14 @@
  194.20  <ul class = "menu">
  194.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  194.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  194.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  194.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  194.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  194.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  194.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  194.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  194.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  194.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  194.31 +
  194.32  </ul>
  194.33  </div>
  194.34  
   195.1 --- a/artwork_descriptions/san_photo035.html	Fri Feb 19 11:14:52 2010 -0500
   195.2 +++ b/artwork_descriptions/san_photo035.html	Mon Feb 22 08:02:39 2010 -0500
   195.3 @@ -13,13 +13,14 @@
   195.4  <ul class = "menu">
   195.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   195.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   195.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   195.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   195.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  195.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  195.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  195.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  195.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  195.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  195.15 +
  195.16  </ul>
  195.17  </div>
  195.18  
  195.19 @@ -39,13 +40,14 @@
  195.20  <ul class = "menu">
  195.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  195.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  195.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  195.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  195.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  195.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  195.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  195.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  195.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  195.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  195.31 +
  195.32  </ul>
  195.33  </div>
  195.34  
   196.1 --- a/artwork_descriptions/san_photo036.html	Fri Feb 19 11:14:52 2010 -0500
   196.2 +++ b/artwork_descriptions/san_photo036.html	Mon Feb 22 08:02:39 2010 -0500
   196.3 @@ -13,13 +13,14 @@
   196.4  <ul class = "menu">
   196.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   196.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   196.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   196.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   196.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  196.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  196.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  196.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  196.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  196.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  196.15 +
  196.16  </ul>
  196.17  </div>
  196.18  
  196.19 @@ -39,13 +40,14 @@
  196.20  <ul class = "menu">
  196.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  196.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  196.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  196.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  196.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  196.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  196.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  196.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  196.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  196.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  196.31 +
  196.32  </ul>
  196.33  </div>
  196.34  
   197.1 --- a/artwork_descriptions/san_photo037.html	Fri Feb 19 11:14:52 2010 -0500
   197.2 +++ b/artwork_descriptions/san_photo037.html	Mon Feb 22 08:02:39 2010 -0500
   197.3 @@ -13,13 +13,14 @@
   197.4  <ul class = "menu">
   197.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   197.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   197.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   197.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   197.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  197.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  197.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  197.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  197.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  197.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  197.15 +
  197.16  </ul>
  197.17  </div>
  197.18  
  197.19 @@ -39,13 +40,14 @@
  197.20  <ul class = "menu">
  197.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  197.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  197.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  197.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  197.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  197.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  197.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  197.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  197.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  197.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  197.31 +
  197.32  </ul>
  197.33  </div>
  197.34  
   198.1 --- a/artwork_descriptions/san_photo038.html	Fri Feb 19 11:14:52 2010 -0500
   198.2 +++ b/artwork_descriptions/san_photo038.html	Mon Feb 22 08:02:39 2010 -0500
   198.3 @@ -13,13 +13,14 @@
   198.4  <ul class = "menu">
   198.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   198.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   198.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   198.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   198.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  198.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  198.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  198.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  198.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  198.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  198.15 +
  198.16  </ul>
  198.17  </div>
  198.18  
  198.19 @@ -39,13 +40,14 @@
  198.20  <ul class = "menu">
  198.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  198.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  198.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  198.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  198.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  198.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  198.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  198.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  198.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  198.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  198.31 +
  198.32  </ul>
  198.33  </div>
  198.34  
   199.1 --- a/artwork_descriptions/san_photo039.html	Fri Feb 19 11:14:52 2010 -0500
   199.2 +++ b/artwork_descriptions/san_photo039.html	Mon Feb 22 08:02:39 2010 -0500
   199.3 @@ -13,13 +13,14 @@
   199.4  <ul class = "menu">
   199.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   199.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   199.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   199.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   199.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  199.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  199.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  199.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  199.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  199.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  199.15 +
  199.16  </ul>
  199.17  </div>
  199.18  
  199.19 @@ -39,13 +40,14 @@
  199.20  <ul class = "menu">
  199.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  199.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  199.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  199.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  199.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  199.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  199.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  199.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  199.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  199.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  199.31 +
  199.32  </ul>
  199.33  </div>
  199.34  
   200.1 --- a/artwork_descriptions/san_photo040.html	Fri Feb 19 11:14:52 2010 -0500
   200.2 +++ b/artwork_descriptions/san_photo040.html	Mon Feb 22 08:02:39 2010 -0500
   200.3 @@ -13,13 +13,14 @@
   200.4  <ul class = "menu">
   200.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   200.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   200.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   200.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   200.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  200.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  200.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  200.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  200.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  200.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  200.15 +
  200.16  </ul>
  200.17  </div>
  200.18  
  200.19 @@ -39,13 +40,14 @@
  200.20  <ul class = "menu">
  200.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  200.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  200.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  200.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  200.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  200.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  200.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  200.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  200.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  200.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  200.31 +
  200.32  </ul>
  200.33  </div>
  200.34  
   201.1 --- a/artwork_descriptions/san_photo041.html	Fri Feb 19 11:14:52 2010 -0500
   201.2 +++ b/artwork_descriptions/san_photo041.html	Mon Feb 22 08:02:39 2010 -0500
   201.3 @@ -13,13 +13,14 @@
   201.4  <ul class = "menu">
   201.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   201.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   201.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   201.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   201.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  201.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  201.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  201.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  201.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  201.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  201.15 +
  201.16  </ul>
  201.17  </div>
  201.18  
  201.19 @@ -39,13 +40,14 @@
  201.20  <ul class = "menu">
  201.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  201.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  201.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  201.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  201.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  201.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  201.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  201.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  201.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  201.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  201.31 +
  201.32  </ul>
  201.33  </div>
  201.34  
   202.1 --- a/artwork_descriptions/san_photo042.html	Fri Feb 19 11:14:52 2010 -0500
   202.2 +++ b/artwork_descriptions/san_photo042.html	Mon Feb 22 08:02:39 2010 -0500
   202.3 @@ -13,13 +13,14 @@
   202.4  <ul class = "menu">
   202.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   202.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   202.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   202.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   202.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  202.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  202.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  202.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  202.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  202.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  202.15 +
  202.16  </ul>
  202.17  </div>
  202.18  
  202.19 @@ -39,13 +40,14 @@
  202.20  <ul class = "menu">
  202.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  202.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  202.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  202.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  202.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  202.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  202.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  202.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  202.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  202.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  202.31 +
  202.32  </ul>
  202.33  </div>
  202.34  
   203.1 --- a/artwork_descriptions/san_photo045.html	Fri Feb 19 11:14:52 2010 -0500
   203.2 +++ b/artwork_descriptions/san_photo045.html	Mon Feb 22 08:02:39 2010 -0500
   203.3 @@ -13,13 +13,14 @@
   203.4  <ul class = "menu">
   203.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   203.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   203.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   203.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   203.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  203.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  203.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  203.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  203.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  203.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  203.15 +
  203.16  </ul>
  203.17  </div>
  203.18  
  203.19 @@ -39,13 +40,14 @@
  203.20  <ul class = "menu">
  203.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  203.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  203.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  203.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  203.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  203.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  203.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  203.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  203.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  203.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  203.31 +
  203.32  </ul>
  203.33  </div>
  203.34  
   204.1 --- a/artwork_descriptions/san_photo046.html	Fri Feb 19 11:14:52 2010 -0500
   204.2 +++ b/artwork_descriptions/san_photo046.html	Mon Feb 22 08:02:39 2010 -0500
   204.3 @@ -13,13 +13,14 @@
   204.4  <ul class = "menu">
   204.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   204.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   204.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   204.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   204.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  204.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  204.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  204.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  204.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  204.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  204.15 +
  204.16  </ul>
  204.17  </div>
  204.18  
  204.19 @@ -39,13 +40,14 @@
  204.20  <ul class = "menu">
  204.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  204.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  204.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  204.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  204.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  204.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  204.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  204.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  204.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  204.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  204.31 +
  204.32  </ul>
  204.33  </div>
  204.34  
   205.1 --- a/artwork_descriptions/san_photo047.html	Fri Feb 19 11:14:52 2010 -0500
   205.2 +++ b/artwork_descriptions/san_photo047.html	Mon Feb 22 08:02:39 2010 -0500
   205.3 @@ -13,13 +13,14 @@
   205.4  <ul class = "menu">
   205.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   205.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   205.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   205.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   205.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  205.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  205.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  205.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  205.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  205.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  205.15 +
  205.16  </ul>
  205.17  </div>
  205.18  
  205.19 @@ -39,13 +40,14 @@
  205.20  <ul class = "menu">
  205.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  205.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  205.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  205.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  205.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  205.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  205.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  205.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  205.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  205.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  205.31 +
  205.32  </ul>
  205.33  </div>
  205.34  
   206.1 --- a/artwork_descriptions/san_photo048.html	Fri Feb 19 11:14:52 2010 -0500
   206.2 +++ b/artwork_descriptions/san_photo048.html	Mon Feb 22 08:02:39 2010 -0500
   206.3 @@ -13,13 +13,14 @@
   206.4  <ul class = "menu">
   206.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   206.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   206.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   206.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   206.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  206.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  206.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  206.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  206.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  206.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  206.15 +
  206.16  </ul>
  206.17  </div>
  206.18  
  206.19 @@ -39,13 +40,14 @@
  206.20  <ul class = "menu">
  206.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  206.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  206.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  206.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  206.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  206.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  206.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  206.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  206.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  206.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  206.31 +
  206.32  </ul>
  206.33  </div>
  206.34  
   207.1 --- a/artwork_descriptions/san_photo049.html	Fri Feb 19 11:14:52 2010 -0500
   207.2 +++ b/artwork_descriptions/san_photo049.html	Mon Feb 22 08:02:39 2010 -0500
   207.3 @@ -13,13 +13,14 @@
   207.4  <ul class = "menu">
   207.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   207.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   207.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   207.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   207.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  207.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  207.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  207.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  207.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  207.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  207.15 +
  207.16  </ul>
  207.17  </div>
  207.18  
  207.19 @@ -39,13 +40,14 @@
  207.20  <ul class = "menu">
  207.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  207.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  207.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  207.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  207.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  207.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  207.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  207.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  207.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  207.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  207.31 +
  207.32  </ul>
  207.33  </div>
  207.34  
   208.1 --- a/artwork_descriptions/san_photo050.html	Fri Feb 19 11:14:52 2010 -0500
   208.2 +++ b/artwork_descriptions/san_photo050.html	Mon Feb 22 08:02:39 2010 -0500
   208.3 @@ -13,13 +13,14 @@
   208.4  <ul class = "menu">
   208.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   208.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   208.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   208.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   208.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  208.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  208.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  208.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  208.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  208.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  208.15 +
  208.16  </ul>
  208.17  </div>
  208.18  
  208.19 @@ -39,13 +40,14 @@
  208.20  <ul class = "menu">
  208.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  208.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  208.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  208.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  208.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  208.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  208.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  208.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  208.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  208.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  208.31 +
  208.32  </ul>
  208.33  </div>
  208.34  
   209.1 --- a/artwork_descriptions/san_photo051.html	Fri Feb 19 11:14:52 2010 -0500
   209.2 +++ b/artwork_descriptions/san_photo051.html	Mon Feb 22 08:02:39 2010 -0500
   209.3 @@ -13,13 +13,14 @@
   209.4  <ul class = "menu">
   209.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   209.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   209.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   209.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   209.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  209.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  209.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  209.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  209.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  209.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  209.15 +
  209.16  </ul>
  209.17  </div>
  209.18  
  209.19 @@ -39,13 +40,14 @@
  209.20  <ul class = "menu">
  209.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  209.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  209.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  209.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  209.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  209.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  209.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  209.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  209.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  209.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  209.31 +
  209.32  </ul>
  209.33  </div>
  209.34  
   210.1 --- a/artwork_descriptions/san_photo052.html	Fri Feb 19 11:14:52 2010 -0500
   210.2 +++ b/artwork_descriptions/san_photo052.html	Mon Feb 22 08:02:39 2010 -0500
   210.3 @@ -13,13 +13,14 @@
   210.4  <ul class = "menu">
   210.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   210.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   210.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   210.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   210.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  210.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  210.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  210.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  210.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  210.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  210.15 +
  210.16  </ul>
  210.17  </div>
  210.18  
  210.19 @@ -39,13 +40,14 @@
  210.20  <ul class = "menu">
  210.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  210.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  210.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  210.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  210.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  210.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  210.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  210.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  210.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  210.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  210.31 +
  210.32  </ul>
  210.33  </div>
  210.34  
   211.1 --- a/artwork_descriptions/san_photo053.html	Fri Feb 19 11:14:52 2010 -0500
   211.2 +++ b/artwork_descriptions/san_photo053.html	Mon Feb 22 08:02:39 2010 -0500
   211.3 @@ -13,13 +13,14 @@
   211.4  <ul class = "menu">
   211.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   211.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   211.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   211.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   211.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  211.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  211.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  211.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  211.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  211.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  211.15 +
  211.16  </ul>
  211.17  </div>
  211.18  
  211.19 @@ -39,13 +40,14 @@
  211.20  <ul class = "menu">
  211.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  211.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  211.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  211.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  211.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  211.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  211.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  211.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  211.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  211.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  211.31 +
  211.32  </ul>
  211.33  </div>
  211.34  
   212.1 --- a/artwork_descriptions/san_photo054.html	Fri Feb 19 11:14:52 2010 -0500
   212.2 +++ b/artwork_descriptions/san_photo054.html	Mon Feb 22 08:02:39 2010 -0500
   212.3 @@ -13,13 +13,14 @@
   212.4  <ul class = "menu">
   212.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   212.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   212.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   212.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   212.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  212.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  212.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  212.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  212.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  212.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  212.15 +
  212.16  </ul>
  212.17  </div>
  212.18  
  212.19 @@ -39,13 +40,14 @@
  212.20  <ul class = "menu">
  212.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  212.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  212.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  212.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  212.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  212.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  212.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  212.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  212.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  212.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  212.31 +
  212.32  </ul>
  212.33  </div>
  212.34  
   213.1 --- a/artwork_descriptions/san_photo055.html	Fri Feb 19 11:14:52 2010 -0500
   213.2 +++ b/artwork_descriptions/san_photo055.html	Mon Feb 22 08:02:39 2010 -0500
   213.3 @@ -13,13 +13,14 @@
   213.4  <ul class = "menu">
   213.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   213.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   213.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   213.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   213.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  213.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  213.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  213.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  213.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  213.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  213.15 +
  213.16  </ul>
  213.17  </div>
  213.18  
  213.19 @@ -39,13 +40,14 @@
  213.20  <ul class = "menu">
  213.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  213.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  213.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  213.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  213.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  213.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  213.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  213.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  213.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  213.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  213.31 +
  213.32  </ul>
  213.33  </div>
  213.34  
   214.1 --- a/artwork_descriptions/san_photo056.html	Fri Feb 19 11:14:52 2010 -0500
   214.2 +++ b/artwork_descriptions/san_photo056.html	Mon Feb 22 08:02:39 2010 -0500
   214.3 @@ -13,13 +13,14 @@
   214.4  <ul class = "menu">
   214.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   214.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   214.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   214.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   214.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  214.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  214.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  214.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  214.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  214.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  214.15 +
  214.16  </ul>
  214.17  </div>
  214.18  
  214.19 @@ -39,13 +40,14 @@
  214.20  <ul class = "menu">
  214.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  214.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  214.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  214.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  214.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  214.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  214.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  214.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  214.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  214.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  214.31 +
  214.32  </ul>
  214.33  </div>
  214.34  
   215.1 --- a/artwork_descriptions/san_photo057.html	Fri Feb 19 11:14:52 2010 -0500
   215.2 +++ b/artwork_descriptions/san_photo057.html	Mon Feb 22 08:02:39 2010 -0500
   215.3 @@ -13,13 +13,14 @@
   215.4  <ul class = "menu">
   215.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   215.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   215.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   215.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   215.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  215.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  215.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  215.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  215.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  215.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  215.15 +
  215.16  </ul>
  215.17  </div>
  215.18  
  215.19 @@ -39,13 +40,14 @@
  215.20  <ul class = "menu">
  215.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  215.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  215.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  215.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  215.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  215.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  215.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  215.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  215.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  215.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  215.31 +
  215.32  </ul>
  215.33  </div>
  215.34  
   216.1 --- a/artwork_descriptions/san_photo058.html	Fri Feb 19 11:14:52 2010 -0500
   216.2 +++ b/artwork_descriptions/san_photo058.html	Mon Feb 22 08:02:39 2010 -0500
   216.3 @@ -13,13 +13,14 @@
   216.4  <ul class = "menu">
   216.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   216.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   216.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   216.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   216.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  216.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  216.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  216.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  216.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  216.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  216.15 +
  216.16  </ul>
  216.17  </div>
  216.18  
  216.19 @@ -39,13 +40,14 @@
  216.20  <ul class = "menu">
  216.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  216.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  216.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  216.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  216.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  216.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  216.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  216.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  216.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  216.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  216.31 +
  216.32  </ul>
  216.33  </div>
  216.34  
   217.1 --- a/artwork_descriptions/san_photo0x2.html	Fri Feb 19 11:14:52 2010 -0500
   217.2 +++ b/artwork_descriptions/san_photo0x2.html	Mon Feb 22 08:02:39 2010 -0500
   217.3 @@ -13,13 +13,14 @@
   217.4  <ul class = "menu">
   217.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   217.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   217.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   217.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   217.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  217.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  217.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  217.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  217.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  217.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  217.15 +
  217.16  </ul>
  217.17  </div>
  217.18  
  217.19 @@ -39,13 +40,14 @@
  217.20  <ul class = "menu">
  217.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  217.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  217.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  217.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  217.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  217.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  217.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  217.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  217.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  217.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  217.31 +
  217.32  </ul>
  217.33  </div>
  217.34  
   218.1 --- a/artwork_descriptions/san_photo0xx.html	Fri Feb 19 11:14:52 2010 -0500
   218.2 +++ b/artwork_descriptions/san_photo0xx.html	Mon Feb 22 08:02:39 2010 -0500
   218.3 @@ -13,13 +13,14 @@
   218.4  <ul class = "menu">
   218.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   218.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   218.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   218.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   218.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  218.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  218.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  218.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  218.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  218.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  218.15 +
  218.16  </ul>
  218.17  </div>
  218.18  
  218.19 @@ -39,13 +40,14 @@
  218.20  <ul class = "menu">
  218.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  218.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  218.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  218.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  218.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  218.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  218.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  218.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  218.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  218.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  218.31 +
  218.32  </ul>
  218.33  </div>
  218.34  
   219.1 --- a/artwork_descriptions/set_of_three_owls_1995.html	Fri Feb 19 11:14:52 2010 -0500
   219.2 +++ b/artwork_descriptions/set_of_three_owls_1995.html	Mon Feb 22 08:02:39 2010 -0500
   219.3 @@ -13,13 +13,14 @@
   219.4  <ul class = "menu">
   219.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   219.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   219.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   219.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   219.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  219.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  219.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  219.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  219.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  219.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  219.15 +
  219.16  </ul>
  219.17  </div>
  219.18  
  219.19 @@ -72,13 +73,14 @@
  219.20  <ul class = "menu">
  219.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  219.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  219.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  219.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  219.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  219.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  219.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  219.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  219.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  219.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  219.31 +
  219.32  </ul>
  219.33  </div>
  219.34  
   220.1 --- a/artwork_descriptions/shitzu_head_study_named_Abbe_on_black_granite_2002_.html	Fri Feb 19 11:14:52 2010 -0500
   220.2 +++ b/artwork_descriptions/shitzu_head_study_named_Abbe_on_black_granite_2002_.html	Mon Feb 22 08:02:39 2010 -0500
   220.3 @@ -13,13 +13,14 @@
   220.4  <ul class = "menu">
   220.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   220.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   220.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   220.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   220.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  220.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  220.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  220.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  220.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  220.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  220.15 +
  220.16  </ul>
  220.17  </div>
  220.18  
  220.19 @@ -72,13 +73,14 @@
  220.20  <ul class = "menu">
  220.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  220.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  220.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  220.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  220.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  220.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  220.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  220.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  220.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  220.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  220.31 +
  220.32  </ul>
  220.33  </div>
  220.34  
   221.1 --- a/artwork_descriptions/siberian_tiger_head_and_chest_on_multicolored_ochre_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   221.2 +++ b/artwork_descriptions/siberian_tiger_head_and_chest_on_multicolored_ochre_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   221.3 @@ -13,13 +13,14 @@
   221.4  <ul class = "menu">
   221.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   221.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   221.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   221.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   221.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  221.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  221.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  221.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  221.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  221.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  221.15 +
  221.16  </ul>
  221.17  </div>
  221.18  
  221.19 @@ -72,13 +73,14 @@
  221.20  <ul class = "menu">
  221.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  221.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  221.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  221.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  221.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  221.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  221.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  221.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  221.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  221.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  221.31 +
  221.32  </ul>
  221.33  </div>
  221.34  
   222.1 --- a/artwork_descriptions/sitting_black_lab_drake_mallard_in_mouth_with_reeds_on_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   222.2 +++ b/artwork_descriptions/sitting_black_lab_drake_mallard_in_mouth_with_reeds_on_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   222.3 @@ -13,13 +13,14 @@
   222.4  <ul class = "menu">
   222.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   222.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   222.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   222.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   222.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  222.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  222.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  222.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  222.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  222.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  222.15 +
  222.16  </ul>
  222.17  </div>
  222.18  
  222.19 @@ -72,13 +73,14 @@
  222.20  <ul class = "menu">
  222.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  222.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  222.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  222.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  222.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  222.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  222.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  222.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  222.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  222.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  222.31 +
  222.32  </ul>
  222.33  </div>
  222.34  
   223.1 --- a/artwork_descriptions/smiling_bald_eagle_head_on_black_granite_1999_.html	Fri Feb 19 11:14:52 2010 -0500
   223.2 +++ b/artwork_descriptions/smiling_bald_eagle_head_on_black_granite_1999_.html	Mon Feb 22 08:02:39 2010 -0500
   223.3 @@ -13,13 +13,14 @@
   223.4  <ul class = "menu">
   223.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   223.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   223.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   223.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   223.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  223.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  223.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  223.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  223.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  223.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  223.15 +
  223.16  </ul>
  223.17  </div>
  223.18  
  223.19 @@ -72,13 +73,14 @@
  223.20  <ul class = "menu">
  223.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  223.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  223.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  223.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  223.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  223.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  223.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  223.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  223.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  223.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  223.31 +
  223.32  </ul>
  223.33  </div>
  223.34  
   224.1 --- a/artwork_descriptions/soaring_bald_eagle_on_flesh_colored_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   224.2 +++ b/artwork_descriptions/soaring_bald_eagle_on_flesh_colored_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   224.3 @@ -13,13 +13,14 @@
   224.4  <ul class = "menu">
   224.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   224.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   224.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   224.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   224.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  224.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  224.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  224.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  224.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  224.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  224.15 +
  224.16  </ul>
  224.17  </div>
  224.18  
  224.19 @@ -72,13 +73,14 @@
  224.20  <ul class = "menu">
  224.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  224.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  224.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  224.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  224.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  224.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  224.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  224.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  224.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  224.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  224.31 +
  224.32  </ul>
  224.33  </div>
  224.34  
   225.1 --- a/artwork_descriptions/soaring_bald_marble_on_beige_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   225.2 +++ b/artwork_descriptions/soaring_bald_marble_on_beige_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   225.3 @@ -13,13 +13,14 @@
   225.4  <ul class = "menu">
   225.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   225.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   225.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   225.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   225.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  225.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  225.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  225.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  225.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  225.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  225.15 +
  225.16  </ul>
  225.17  </div>
  225.18  
  225.19 @@ -72,13 +73,14 @@
  225.20  <ul class = "menu">
  225.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  225.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  225.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  225.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  225.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  225.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  225.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  225.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  225.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  225.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  225.31 +
  225.32  </ul>
  225.33  </div>
  225.34  
   226.1 --- a/artwork_descriptions/stamp001.html	Fri Feb 19 11:14:52 2010 -0500
   226.2 +++ b/artwork_descriptions/stamp001.html	Mon Feb 22 08:02:39 2010 -0500
   226.3 @@ -13,13 +13,14 @@
   226.4  <ul class = "menu">
   226.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   226.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   226.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   226.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   226.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  226.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  226.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  226.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  226.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  226.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  226.15 +
  226.16  </ul>
  226.17  </div>
  226.18  
  226.19 @@ -45,13 +46,14 @@
  226.20  <ul class = "menu">
  226.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  226.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  226.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  226.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  226.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  226.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  226.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  226.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  226.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  226.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  226.31 +
  226.32  </ul>
  226.33  </div>
  226.34  
   227.1 --- a/artwork_descriptions/stamp003.html	Fri Feb 19 11:14:52 2010 -0500
   227.2 +++ b/artwork_descriptions/stamp003.html	Mon Feb 22 08:02:39 2010 -0500
   227.3 @@ -13,13 +13,14 @@
   227.4  <ul class = "menu">
   227.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   227.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   227.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   227.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   227.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  227.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  227.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  227.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  227.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  227.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  227.15 +
  227.16  </ul>
  227.17  </div>
  227.18  
  227.19 @@ -39,13 +40,14 @@
  227.20  <ul class = "menu">
  227.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  227.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  227.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  227.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  227.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  227.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  227.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  227.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  227.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  227.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  227.31 +
  227.32  </ul>
  227.33  </div>
  227.34  
   228.1 --- a/artwork_descriptions/stamp005.html	Fri Feb 19 11:14:52 2010 -0500
   228.2 +++ b/artwork_descriptions/stamp005.html	Mon Feb 22 08:02:39 2010 -0500
   228.3 @@ -13,13 +13,14 @@
   228.4  <ul class = "menu">
   228.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   228.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   228.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   228.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   228.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  228.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  228.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  228.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  228.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  228.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  228.15 +
  228.16  </ul>
  228.17  </div>
  228.18  
  228.19 @@ -39,13 +40,14 @@
  228.20  <ul class = "menu">
  228.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  228.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  228.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  228.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  228.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  228.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  228.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  228.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  228.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  228.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  228.31 +
  228.32  </ul>
  228.33  </div>
  228.34  
   229.1 --- a/artwork_descriptions/stamp007.html	Fri Feb 19 11:14:52 2010 -0500
   229.2 +++ b/artwork_descriptions/stamp007.html	Mon Feb 22 08:02:39 2010 -0500
   229.3 @@ -13,13 +13,14 @@
   229.4  <ul class = "menu">
   229.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   229.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   229.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   229.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   229.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  229.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  229.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  229.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  229.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  229.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  229.15 +
  229.16  </ul>
  229.17  </div>
  229.18  
  229.19 @@ -39,13 +40,14 @@
  229.20  <ul class = "menu">
  229.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  229.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  229.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  229.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  229.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  229.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  229.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  229.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  229.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  229.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  229.31 +
  229.32  </ul>
  229.33  </div>
  229.34  
   230.1 --- a/artwork_descriptions/stamp009.html	Fri Feb 19 11:14:52 2010 -0500
   230.2 +++ b/artwork_descriptions/stamp009.html	Mon Feb 22 08:02:39 2010 -0500
   230.3 @@ -13,13 +13,14 @@
   230.4  <ul class = "menu">
   230.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   230.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   230.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   230.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   230.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  230.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  230.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  230.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  230.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  230.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  230.15 +
  230.16  </ul>
  230.17  </div>
  230.18  
  230.19 @@ -48,13 +49,14 @@
  230.20  <ul class = "menu">
  230.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  230.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  230.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  230.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  230.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  230.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  230.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  230.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  230.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  230.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  230.31 +
  230.32  </ul>
  230.33  </div>
  230.34  
   231.1 --- a/artwork_descriptions/stamp011.html	Fri Feb 19 11:14:52 2010 -0500
   231.2 +++ b/artwork_descriptions/stamp011.html	Mon Feb 22 08:02:39 2010 -0500
   231.3 @@ -13,13 +13,14 @@
   231.4  <ul class = "menu">
   231.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   231.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   231.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   231.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   231.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  231.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  231.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  231.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  231.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  231.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  231.15 +
  231.16  </ul>
  231.17  </div>
  231.18  
  231.19 @@ -39,13 +40,14 @@
  231.20  <ul class = "menu">
  231.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  231.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  231.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  231.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  231.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  231.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  231.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  231.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  231.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  231.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  231.31 +
  231.32  </ul>
  231.33  </div>
  231.34  
   232.1 --- a/artwork_descriptions/strutting_wild_turkey_on_brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   232.2 +++ b/artwork_descriptions/strutting_wild_turkey_on_brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   232.3 @@ -13,13 +13,14 @@
   232.4  <ul class = "menu">
   232.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   232.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   232.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   232.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   232.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  232.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  232.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  232.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  232.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  232.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  232.15 +
  232.16  </ul>
  232.17  </div>
  232.18  
  232.19 @@ -72,13 +73,14 @@
  232.20  <ul class = "menu">
  232.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  232.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  232.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  232.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  232.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  232.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  232.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  232.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  232.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  232.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  232.31 +
  232.32  </ul>
  232.33  </div>
  232.34  
   233.1 --- a/artwork_descriptions/strutting_wild_turkey_profile_on_brown_and_white_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   233.2 +++ b/artwork_descriptions/strutting_wild_turkey_profile_on_brown_and_white_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   233.3 @@ -13,13 +13,14 @@
   233.4  <ul class = "menu">
   233.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   233.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   233.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   233.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   233.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  233.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  233.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  233.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  233.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  233.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  233.15 +
  233.16  </ul>
  233.17  </div>
  233.18  
  233.19 @@ -72,13 +73,14 @@
  233.20  <ul class = "menu">
  233.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  233.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  233.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  233.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  233.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  233.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  233.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  233.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  233.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  233.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  233.31 +
  233.32  </ul>
  233.33  </div>
  233.34  
   234.1 --- a/artwork_descriptions/swimming_bottlenose_dolphin_on_green_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   234.2 +++ b/artwork_descriptions/swimming_bottlenose_dolphin_on_green_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   234.3 @@ -13,13 +13,14 @@
   234.4  <ul class = "menu">
   234.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   234.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   234.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   234.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   234.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  234.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  234.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  234.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  234.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  234.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  234.15 +
  234.16  </ul>
  234.17  </div>
  234.18  
  234.19 @@ -72,13 +73,14 @@
  234.20  <ul class = "menu">
  234.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  234.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  234.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  234.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  234.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  234.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  234.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  234.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  234.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  234.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  234.31 +
  234.32  </ul>
  234.33  </div>
  234.34  
   235.1 --- a/artwork_descriptions/texas_longhorn_steer_on_triangular_grey_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   235.2 +++ b/artwork_descriptions/texas_longhorn_steer_on_triangular_grey_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   235.3 @@ -13,13 +13,14 @@
   235.4  <ul class = "menu">
   235.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   235.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   235.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   235.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   235.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  235.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  235.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  235.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  235.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  235.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  235.15 +
  235.16  </ul>
  235.17  </div>
  235.18  
  235.19 @@ -72,13 +73,14 @@
  235.20  <ul class = "menu">
  235.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  235.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  235.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  235.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  235.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  235.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  235.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  235.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  235.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  235.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  235.31 +
  235.32  </ul>
  235.33  </div>
  235.34  
   236.1 --- a/artwork_descriptions/three_strolling_african_elephants_on_beige_and_copper_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   236.2 +++ b/artwork_descriptions/three_strolling_african_elephants_on_beige_and_copper_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   236.3 @@ -13,13 +13,14 @@
   236.4  <ul class = "menu">
   236.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   236.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   236.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   236.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   236.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  236.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  236.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  236.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  236.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  236.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  236.15 +
  236.16  </ul>
  236.17  </div>
  236.18  
  236.19 @@ -72,13 +73,14 @@
  236.20  <ul class = "menu">
  236.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  236.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  236.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  236.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  236.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  236.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  236.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  236.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  236.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  236.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  236.31 +
  236.32  </ul>
  236.33  </div>
  236.34  
   237.1 --- a/artwork_descriptions/timberwolf_full_profile_on_green_and_purple_marble_with_high_crystalization_1999.html	Fri Feb 19 11:14:52 2010 -0500
   237.2 +++ b/artwork_descriptions/timberwolf_full_profile_on_green_and_purple_marble_with_high_crystalization_1999.html	Mon Feb 22 08:02:39 2010 -0500
   237.3 @@ -13,13 +13,14 @@
   237.4  <ul class = "menu">
   237.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   237.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   237.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   237.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   237.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  237.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  237.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  237.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  237.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  237.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  237.15 +
  237.16  </ul>
  237.17  </div>
  237.18  
  237.19 @@ -72,13 +73,14 @@
  237.20  <ul class = "menu">
  237.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  237.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  237.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  237.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  237.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  237.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  237.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  237.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  237.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  237.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  237.31 +
  237.32  </ul>
  237.33  </div>
  237.34  
   238.1 --- a/artwork_descriptions/timberwolf_standing_on_ledge_on_purple_green_black_and_white_marble_(very_large)_1997.html	Fri Feb 19 11:14:52 2010 -0500
   238.2 +++ b/artwork_descriptions/timberwolf_standing_on_ledge_on_purple_green_black_and_white_marble_(very_large)_1997.html	Mon Feb 22 08:02:39 2010 -0500
   238.3 @@ -13,13 +13,14 @@
   238.4  <ul class = "menu">
   238.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   238.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   238.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   238.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   238.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  238.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  238.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  238.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  238.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  238.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  238.15 +
  238.16  </ul>
  238.17  </div>
  238.18  
  238.19 @@ -72,13 +73,14 @@
  238.20  <ul class = "menu">
  238.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  238.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  238.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  238.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  238.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  238.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  238.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  238.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  238.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  238.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  238.31 +
  238.32  </ul>
  238.33  </div>
  238.34  
   239.1 --- a/artwork_descriptions/timberwolf_straight-on_head_on_triangular_grey_and_pink_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   239.2 +++ b/artwork_descriptions/timberwolf_straight-on_head_on_triangular_grey_and_pink_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   239.3 @@ -13,13 +13,14 @@
   239.4  <ul class = "menu">
   239.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   239.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   239.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   239.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   239.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  239.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  239.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  239.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  239.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  239.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  239.15 +
  239.16  </ul>
  239.17  </div>
  239.18  
  239.19 @@ -72,13 +73,14 @@
  239.20  <ul class = "menu">
  239.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  239.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  239.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  239.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  239.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  239.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  239.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  239.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  239.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  239.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  239.31 +
  239.32  </ul>
  239.33  </div>
  239.34  
   240.1 --- a/artwork_descriptions/tom_turkey_head_profile_on_green_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   240.2 +++ b/artwork_descriptions/tom_turkey_head_profile_on_green_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   240.3 @@ -13,13 +13,14 @@
   240.4  <ul class = "menu">
   240.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   240.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   240.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   240.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   240.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  240.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  240.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  240.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  240.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  240.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  240.15 +
  240.16  </ul>
  240.17  </div>
  240.18  
  240.19 @@ -72,13 +73,14 @@
  240.20  <ul class = "menu">
  240.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  240.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  240.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  240.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  240.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  240.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  240.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  240.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  240.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  240.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  240.31 +
  240.32  </ul>
  240.33  </div>
  240.34  
   241.1 --- a/artwork_descriptions/trophy_bull_elk_rear_view_on_white_and_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   241.2 +++ b/artwork_descriptions/trophy_bull_elk_rear_view_on_white_and_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   241.3 @@ -13,13 +13,14 @@
   241.4  <ul class = "menu">
   241.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   241.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   241.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   241.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   241.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  241.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  241.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  241.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  241.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  241.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  241.15 +
  241.16  </ul>
  241.17  </div>
  241.18  
  241.19 @@ -72,13 +73,14 @@
  241.20  <ul class = "menu">
  241.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  241.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  241.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  241.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  241.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  241.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  241.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  241.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  241.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  241.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  241.31 +
  241.32  </ul>
  241.33  </div>
  241.34  
   242.1 --- a/artwork_descriptions/unfriendly_grizzly_bear_head_and_chest_on_beige_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   242.2 +++ b/artwork_descriptions/unfriendly_grizzly_bear_head_and_chest_on_beige_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   242.3 @@ -13,13 +13,14 @@
   242.4  <ul class = "menu">
   242.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   242.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   242.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   242.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   242.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  242.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  242.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  242.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  242.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  242.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  242.15 +
  242.16  </ul>
  242.17  </div>
  242.18  
  242.19 @@ -72,13 +73,14 @@
  242.20  <ul class = "menu">
  242.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  242.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  242.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  242.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  242.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  242.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  242.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  242.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  242.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  242.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  242.31 +
  242.32  </ul>
  242.33  </div>
  242.34  
   243.1 --- a/artwork_descriptions/upper_body_of_moose_with_foliage_on_azul_do_mar_1999.html	Fri Feb 19 11:14:52 2010 -0500
   243.2 +++ b/artwork_descriptions/upper_body_of_moose_with_foliage_on_azul_do_mar_1999.html	Mon Feb 22 08:02:39 2010 -0500
   243.3 @@ -13,13 +13,14 @@
   243.4  <ul class = "menu">
   243.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   243.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   243.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   243.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   243.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  243.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  243.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  243.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  243.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  243.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  243.15 +
  243.16  </ul>
  243.17  </div>
  243.18  
  243.19 @@ -72,13 +73,14 @@
  243.20  <ul class = "menu">
  243.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  243.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  243.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  243.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  243.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  243.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  243.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  243.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  243.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  243.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  243.31 +
  243.32  </ul>
  243.33  </div>
  243.34  
   244.1 --- a/artwork_descriptions/white_ram_head_on_triangular_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   244.2 +++ b/artwork_descriptions/white_ram_head_on_triangular_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   244.3 @@ -13,13 +13,14 @@
   244.4  <ul class = "menu">
   244.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   244.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   244.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   244.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   244.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  244.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  244.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  244.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  244.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  244.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  244.15 +
  244.16  </ul>
  244.17  </div>
  244.18  
  244.19 @@ -72,13 +73,14 @@
  244.20  <ul class = "menu">
  244.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  244.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  244.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  244.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  244.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  244.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  244.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  244.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  244.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  244.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  244.31 +
  244.32  </ul>
  244.33  </div>
  244.34  
   245.1 --- a/artwork_descriptions/white_tail_buck_head_and_chest_on_yellow_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
   245.2 +++ b/artwork_descriptions/white_tail_buck_head_and_chest_on_yellow_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
   245.3 @@ -13,13 +13,14 @@
   245.4  <ul class = "menu">
   245.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   245.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   245.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   245.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   245.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  245.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  245.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  245.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  245.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  245.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  245.15 +
  245.16  </ul>
  245.17  </div>
  245.18  
  245.19 @@ -72,13 +73,14 @@
  245.20  <ul class = "menu">
  245.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  245.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  245.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  245.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  245.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  245.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  245.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  245.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  245.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  245.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  245.31 +
  245.32  </ul>
  245.33  </div>
  245.34  
   246.1 --- a/artwork_descriptions/white_tail_buck_with_head_turned_three_quarter_pose_on_light_brown_marble_2007.html	Fri Feb 19 11:14:52 2010 -0500
   246.2 +++ b/artwork_descriptions/white_tail_buck_with_head_turned_three_quarter_pose_on_light_brown_marble_2007.html	Mon Feb 22 08:02:39 2010 -0500
   246.3 @@ -13,13 +13,14 @@
   246.4  <ul class = "menu">
   246.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   246.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   246.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   246.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   246.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  246.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  246.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  246.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  246.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  246.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  246.15 +
  246.16  </ul>
  246.17  </div>
  246.18  
  246.19 @@ -79,13 +80,14 @@
  246.20  <ul class = "menu">
  246.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  246.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  246.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  246.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  246.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  246.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  246.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  246.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  246.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  246.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  246.31 +
  246.32  </ul>
  246.33  </div>
  246.34  
   247.1 --- a/artwork_descriptions/white_tail_deer_upper_body_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   247.2 +++ b/artwork_descriptions/white_tail_deer_upper_body_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   247.3 @@ -13,13 +13,14 @@
   247.4  <ul class = "menu">
   247.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   247.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   247.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   247.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   247.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  247.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  247.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  247.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  247.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  247.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  247.15 +
  247.16  </ul>
  247.17  </div>
  247.18  
  247.19 @@ -72,13 +73,14 @@
  247.20  <ul class = "menu">
  247.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  247.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  247.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  247.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  247.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  247.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  247.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  247.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  247.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  247.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  247.31 +
  247.32  </ul>
  247.33  </div>
  247.34  
   248.1 --- a/artwork_descriptions/white_tail_trophy_deer_head_and_chest_on_beige_and_ochre_travertine_1999.html	Fri Feb 19 11:14:52 2010 -0500
   248.2 +++ b/artwork_descriptions/white_tail_trophy_deer_head_and_chest_on_beige_and_ochre_travertine_1999.html	Mon Feb 22 08:02:39 2010 -0500
   248.3 @@ -13,13 +13,14 @@
   248.4  <ul class = "menu">
   248.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   248.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   248.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   248.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   248.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  248.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  248.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  248.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  248.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  248.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  248.15 +
  248.16  </ul>
  248.17  </div>
  248.18  
  248.19 @@ -72,13 +73,14 @@
  248.20  <ul class = "menu">
  248.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  248.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  248.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  248.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  248.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  248.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  248.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  248.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  248.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  248.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  248.31 +
  248.32  </ul>
  248.33  </div>
  248.34  
   249.1 --- a/artwork_descriptions/whitetail_buck_head_and_chest_on_brown_and_rust_marble_1999_.html	Fri Feb 19 11:14:52 2010 -0500
   249.2 +++ b/artwork_descriptions/whitetail_buck_head_and_chest_on_brown_and_rust_marble_1999_.html	Mon Feb 22 08:02:39 2010 -0500
   249.3 @@ -13,13 +13,14 @@
   249.4  <ul class = "menu">
   249.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   249.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   249.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   249.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   249.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  249.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  249.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  249.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  249.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  249.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  249.15 +
  249.16  </ul>
  249.17  </div>
  249.18  
  249.19 @@ -72,13 +73,14 @@
  249.20  <ul class = "menu">
  249.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  249.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  249.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  249.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  249.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  249.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  249.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  249.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  249.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  249.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  249.31 +
  249.32  </ul>
  249.33  </div>
  249.34  
   250.1 --- a/artwork_descriptions/whitetail_buck_head_and_chest_on_ochre_1998.html	Fri Feb 19 11:14:52 2010 -0500
   250.2 +++ b/artwork_descriptions/whitetail_buck_head_and_chest_on_ochre_1998.html	Mon Feb 22 08:02:39 2010 -0500
   250.3 @@ -13,13 +13,14 @@
   250.4  <ul class = "menu">
   250.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   250.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   250.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   250.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   250.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  250.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  250.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  250.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  250.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  250.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  250.15 +
  250.16  </ul>
  250.17  </div>
  250.18  
  250.19 @@ -72,13 +73,14 @@
  250.20  <ul class = "menu">
  250.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  250.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  250.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  250.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  250.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  250.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  250.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  250.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  250.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  250.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  250.31 +
  250.32  </ul>
  250.33  </div>
  250.34  
   251.1 --- a/artwork_descriptions/whitetail_deer_standing_in_water_on_green_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   251.2 +++ b/artwork_descriptions/whitetail_deer_standing_in_water_on_green_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   251.3 @@ -13,13 +13,14 @@
   251.4  <ul class = "menu">
   251.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   251.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   251.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   251.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   251.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  251.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  251.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  251.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  251.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  251.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  251.15 +
  251.16  </ul>
  251.17  </div>
  251.18  
  251.19 @@ -72,13 +73,14 @@
  251.20  <ul class = "menu">
  251.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  251.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  251.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  251.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  251.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  251.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  251.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  251.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  251.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  251.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  251.31 +
  251.32  </ul>
  251.33  </div>
  251.34  
   252.1 --- a/artwork_descriptions/whitetail_deer_upper_body_on_beige_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   252.2 +++ b/artwork_descriptions/whitetail_deer_upper_body_on_beige_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   252.3 @@ -13,13 +13,14 @@
   252.4  <ul class = "menu">
   252.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   252.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   252.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   252.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   252.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  252.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  252.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  252.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  252.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  252.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  252.15 +
  252.16  </ul>
  252.17  </div>
  252.18  
  252.19 @@ -72,13 +73,14 @@
  252.20  <ul class = "menu">
  252.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  252.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  252.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  252.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  252.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  252.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  252.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  252.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  252.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  252.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  252.31 +
  252.32  </ul>
  252.33  </div>
  252.34  
   253.1 --- a/artwork_descriptions/wild_turkey_three-quarter_pose_gobbing_on_ochre_and_dark_brown_granite_1998.html	Fri Feb 19 11:14:52 2010 -0500
   253.2 +++ b/artwork_descriptions/wild_turkey_three-quarter_pose_gobbing_on_ochre_and_dark_brown_granite_1998.html	Mon Feb 22 08:02:39 2010 -0500
   253.3 @@ -13,13 +13,14 @@
   253.4  <ul class = "menu">
   253.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   253.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   253.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   253.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   253.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  253.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  253.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  253.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  253.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  253.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  253.15 +
  253.16  </ul>
  253.17  </div>
  253.18  
  253.19 @@ -72,13 +73,14 @@
  253.20  <ul class = "menu">
  253.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  253.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  253.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  253.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  253.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  253.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  253.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  253.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  253.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  253.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  253.31 +
  253.32  </ul>
  253.33  </div>
  253.34  
   254.1 --- a/artwork_descriptions/wood_duck_drake_head_and_chest_on_water_on_greenish_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   254.2 +++ b/artwork_descriptions/wood_duck_drake_head_and_chest_on_water_on_greenish_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   254.3 @@ -13,13 +13,14 @@
   254.4  <ul class = "menu">
   254.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   254.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   254.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   254.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   254.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  254.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  254.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  254.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  254.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  254.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  254.15 +
  254.16  </ul>
  254.17  </div>
  254.18  
  254.19 @@ -72,13 +73,14 @@
  254.20  <ul class = "menu">
  254.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  254.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  254.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  254.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  254.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  254.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  254.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  254.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  254.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  254.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  254.31 +
  254.32  </ul>
  254.33  </div>
  254.34  
   255.1 --- a/artwork_descriptions/wood_duck_full_standing_on_white_circular_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   255.2 +++ b/artwork_descriptions/wood_duck_full_standing_on_white_circular_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   255.3 @@ -13,13 +13,14 @@
   255.4  <ul class = "menu">
   255.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   255.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   255.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   255.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   255.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  255.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  255.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  255.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  255.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  255.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  255.15 +
  255.16  </ul>
  255.17  </div>
  255.18  
  255.19 @@ -72,13 +73,14 @@
  255.20  <ul class = "menu">
  255.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  255.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  255.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  255.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  255.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  255.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  255.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  255.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  255.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  255.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  255.31 +
  255.32  </ul>
  255.33  </div>
  255.34  
   256.1 --- a/artwork_descriptions/wood_duck_sitting_on_water_with_reflection_on_green_and_yellow_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   256.2 +++ b/artwork_descriptions/wood_duck_sitting_on_water_with_reflection_on_green_and_yellow_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   256.3 @@ -13,13 +13,14 @@
   256.4  <ul class = "menu">
   256.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   256.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   256.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   256.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   256.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  256.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  256.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  256.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  256.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  256.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  256.15 +
  256.16  </ul>
  256.17  </div>
  256.18  
  256.19 @@ -72,13 +73,14 @@
  256.20  <ul class = "menu">
  256.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  256.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  256.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  256.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  256.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  256.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  256.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  256.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  256.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  256.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  256.31 +
  256.32  </ul>
  256.33  </div>
  256.34  
   257.1 --- a/artwork_descriptions/wood_duck_standing_in_snow_on_light_brown_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   257.2 +++ b/artwork_descriptions/wood_duck_standing_in_snow_on_light_brown_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   257.3 @@ -13,13 +13,14 @@
   257.4  <ul class = "menu">
   257.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   257.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   257.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   257.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   257.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  257.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  257.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  257.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  257.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  257.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  257.15 +
  257.16  </ul>
  257.17  </div>
  257.18  
  257.19 @@ -72,13 +73,14 @@
  257.20  <ul class = "menu">
  257.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  257.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  257.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  257.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  257.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  257.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  257.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  257.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  257.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  257.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  257.31 +
  257.32  </ul>
  257.33  </div>
  257.34  
   258.1 --- a/artwork_descriptions/wood_duck_standing_on_branch_in_water_on_green_and_white_marble_2007.html	Fri Feb 19 11:14:52 2010 -0500
   258.2 +++ b/artwork_descriptions/wood_duck_standing_on_branch_in_water_on_green_and_white_marble_2007.html	Mon Feb 22 08:02:39 2010 -0500
   258.3 @@ -13,13 +13,14 @@
   258.4  <ul class = "menu">
   258.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   258.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   258.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   258.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   258.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  258.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  258.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  258.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  258.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  258.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  258.15 +
  258.16  </ul>
  258.17  </div>
  258.18  
  258.19 @@ -81,13 +82,14 @@
  258.20  <ul class = "menu">
  258.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  258.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  258.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  258.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  258.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  258.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  258.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  258.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  258.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  258.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  258.31 +
  258.32  </ul>
  258.33  </div>
  258.34  
   259.1 --- a/artwork_descriptions/yello_lab_with_canvasback_in_mouth_on_beige_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   259.2 +++ b/artwork_descriptions/yello_lab_with_canvasback_in_mouth_on_beige_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   259.3 @@ -13,13 +13,14 @@
   259.4  <ul class = "menu">
   259.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   259.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   259.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   259.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   259.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  259.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  259.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  259.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  259.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  259.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  259.15 +
  259.16  </ul>
  259.17  </div>
  259.18  
  259.19 @@ -72,13 +73,14 @@
  259.20  <ul class = "menu">
  259.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  259.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  259.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  259.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  259.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  259.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  259.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  259.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  259.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  259.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  259.31 +
  259.32  </ul>
  259.33  </div>
  259.34  
   260.1 --- a/artwork_descriptions/yellow_lab_head_and_chest_on_brown_pentagonal_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   260.2 +++ b/artwork_descriptions/yellow_lab_head_and_chest_on_brown_pentagonal_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   260.3 @@ -13,13 +13,14 @@
   260.4  <ul class = "menu">
   260.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   260.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   260.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   260.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   260.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  260.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  260.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  260.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  260.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  260.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  260.15 +
  260.16  </ul>
  260.17  </div>
  260.18  
  260.19 @@ -72,13 +73,14 @@
  260.20  <ul class = "menu">
  260.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  260.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  260.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  260.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  260.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  260.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  260.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  260.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  260.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  260.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  260.31 +
  260.32  </ul>
  260.33  </div>
  260.34  
   261.1 --- a/artwork_descriptions/yellow_lab_head_on_grey_and_pink_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   261.2 +++ b/artwork_descriptions/yellow_lab_head_on_grey_and_pink_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   261.3 @@ -13,13 +13,14 @@
   261.4  <ul class = "menu">
   261.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   261.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   261.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   261.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   261.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  261.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  261.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  261.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  261.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  261.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  261.15 +
  261.16  </ul>
  261.17  </div>
  261.18  
  261.19 @@ -72,13 +73,14 @@
  261.20  <ul class = "menu">
  261.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  261.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  261.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  261.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  261.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  261.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  261.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  261.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  261.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  261.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  261.31 +
  261.32  </ul>
  261.33  </div>
  261.34  
   262.1 --- a/artwork_descriptions/yellow_lab_head_with_bobwhite_quail_on_black_granite_1999.html	Fri Feb 19 11:14:52 2010 -0500
   262.2 +++ b/artwork_descriptions/yellow_lab_head_with_bobwhite_quail_on_black_granite_1999.html	Mon Feb 22 08:02:39 2010 -0500
   262.3 @@ -13,13 +13,14 @@
   262.4  <ul class = "menu">
   262.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   262.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   262.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   262.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   262.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  262.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  262.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  262.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  262.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  262.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  262.15 +
  262.16  </ul>
  262.17  </div>
  262.18  
  262.19 @@ -72,13 +73,14 @@
  262.20  <ul class = "menu">
  262.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  262.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  262.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  262.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  262.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  262.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  262.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  262.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  262.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  262.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  262.31 +
  262.32  </ul>
  262.33  </div>
  262.34  
   263.1 --- a/artwork_descriptions/yellow_lab_resting_on_grass_on_black_granite_with_copper_sparkles_1999.html	Fri Feb 19 11:14:52 2010 -0500
   263.2 +++ b/artwork_descriptions/yellow_lab_resting_on_grass_on_black_granite_with_copper_sparkles_1999.html	Mon Feb 22 08:02:39 2010 -0500
   263.3 @@ -13,13 +13,14 @@
   263.4  <ul class = "menu">
   263.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   263.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   263.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   263.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   263.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  263.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  263.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  263.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  263.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  263.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  263.15 +
  263.16  </ul>
  263.17  </div>
  263.18  
  263.19 @@ -72,13 +73,14 @@
  263.20  <ul class = "menu">
  263.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  263.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  263.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  263.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  263.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  263.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  263.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  263.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  263.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  263.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  263.31 +
  263.32  </ul>
  263.33  </div>
  263.34  
   264.1 --- a/artwork_descriptions/yellow_lab_retrieving_mallard_on_greenish_grey_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   264.2 +++ b/artwork_descriptions/yellow_lab_retrieving_mallard_on_greenish_grey_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   264.3 @@ -13,13 +13,14 @@
   264.4  <ul class = "menu">
   264.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   264.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   264.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   264.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   264.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  264.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  264.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  264.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  264.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  264.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  264.15 +
  264.16  </ul>
  264.17  </div>
  264.18  
  264.19 @@ -72,13 +73,14 @@
  264.20  <ul class = "menu">
  264.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  264.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  264.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  264.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  264.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  264.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  264.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  264.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  264.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  264.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  264.31 +
  264.32  </ul>
  264.33  </div>
  264.34  
   265.1 --- a/artwork_descriptions/yellow_lab_sitting_in_reeds_with_mallard_on_brown_and_white_marble_1999.html	Fri Feb 19 11:14:52 2010 -0500
   265.2 +++ b/artwork_descriptions/yellow_lab_sitting_in_reeds_with_mallard_on_brown_and_white_marble_1999.html	Mon Feb 22 08:02:39 2010 -0500
   265.3 @@ -13,13 +13,14 @@
   265.4  <ul class = "menu">
   265.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   265.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   265.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   265.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   265.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  265.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  265.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  265.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  265.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  265.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  265.15 +
  265.16  </ul>
  265.17  </div>
  265.18  
  265.19 @@ -72,13 +73,14 @@
  265.20  <ul class = "menu">
  265.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  265.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  265.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  265.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  265.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  265.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  265.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  265.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  265.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  265.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  265.31 +
  265.32  </ul>
  265.33  </div>
  265.34  
   266.1 --- a/artwork_descriptions/yellow_lab_with_quail_on_brown_marble_with_golden_lighting_1999.html	Fri Feb 19 11:14:52 2010 -0500
   266.2 +++ b/artwork_descriptions/yellow_lab_with_quail_on_brown_marble_with_golden_lighting_1999.html	Mon Feb 22 08:02:39 2010 -0500
   266.3 @@ -13,13 +13,14 @@
   266.4  <ul class = "menu">
   266.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   266.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   266.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   266.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   266.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  266.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  266.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  266.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  266.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  266.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  266.15 +
  266.16  </ul>
  266.17  </div>
  266.18  
  266.19 @@ -72,13 +73,14 @@
  266.20  <ul class = "menu">
  266.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  266.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  266.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  266.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  266.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  266.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  266.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  266.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  266.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  266.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  266.31 +
  266.32  </ul>
  266.33  </div>
  266.34  
   267.1 --- a/artwork_descriptions/young_chocolate_lab_head_with_mallard_on_flesh_colored_marble_1998.html	Fri Feb 19 11:14:52 2010 -0500
   267.2 +++ b/artwork_descriptions/young_chocolate_lab_head_with_mallard_on_flesh_colored_marble_1998.html	Mon Feb 22 08:02:39 2010 -0500
   267.3 @@ -13,13 +13,14 @@
   267.4  <ul class = "menu">
   267.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   267.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   267.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   267.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   267.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  267.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  267.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  267.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  267.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  267.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  267.15 +
  267.16  </ul>
  267.17  </div>
  267.18  
  267.19 @@ -72,13 +73,14 @@
  267.20  <ul class = "menu">
  267.21  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  267.22  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  267.23 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  267.24  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  267.25  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  267.26  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  267.27  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  267.28  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  267.29  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  267.30 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  267.31 +
  267.32  </ul>
  267.33  </div>
  267.34  
   268.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   268.2 +++ b/e2gallerypro/Installation.txt	Mon Feb 22 08:02:39 2010 -0500
   268.3 @@ -0,0 +1,1 @@
   268.4 +##################################################################
   268.5 #  EASY Installation Instructions
   268.6 ##################################################################
   268.7 1. Unzip file (Pretty sure you did that already since you're reading this...moving on)
   268.8 
   268.9 2. Open e2config.php and modify line 32: 'username' => 'password' Change username to the username you want, and same goes for the password. Save file
  268.10 
  268.11 3. Upload 'e2gallerypro' folder to your server and visit: http://yoursiteurl/e2gallerypro/ to view temporary gallery
  268.12 
  268.13 4. Visit http://yoursiteurl/e2gallerypro/e2upload/ and log in with your set username and password. (Note: the e2upload requires a server running PHP 5)
  268.14 
  268.15 5. Finished with simple install.
  268.16 
  268.17 
  268.18 
  268.19 ##################################################################
  268.20 #  Detailed Installation Instructions
  268.21 ##################################################################
  268.22 1. Unzip file (Pretty sure you did that already since you're reading this...moving on)
  268.23 
  268.24 2. Open e2config.php
  268.25 
  268.26 3. Edit the XML path (if desired).  Edit the PHP Version (if needed).  Edit $galleryDesign (if you want or bought a new design or created your own)
  268.27 
  268.28 4. If you plan to use the (E)2 Upload functionality, keep in mind that it requires your server to be running PHP 5. If you don't plan on using it, do not upload the e2upload folder.
  268.29 
  268.30 	A. Edit GALLERY_LOCATION and XML_LOCATION if you don't want it to be at the default location (I recommend keeping it the same)
  268.31 	
  268.32 	B. VERY IMPORTANT: Edit the login information for the (E)2 Upload.  Change the 'username' and 'password' to your desired settings:
  268.33 		
  268.34 		$LOGIN_INFORMATION = array(
  268.35   			'username' => 'password'
  268.36 		);
  268.37 	
  268.38 		If you want to have multiple login's then you'll seperate your username's and passwords with a comma, See Example:
  268.39 		
  268.40 		$LOGIN_INFORMATION = array(
  268.41   			'username1' => 'password1',
  268.42 			'username2' => 'password2',
  268.43 			'username3' => 'password3'
  268.44 		);
  268.45 	
  268.46 	C. USE_USERNAME defaults to TRUE keep this if you want a Username and Password for access to the (E)2 Upload false if you want Password only.
  268.47 	
  268.48 	D. LOGOUT_URL leave as index.php if you want them to be sent to the login screen on logout
  268.49 	
  268.50 	E. TIMEOUT_MINUTES Sets your log in time, if your idle for more then 30 min's it will ask for login info again. Set 0 to never be logged out
  268.51 	
  268.52 	F. TIMEOUT_CHECK_ACTIVITY checks for activity if you have a timeout setting.
  268.53 	
  268.54 5. Save e2config.php file
  268.55 
  268.56 6. Open js/setupvars.js file and edit the desired settings
  268.57 
  268.58 	A. If you plan to use Google Checkout, you'll need to input your Merchant Id from google checkout: http://checkout.google.com/support/sell/bin/answer.py?hl=en&answer=42963
  268.59 	
  268.60 	B. If you plan to use Paypal to sell your prints you'll need to create a Add to Cart button using the paypal button creator under the Merchant Services Tab. 
  268.61 	   Create an 'Add to Cart' button, it will output code for you to use, you'll need the 'hosted_button_id' and 'Menu option name' that you set using the button creator. 
  268.62 	   See http://www.e2interactive.com/e2-gallery-pro/tutorials/ for more help.
  268.63 
  268.64 7. Upload files to your server
  268.65 
  268.66 8. Visit http://yoursite.com/e2gallerypro/e2upload/ and log in.  Use the (E)2 Upload to upload your images, upload your XML file, and/or create your XML file (for image galleries only).
  268.67 
  268.68 9. Upload images, create XML and Visit http://yoursite.com/e2gallerypro/ to see your gallery.  Visit http://www.e2interactive.com/e2-gallery-pro/tutorials/ to see video walk through tutorails.
  268.69 	
  268.70 	
  268.71 \ No newline at end of file
   269.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   269.2 +++ b/e2gallerypro/LICENSE.txt	Mon Feb 22 08:02:39 2010 -0500
   269.3 @@ -0,0 +1,25 @@
   269.4 +// +------------------------------------------------------------------------+
   269.5 +// | (E)2 Gallery Pro						                                |
   269.6 +// +------------------------------------------------------------------------+
   269.7 +// | Copyright (c) E2 Interactive 2009. All rights reserved.                |
   269.8 +// | Version       1.2                                                      |
   269.9 +// | Last modified 08/06/09                                                 |
  269.10 +// | Email         contact@e2interactive.com                                |
  269.11 +// | Web           http://www.e2interactive.com                             |
  269.12 +// +------------------------------------------------------------------------+
  269.13 +// |                                                                        |
  269.14 +// | This software is provided 'as-is', without any expressed or implied    |
  269.15 +// | warranty. In no way will E2 Interactive or the author(s) be held       |
  269.16 +// | liable for any damages arising from the use of this software.          |
  269.17 +// |                                                                        |
  269.18 +// | Permission is granted to you (the purchaser) to use this software      |
  269.19 +// | as a developer to build (E)2 Gallery Pro for client websites and your	|
  269.20 +// | own personal websites you own.											|
  269.21 +// |           																|
  269.22 +// | It is not to be redistributed, sold to anyone else or used by anyone   |
  269.23 +// | but you (the purcheser as a developer)                                 |
  269.24 +// |                                                                        |
  269.25 +// | It didn't cost that much so please to give it away to others, have     |
  269.26 +// | them buy a copy, I hope you enjoy using this script.                   |
  269.27 +// |                                                                        |
  269.28 +// +------------------------------------------------------------------------+
  269.29 \ No newline at end of file
   270.1 Binary file e2gallerypro/design/e2gallerypro/backthumbs.png has changed
   271.1 Binary file e2gallerypro/design/e2gallerypro/bg.png has changed
   272.1 Binary file e2gallerypro/design/e2gallerypro/bubble.png has changed
   273.1 Binary file e2gallerypro/design/e2gallerypro/buybutton.png has changed
   274.1 Binary file e2gallerypro/design/e2gallerypro/buynow_bottom.png has changed
   275.1 Binary file e2gallerypro/design/e2gallerypro/buynow_middle.png has changed
   276.1 Binary file e2gallerypro/design/e2gallerypro/buynow_top.png has changed
   277.1 Binary file e2gallerypro/design/e2gallerypro/closebtn.png has changed
   278.1 Binary file e2gallerypro/design/e2gallerypro/controls_bg.png has changed
   279.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   279.2 +++ b/e2gallerypro/design/e2gallerypro/design.css	Mon Feb 22 08:02:39 2010 -0500
   279.3 @@ -0,0 +1,412 @@
   279.4 +body{
   279.5 +	background:#000;
   279.6 +}
   279.7 +#gallery #galleries #controls {
   279.8 +	height: 17px;
   279.9 +	padding: 3px;
  279.10 +	margin:0 auto;
  279.11 +	width:754px;
  279.12 +	border-bottom:1px solid #333;
  279.13 +	text-align:left;
  279.14 +	background-image: url(controls_bg.png);
  279.15 +	background-repeat: repeat-x;
  279.16 +	color:#333;
  279.17 +}
  279.18 +#gallery #thumbnails {
  279.19 +	height: 55px;
  279.20 +	text-align: center;
  279.21 +	width: 672px;
  279.22 +	margin: 0 auto 0;
  279.23 +	overflow: hidden;
  279.24 +	position: relative;
  279.25 +}
  279.26 +#gallery {
  279.27 +	font: 78% Arial, Helvetica, sans-serif;
  279.28 +	width: 800px;
  279.29 +	margin: 0 auto;
  279.30 +	height: 600px;
  279.31 +	position: relative;
  279.32 +	overflow: hidden;
  279.33 +	z-index: 1;
  279.34 +}
  279.35 +#gallery #galleries {
  279.36 +	background: #333 url(images_bg.png) repeat-x;
  279.37 +	position: absolute;
  279.38 +	left:19px;
  279.39 +	bottom: -575px;
  279.40 +	height: 598px;
  279.41 +	width: 760px;
  279.42 +	text-align: center;
  279.43 +	z-index: 50;
  279.44 +	cursor: pointer;
  279.45 +	border:1px solid #333;
  279.46 +}
  279.47 +#images {
  279.48 +	height: 508px;
  279.49 +	text-align: center;
  279.50 +	position: relative;
  279.51 +	width:760px;
  279.52 +	overflow: hidden;
  279.53 +	margin:0 auto 0;
  279.54 +	background: #333 url(images_bg.png) repeat-x;
  279.55 +	border-left: 1px solid #333;
  279.56 +	border-right: 1px solid #333;
  279.57 +	border-top: solid #333 1px;
  279.58 +}
  279.59 +
  279.60 +#imagewrap {
  279.61 +	position:absolute;
  279.62 +	margin:0 auto;
  279.63 +	width: 0px;
  279.64 +	height: 0px;
  279.65 +	top: 200px;
  279.66 +	left: 380px;
  279.67 +}
  279.68 +#imgsrc{
  279.69 +	cursor: pointer;
  279.70 +}
  279.71 +#thumbnailwrap {
  279.72 +	left: 0px;
  279.73 +	position: absolute;
  279.74 +}
  279.75 +.thumbnail {
  279.76 +	background: #333;
  279.77 +	margin: 7px 6px;
  279.78 +	float: left;
  279.79 +	height: 42px;
  279.80 +	width: 42px;
  279.81 +	border: solid #333 1px;
  279.82 +	cursor: pointer;
  279.83 +	overflow:hidden;
  279.84 +}
  279.85 +#gallery #thumbbox {
  279.86 +	width: 760px;
  279.87 +	margin:0 auto;
  279.88 +	position:relative;
  279.89 +	border:1px solid #333;
  279.90 +	background: url(thumbwrap.png) no-repeat;
  279.91 +	padding: 8px 0 0 0;
  279.92 +	overflow: hidden;
  279.93 +	height: 57px;
  279.94 +}
  279.95 +#loading {
  279.96 +	height: 87px;
  279.97 +	width: 150px;
  279.98 +	position: absolute;
  279.99 +	background-image: url(loading.png);
 279.100 +	background-repeat: no-repeat;
 279.101 +	background-position: center center;
 279.102 +	z-index: 8888;
 279.103 +	left: 311px;
 279.104 +	top: 189px;
 279.105 +}
 279.106 +.gallery {
 279.107 +	float: left;
 279.108 +	height: 200px;
 279.109 +	width: 250px;
 279.110 +	background-image: url(gallery_bg.png);
 279.111 +	background-repeat: no-repeat;
 279.112 +	background-position: center center;
 279.113 +	position: relative;
 279.114 +}
 279.115 +#gallery #next {
 279.116 +	height: 510px;
 279.117 +	width: 19px;
 279.118 +	background-image: url(next.png);
 279.119 +	background-repeat: no-repeat;
 279.120 +	background-position: right center;
 279.121 +	position: absolute;
 279.122 +	right: 0px;
 279.123 +	cursor: pointer;
 279.124 +	z-index: 5;
 279.125 +}
 279.126 +#gallery #previous {
 279.127 +	height: 510px;
 279.128 +	width: 19px;
 279.129 +	background-image: url(prev.png);
 279.130 +	background-repeat: no-repeat;
 279.131 +	background-position: left center;
 279.132 +	position: absolute;
 279.133 +	left: 0px;
 279.134 +	cursor: pointer;
 279.135 +	z-index: 5;
 279.136 +}
 279.137 +#loading #loadingbar {
 279.138 +	position: relative;
 279.139 +	width: 100%;
 279.140 +	height: 87px;
 279.141 +}
 279.142 +#loading #loadingbar #bar {
 279.143 +	position: absolute;
 279.144 +	bottom: 19px;
 279.145 +	left: 44px;
 279.146 +	width: 50px;
 279.147 +	height: 50px;
 279.148 +}
 279.149 +#largeimage {
 279.150 +	height: 0px;
 279.151 +	width: 0px;
 279.152 +	position: absolute;
 279.153 +	z-index: 99;
 279.154 +	overflow: visible;
 279.155 +}
 279.156 +#backdrop {
 279.157 +	background-color: #000;
 279.158 +	height: 0px;
 279.159 +	width: 0px;
 279.160 +	position: absolute;
 279.161 +	z-index: 98;
 279.162 +	left: 50%;
 279.163 +	top: 0px;
 279.164 +	cursor:pointer;
 279.165 +}
 279.166 +#largeimage #closebtn {
 279.167 +	background-image: url(closebtn.png);
 279.168 +	background-repeat: no-repeat;
 279.169 +	background-position: center center;
 279.170 +	height: 28px;
 279.171 +	width: 28px;
 279.172 +	z-index: 100;
 279.173 +	position: absolute;
 279.174 +	left: -8px;
 279.175 +	top: -8px;
 279.176 +	cursor:pointer;
 279.177 +}
 279.178 +#galleryset .gallery h3 {
 279.179 +	font-size: 1.5em;
 279.180 +	font-weight: bold;
 279.181 +	color: #666666;
 279.182 +	margin: 10px 15px;
 279.183 +	padding: 0px;
 279.184 +}
 279.185 +.tooltips{
 279.186 +	z-index: 9999999;
 279.187 +}
 279.188 +.tip {
 279.189 +	font:Arial, Helvetica, sans-serif;
 279.190 +	color: #CCC;
 279.191 +	width: 220px;
 279.192 +}
 279.193 +.tip-top {
 279.194 +	margin: 0;
 279.195 +	color: #CCCCCC;
 279.196 +	padding: 37px 30px 0px 30px;
 279.197 +	background: url(tip-top.png) top left;
 279.198 +}
 279.199 +.tip-title{
 279.200 +	font-weight:bold;
 279.201 +	font-size: 1.3em;
 279.202 +	margin: 0;
 279.203 +	color: #FFF;
 279.204 +	padding: 0px 30px 3px 30px;
 279.205 +	background: url(tip-middle.png) bottom right;
 279.206 +}
 279.207 +.tip-text {
 279.208 +	font-size: 1em;
 279.209 +	padding: 5px 30px 0px 30px;
 279.210 +	background: url(tip-middle.png) bottom right;
 279.211 +}
 279.212 +.tip-bottom {
 279.213 +	padding: 0px 25px 42px;
 279.214 +	background: url(tip-bottom.png) bottom right;
 279.215 +}
 279.216 +.minitooltips{
 279.217 +	z-index: 9999999;
 279.218 +}
 279.219 +.minitooltips .tip {
 279.220 +	color: #FFF;
 279.221 +	width: 130px;
 279.222 +}
 279.223 +.minitooltips .tip-top {
 279.224 +	margin: 0;
 279.225 +	color: #CCCCCC;
 279.226 +	padding: 9px 12px 0px 12px;
 279.227 +	background: url(minitop.png) top left;
 279.228 +}
 279.229 +.minitooltips .tip-title{
 279.230 +	font:Georgia, "Times New Roman", Times, serif;
 279.231 +	text-align:center;
 279.232 +	font-weight:normal;
 279.233 +	font-size: .8em;
 279.234 +	margin: 0;
 279.235 +	color: #FFF;
 279.236 +	padding: 0px 12px 3px 12px;
 279.237 +	background: url(minimiddle.png) bottom right;
 279.238 +}
 279.239 +.minitooltips .tip-text {
 279.240 +	text-align:center;
 279.241 +	font-size: .9em;
 279.242 +	padding: 8px 12px 0px 12px;
 279.243 +	background: url(minimiddle.png) bottom right;
 279.244 +}
 279.245 +.minitooltips .tip-bottom {
 279.246 +	padding: 0px 12px 8px;
 279.247 +	background: url(minibottom.png) bottom right;
 279.248 +}
 279.249 +.gallery .galleryimg {
 279.250 +	position: absolute;
 279.251 +	left: 23px;
 279.252 +	top: 37px;
 279.253 +}
 279.254 +#gallery #thumbbox #thumbleft {
 279.255 +	width: 40px;
 279.256 +	height: 65px;
 279.257 +	left: 0px;
 279.258 +	position: absolute;
 279.259 +	background: url(left_arrow.png) no-repeat center center;
 279.260 +	visibility: hidden;
 279.261 +	cursor: pointer;
 279.262 +}
 279.263 +#gallery #thumbbox #thumbright {
 279.264 +	height: 65px;
 279.265 +	width: 40px;
 279.266 +	position: absolute;
 279.267 +	background: url(right_arrow.png) no-repeat center center;
 279.268 +	right: 0px;
 279.269 +	visibility: hidden;
 279.270 +	cursor: pointer;
 279.271 +}
 279.272 +#gallery #images #smallmessage {
 279.273 +	background-image: url(message-popup.png);
 279.274 +	background-repeat: no-repeat;
 279.275 +	background-position: center top;
 279.276 +	position: absolute;
 279.277 +	bottom: -85px;
 279.278 +	height: 76px;
 279.279 +	width: 205px;
 279.280 +	text-align: center;
 279.281 +	padding: 8px 5px 0px;
 279.282 +	color: #CCC;
 279.283 +	font-size: 0.8em;
 279.284 +}
 279.285 +#gallery #images #imageinfo {
 279.286 +	position: absolute;
 279.287 +	bottom: -300px;
 279.288 +	height: 250px;
 279.289 +	width: 90%;
 279.290 +	text-align: center;
 279.291 +	padding: 5px 5px 0px;
 279.292 +	color: #333;
 279.293 +	font-size: 0.8em;
 279.294 +	
 279.295 +}
 279.296 +#largeimage #lrgloader {
 279.297 +	overflow: hidden;
 279.298 +	
 279.299 +	
 279.300 +}
 279.301 +#largeimage #lrgwrap {
 279.302 +	overflow: hidden;
 279.303 +	border: 1px solid #333;
 279.304 +	background:#000;
 279.305 +}
 279.306 +#imageinfo #infoloader {
 279.307 +	font-size: 1.2em;
 279.308 +	color: #E1E1E1;
 279.309 +	text-align: left;
 279.310 +	margin: 0px;
 279.311 +	position: releative;
 279.312 +}
 279.313 +#infoloader h2 {
 279.314 +	font-size: 1.4em;
 279.315 +	font-weight: bold;
 279.316 +	color: #333;
 279.317 +	margin: 0px;
 279.318 +	padding: 0px;
 279.319 +	text-shadow:#000;
 279.320 +}
 279.321 +#infoloader .copyright {
 279.322 +	font-size: .8em;
 279.323 +}
 279.324 +#infoloader .author {
 279.325 +	font-size: .8em;
 279.326 +}
 279.327 +.right {
 279.328 +	float: right;
 279.329 +}
 279.330 +#fsbox {
 279.331 +	width: 379px;
 279.332 +	margin: 0 auto;
 279.333 +	overflow:hidden;
 279.334 +	height:300px;
 279.335 +	z-index: 51;
 279.336 +	position: absolute;
 279.337 +	bottom: -350px;
 279.338 +	left: 200px;
 279.339 +	color: #FFF;
 279.340 +}
 279.341 +#fsbox #fsbutton {
 279.342 +	color: #000;
 279.343 +	background: url(buybutton.png) no-repeat center bottom;
 279.344 +	height: 15px;
 279.345 +	text-align: center;
 279.346 +	padding: 2px 0 0 0;
 279.347 +	margin:2px 0 6px;
 279.348 +	font-size: 0.8em;
 279.349 +	position: relative;
 279.350 +	cursor:pointer;
 279.351 +}
 279.352 +#fsbox #fstop {
 279.353 +	background: url(buynow_top.png) no-repeat center top;
 279.354 +	height: 19px;
 279.355 +	text-align: center;
 279.356 +	padding: 0;
 279.357 +	margin:0;
 279.358 +}
 279.359 +#fsbox #forsale {
 279.360 +	background-image: url(buynow_middle.png);
 279.361 +	background-repeat: repeat-y;
 279.362 +	margin: 0px;
 279.363 +	padding: 0 15px 20px;
 279.364 +	position:relative;
 279.365 +}
 279.366 +#fsbox #forsale img{
 279.367 +	padding: 0 10px 10px;
 279.368 +		
 279.369 +}
 279.370 +#fsbox hr {
 279.371 +	clear:both;
 279.372 +	visibility:hidden;
 279.373 +}
 279.374 +#fsbox  #fsclose{
 279.375 +	background-image: url(closebtn.png);
 279.376 +	background-repeat: no-repeat;
 279.377 +	background-position: center center;
 279.378 +	height: 28px;
 279.379 +	width: 28px;
 279.380 +	z-index: 220000;
 279.381 +	cursor:pointer;
 279.382 +	position: absolute;
 279.383 +	left: 0px;
 279.384 +	top: 15px;
 279.385 +}
 279.386 +#purchasebtn{
 279.387 +	font-weight:bold;
 279.388 +	text-align:center;
 279.389 +	margin:10px;
 279.390 +	padding:11px 0 0 5px;
 279.391 +	position:absolute;
 279.392 +	right:15px;
 279.393 +	top:0px;
 279.394 +}
 279.395 +#gallery #galleries #galleryset {
 279.396 +	text-align: left;
 279.397 +	width: 760px;
 279.398 +	margin: 0 auto;
 279.399 +}
 279.400 +#thumbnailPopUp{
 279.401 +	z-index:1;
 279.402 +	visibility:hidden;
 279.403 +	background:url(pop_arrow.png) no-repeat center bottom;
 279.404 +	padding-bottom:8px;
 279.405 +	position:absolute;
 279.406 +	top:0;
 279.407 +	left:-10000px;
 279.408 +}
 279.409 +#thumbnailPopUp img{
 279.410 +	margin:0;
 279.411 +	padding:0;
 279.412 +	background:#333;
 279.413 +	border:#FFF solid 3px;
 279.414 +}
 279.415 +.clear{clear:both;}
   280.1 Binary file e2gallerypro/design/e2gallerypro/flash.png has changed
   281.1 Binary file e2gallerypro/design/e2gallerypro/gallery_bg.png has changed
   282.1 Binary file e2gallerypro/design/e2gallerypro/gallery_view.png has changed
   283.1 Binary file e2gallerypro/design/e2gallerypro/images_bg.png has changed
   284.1 Binary file e2gallerypro/design/e2gallerypro/infobox.png has changed
   285.1 Binary file e2gallerypro/design/e2gallerypro/left_arrow.png has changed
   286.1 Binary file e2gallerypro/design/e2gallerypro/loading.png has changed
   287.1 Binary file e2gallerypro/design/e2gallerypro/loading_bar.gif has changed
   288.1 Binary file e2gallerypro/design/e2gallerypro/loading_hill.gif has changed
   289.1 Binary file e2gallerypro/design/e2gallerypro/message-popup.png has changed
   290.1 Binary file e2gallerypro/design/e2gallerypro/minibottom.png has changed
   291.1 Binary file e2gallerypro/design/e2gallerypro/minimiddle.png has changed
   292.1 Binary file e2gallerypro/design/e2gallerypro/minitop.png has changed
   293.1 Binary file e2gallerypro/design/e2gallerypro/morethumbs.png has changed
   294.1 Binary file e2gallerypro/design/e2gallerypro/next_prev_bg.png has changed
   295.1 Binary file e2gallerypro/design/e2gallerypro/pause.png has changed
   296.1 Binary file e2gallerypro/design/e2gallerypro/play.png has changed
   297.1 Binary file e2gallerypro/design/e2gallerypro/pop_arrow.png has changed
   298.1 Binary file e2gallerypro/design/e2gallerypro/previous.png has changed
   299.1 Binary file e2gallerypro/design/e2gallerypro/purchase_btn.png has changed
   300.1 Binary file e2gallerypro/design/e2gallerypro/quicktime.png has changed
   301.1 Binary file e2gallerypro/design/e2gallerypro/right_arrow.png has changed
   302.1 Binary file e2gallerypro/design/e2gallerypro/thumbbox.png has changed
   303.1 Binary file e2gallerypro/design/e2gallerypro/thumbsbg.png has changed
   304.1 Binary file e2gallerypro/design/e2gallerypro/thumbwrap.gif has changed
   305.1 Binary file e2gallerypro/design/e2gallerypro/thumbwrap.png has changed
   306.1 Binary file e2gallerypro/design/e2gallerypro/tip-bottom.png has changed
   307.1 Binary file e2gallerypro/design/e2gallerypro/tip-middle.png has changed
   308.1 Binary file e2gallerypro/design/e2gallerypro/tip-top.png has changed
   309.1 Binary file e2gallerypro/design/e2gallerypro/tip_bottom.png has changed
   310.1 Binary file e2gallerypro/design/e2gallerypro/tip_middle.png has changed
   311.1 Binary file e2gallerypro/design/e2gallerypro/tip_top.png has changed
   312.1 Binary file e2gallerypro/design/e2simple/backthumbs.png has changed
   313.1 Binary file e2gallerypro/design/e2simple/bubble.png has changed
   314.1 Binary file e2gallerypro/design/e2simple/buybutton.png has changed
   315.1 Binary file e2gallerypro/design/e2simple/buynow_bottom.png has changed
   316.1 Binary file e2gallerypro/design/e2simple/buynow_middle.png has changed
   317.1 Binary file e2gallerypro/design/e2simple/buynow_top.png has changed
   318.1 Binary file e2gallerypro/design/e2simple/closebtn.png has changed
   319.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   319.2 +++ b/e2gallerypro/design/e2simple/design.css	Mon Feb 22 08:02:39 2010 -0500
   319.3 @@ -0,0 +1,411 @@
   319.4 +body{
   319.5 +}
   319.6 +#gallery #galleries #controls {
   319.7 +	height: 17px;
   319.8 +	padding: 3px;
   319.9 +	margin:0 auto;
  319.10 +	width:754px;
  319.11 +	border-bottom:1px solid #333;
  319.12 +	text-align:left;
  319.13 +	background-image: url(controls_bg.png);
  319.14 +	background-repeat: repeat-x;
  319.15 +	color:#333;
  319.16 +}
  319.17 +#gallery #thumbnails {
  319.18 +	height: 57px;
  319.19 +	text-align: center;
  319.20 +	width: 672px;
  319.21 +	margin: 0 auto 0;
  319.22 +	overflow: hidden;
  319.23 +	position: relative;
  319.24 +}
  319.25 +#gallery {
  319.26 +	font: 78% Arial, Helvetica, sans-serif;
  319.27 +	width: 800px;
  319.28 +	margin: 0 auto;
  319.29 +	height: 600px;
  319.30 +	position: relative;
  319.31 +	overflow: hidden;
  319.32 +	z-index: 1;
  319.33 +}
  319.34 +#gallery #galleries {
  319.35 +	background: #FFF url(images_bg.png) repeat-x;
  319.36 +	position: absolute;
  319.37 +	left:19px;
  319.38 +	bottom: -575px;
  319.39 +	height: 598px;
  319.40 +	width: 760px;
  319.41 +	text-align: center;
  319.42 +	z-index: 50;
  319.43 +	cursor: pointer;
  319.44 +	border:1px solid #333;
  319.45 +}
  319.46 +#images {
  319.47 +	height: 508px;
  319.48 +	text-align: center;
  319.49 +	position: relative;
  319.50 +	width:760px;
  319.51 +	overflow: hidden;
  319.52 +	margin:0 auto 0;
  319.53 +	background: url(images_bg.png) repeat-x;
  319.54 +	border-left: 1px solid #333;
  319.55 +	border-right: 1px solid #333;
  319.56 +	border-top: solid #333 1px;
  319.57 +}
  319.58 +
  319.59 +#imagewrap {
  319.60 +	background: #E1E1E1;
  319.61 +	position:absolute;
  319.62 +	margin:0 auto;
  319.63 +	width: 0px;
  319.64 +	height: 0px;
  319.65 +	top: 200px;
  319.66 +	left: 380px;
  319.67 +}
  319.68 +#imgsrc{
  319.69 +	cursor: pointer;
  319.70 +}
  319.71 +#thumbnailwrap {
  319.72 +	left: 0px;
  319.73 +	position: absolute;
  319.74 +}
  319.75 +.thumbnail {
  319.76 +	margin: 7px 6px;
  319.77 +	float: left;
  319.78 +	height: 42px;
  319.79 +	width: 42px;
  319.80 +	border: solid #333 1px;
  319.81 +	cursor: pointer;
  319.82 +	overflow:hidden;
  319.83 +}
  319.84 +#gallery #thumbbox {
  319.85 +	width: 760px;
  319.86 +	margin:0 auto;
  319.87 +	position:relative;
  319.88 +	border:1px solid #333;
  319.89 +	background: url(thumbwrap.png) no-repeat;
  319.90 +	padding: 8px 0 0 0;
  319.91 +	overflow: hidden;
  319.92 +	height: 57px;
  319.93 +}
  319.94 +#loading {
  319.95 +	height: 87px;
  319.96 +	width: 150px;
  319.97 +	position: absolute;
  319.98 +	background-image: url(loading.png);
  319.99 +	background-repeat: no-repeat;
 319.100 +	background-position: center center;
 319.101 +	z-index: 8888;
 319.102 +	left: 311px;
 319.103 +	top: 189px;
 319.104 +}
 319.105 +.gallery {
 319.106 +	float: left;
 319.107 +	height: 200px;
 319.108 +	width: 250px;
 319.109 +	background-image: url(gallery_bg.png);
 319.110 +	background-repeat: no-repeat;
 319.111 +	background-position: center center;
 319.112 +	position: relative;
 319.113 +}
 319.114 +#gallery #next {
 319.115 +	height: 510px;
 319.116 +	width: 19px;
 319.117 +	background-image: url(next.png);
 319.118 +	background-repeat: no-repeat;
 319.119 +	background-position: right center;
 319.120 +	position: absolute;
 319.121 +	right: 0px;
 319.122 +	cursor: pointer;
 319.123 +	z-index: 5;
 319.124 +}
 319.125 +#gallery #previous {
 319.126 +	height: 510px;
 319.127 +	width: 19px;
 319.128 +	background-image: url(prev.png);
 319.129 +	background-repeat: no-repeat;
 319.130 +	background-position: left center;
 319.131 +	position: absolute;
 319.132 +	left: 0px;
 319.133 +	cursor: pointer;
 319.134 +	z-index: 5;
 319.135 +}
 319.136 +#loading #loadingbar {
 319.137 +	position: relative;
 319.138 +	width: 100%;
 319.139 +	height: 87px;
 319.140 +}
 319.141 +#loading #loadingbar #bar {
 319.142 +	position: absolute;
 319.143 +	bottom: 19px;
 319.144 +	left: 44px;
 319.145 +	width: 50px;
 319.146 +	height: 50px;
 319.147 +}
 319.148 +#largeimage {
 319.149 +	height: 0px;
 319.150 +	width: 0px;
 319.151 +	position: absolute;
 319.152 +	z-index: 99;
 319.153 +	overflow: visible;
 319.154 +}
 319.155 +#backdrop {
 319.156 +	background-color: #000;
 319.157 +	height: 0px;
 319.158 +	width: 0px;
 319.159 +	position: absolute;
 319.160 +	z-index: 98;
 319.161 +	left: 50%;
 319.162 +	top: 0px;
 319.163 +	cursor:pointer;
 319.164 +}
 319.165 +#largeimage #closebtn {
 319.166 +	background-image: url(closebtn.png);
 319.167 +	background-repeat: no-repeat;
 319.168 +	background-position: center center;
 319.169 +	height: 28px;
 319.170 +	width: 28px;
 319.171 +	z-index: 100;
 319.172 +	position: absolute;
 319.173 +	left: -8px;
 319.174 +	top: -8px;
 319.175 +	cursor:pointer;
 319.176 +}
 319.177 +#galleryset .gallery h3 {
 319.178 +	font-size: 1.5em;
 319.179 +	font-weight: bold;
 319.180 +	color: #666666;
 319.181 +	margin: 10px 15px;
 319.182 +	padding: 0px;
 319.183 +}
 319.184 +.tooltips{
 319.185 +	z-index: 9999999;
 319.186 +}
 319.187 +.tip {
 319.188 +	font:Arial, Helvetica, sans-serif;
 319.189 +	color: #CCC;
 319.190 +	width: 220px;
 319.191 +}
 319.192 +.tip-top {
 319.193 +	margin: 0;
 319.194 +	color: #CCCCCC;
 319.195 +	padding: 37px 30px 0px 30px;
 319.196 +	background: url(tip-top.png) top left;
 319.197 +}
 319.198 +.tip-title{
 319.199 +	font-weight:bold;
 319.200 +	font-size: 1.3em;
 319.201 +	margin: 0;
 319.202 +	color: #FFF;
 319.203 +	padding: 0px 30px 3px 30px;
 319.204 +	background: url(tip-middle.png) bottom right;
 319.205 +}
 319.206 +.tip-text {
 319.207 +	font-size: 1em;
 319.208 +	padding: 5px 30px 0px 30px;
 319.209 +	background: url(tip-middle.png) bottom right;
 319.210 +}
 319.211 +.tip-bottom {
 319.212 +	padding: 0px 25px 42px;
 319.213 +	background: url(tip-bottom.png) bottom right;
 319.214 +}
 319.215 +.minitooltips{
 319.216 +	z-index: 9999999;
 319.217 +}
 319.218 +.minitooltips .tip {
 319.219 +	color: #FFF;
 319.220 +	width: 130px;
 319.221 +}
 319.222 +.minitooltips .tip-top {
 319.223 +	margin: 0;
 319.224 +	color: #CCCCCC;
 319.225 +	padding: 9px 12px 0px 12px;
 319.226 +	background: url(minitop.png) top left;
 319.227 +}
 319.228 +.minitooltips .tip-title{
 319.229 +	font:Georgia, "Times New Roman", Times, serif;
 319.230 +	text-align:center;
 319.231 +	font-weight:normal;
 319.232 +	font-size: .8em;
 319.233 +	margin: 0;
 319.234 +	color: #FFF;
 319.235 +	padding: 0px 12px 3px 12px;
 319.236 +	background: url(minimiddle.png) bottom right;
 319.237 +}
 319.238 +.minitooltips .tip-text {
 319.239 +	text-align:center;
 319.240 +	font-size: .9em;
 319.241 +	padding: 8px 12px 0px 12px;
 319.242 +	background: url(minimiddle.png) bottom right;
 319.243 +}
 319.244 +.minitooltips .tip-bottom {
 319.245 +	padding: 0px 12px 8px;
 319.246 +	background: url(minibottom.png) bottom right;
 319.247 +}
 319.248 +.gallery .galleryimg {
 319.249 +	position: absolute;
 319.250 +	left: 23px;
 319.251 +	top: 37px;
 319.252 +}
 319.253 +#gallery #thumbbox #thumbleft {
 319.254 +	width: 40px;
 319.255 +	height: 65px;
 319.256 +	left: 0px;
 319.257 +	position: absolute;
 319.258 +	background: url(left_arrow.png) no-repeat center center;
 319.259 +	visibility: hidden;
 319.260 +	cursor: pointer;
 319.261 +}
 319.262 +#gallery #thumbbox #thumbright {
 319.263 +	height: 65px;
 319.264 +	width: 40px;
 319.265 +	position: absolute;
 319.266 +	background: url(right_arrow.png) no-repeat center center;
 319.267 +	right: 0px;
 319.268 +	visibility: hidden;
 319.269 +	cursor: pointer;
 319.270 +}
 319.271 +#gallery #images #smallmessage {
 319.272 +	background-image: url(message-popup.png);
 319.273 +	background-repeat: no-repeat;
 319.274 +	background-position: center top;
 319.275 +	position: absolute;
 319.276 +	bottom: -85px;
 319.277 +	height: 76px;
 319.278 +	width: 205px;
 319.279 +	text-align: center;
 319.280 +	padding: 8px 5px 0px;
 319.281 +	color: #CCC;
 319.282 +	font-size: 0.8em;
 319.283 +}
 319.284 +#gallery #images #imageinfo {
 319.285 +	position: absolute;
 319.286 +	bottom: -300px;
 319.287 +	height: 250px;
 319.288 +	width: 90%;
 319.289 +	text-align: center;
 319.290 +	padding: 5px 5px 0px;
 319.291 +	color: #333;
 319.292 +	font-size: 0.8em;
 319.293 +	left: 0px;	
 319.294 +}
 319.295 +#largeimage #lrgloader {
 319.296 +	overflow: hidden;
 319.297 +	
 319.298 +	
 319.299 +}
 319.300 +#largeimage #lrgwrap {
 319.301 +	overflow: hidden;
 319.302 +	border: 1px solid #333;
 319.303 +	background: #FFF url(images_bg.png) repeat-x;
 319.304 +}
 319.305 +#imageinfo #infoloader {
 319.306 +	font-size: 1.2em;
 319.307 +	color: #E1E1E1;
 319.308 +	text-align: left;
 319.309 +	margin: 0px;
 319.310 +	position: releative;
 319.311 +}
 319.312 +#infoloader h2 {
 319.313 +	font-size: 1.4em;
 319.314 +	font-weight: bold;
 319.315 +	color: #333;
 319.316 +	margin: 0px;
 319.317 +	padding: 0px;
 319.318 +	text-shadow:#000;
 319.319 +}
 319.320 +#infoloader .copyright {
 319.321 +	font-size: .8em;
 319.322 +}
 319.323 +#infoloader .author {
 319.324 +	font-size: .8em;
 319.325 +}
 319.326 +.right {
 319.327 +	float: right;
 319.328 +}
 319.329 +#fsbox {
 319.330 +	width: 379px;
 319.331 +	margin: 0 auto;
 319.332 +	overflow:hidden;
 319.333 +	height:300px;
 319.334 +	z-index: 51;
 319.335 +	position: absolute;
 319.336 +	bottom: -350px;
 319.337 +	left: 200px;
 319.338 +	color: #FFF;
 319.339 +}
 319.340 +#fsbox #fsbutton {
 319.341 +	color: #000;
 319.342 +	background: url(buybutton.png) no-repeat center bottom;
 319.343 +	height: 15px;
 319.344 +	text-align: center;
 319.345 +	padding: 2px 0 0 0;
 319.346 +	margin:2px 0 6px;
 319.347 +	font-size: 0.8em;
 319.348 +	position: relative;
 319.349 +	cursor:pointer;
 319.350 +}
 319.351 +#fsbox #fstop {
 319.352 +	background: url(buynow_top.png) no-repeat center top;
 319.353 +	height: 19px;
 319.354 +	text-align: center;
 319.355 +	padding: 0;
 319.356 +	margin:0;
 319.357 +}
 319.358 +#fsbox #forsale {
 319.359 +	background-image: url(buynow_middle.png);
 319.360 +	background-repeat: repeat-y;
 319.361 +	margin: 0px;
 319.362 +	padding: 0 15px 20px;
 319.363 +	position:relative;
 319.364 +}
 319.365 +#fsbox #forsale img{
 319.366 +	padding: 0 10px 10px;
 319.367 +		
 319.368 +}
 319.369 +#fsbox hr {
 319.370 +	clear:both;
 319.371 +	visibility:hidden;
 319.372 +}
 319.373 +#fsbox  #fsclose{
 319.374 +	background-image: url(closebtn.png);
 319.375 +	background-repeat: no-repeat;
 319.376 +	background-position: center center;
 319.377 +	height: 28px;
 319.378 +	width: 28px;
 319.379 +	z-index: 220000;
 319.380 +	cursor:pointer;
 319.381 +	position: absolute;
 319.382 +	left: 0px;
 319.383 +	top: 15px;
 319.384 +}
 319.385 +#purchasebtn{
 319.386 +	font-weight:bold;
 319.387 +	text-align:center;
 319.388 +	margin:10px;
 319.389 +	padding:11px 0 0 5px;
 319.390 +	position:absolute;
 319.391 +	right:15px;
 319.392 +	top:0px;
 319.393 +}
 319.394 +#gallery #galleries #galleryset {
 319.395 +	text-align: left;
 319.396 +	width: 760px;
 319.397 +	margin: 0 auto;
 319.398 +}
 319.399 +#thumbnailPopUp{
 319.400 +	z-index:1;
 319.401 +	visibility:hidden;
 319.402 +	background:url(pop_arrow.png) no-repeat center bottom;
 319.403 +	padding-bottom:8px;
 319.404 +	position:absolute;
 319.405 +	top:0;
 319.406 +	left:-10000px;
 319.407 +}
 319.408 +#thumbnailPopUp img{
 319.409 +	margin:0;
 319.410 +	padding:0;
 319.411 +	background:#333;
 319.412 +	border:#FFF solid 3px;
 319.413 +}
 319.414 +.clear{clear:both;}
   320.1 Binary file e2gallerypro/design/e2simple/flash.png has changed
   321.1 Binary file e2gallerypro/design/e2simple/gallery_bg.png has changed
   322.1 Binary file e2gallerypro/design/e2simple/gallery_view.png has changed
   323.1 Binary file e2gallerypro/design/e2simple/images_bg.png has changed
   324.1 Binary file e2gallerypro/design/e2simple/infobox.png has changed
   325.1 Binary file e2gallerypro/design/e2simple/loading.png has changed
   326.1 Binary file e2gallerypro/design/e2simple/loading_hill.gif has changed
   327.1 Binary file e2gallerypro/design/e2simple/message-popup.png has changed
   328.1 Binary file e2gallerypro/design/e2simple/minibottom.png has changed
   329.1 Binary file e2gallerypro/design/e2simple/minimiddle.png has changed
   330.1 Binary file e2gallerypro/design/e2simple/minitop.png has changed
   331.1 Binary file e2gallerypro/design/e2simple/morethumbs.png has changed
   332.1 Binary file e2gallerypro/design/e2simple/next.png has changed
   333.1 Binary file e2gallerypro/design/e2simple/pause.png has changed
   334.1 Binary file e2gallerypro/design/e2simple/play.png has changed
   335.1 Binary file e2gallerypro/design/e2simple/prev.png has changed
   336.1 Binary file e2gallerypro/design/e2simple/previous.png has changed
   337.1 Binary file e2gallerypro/design/e2simple/purchase_btn.png has changed
   338.1 Binary file e2gallerypro/design/e2simple/quicktime.png has changed
   339.1 Binary file e2gallerypro/design/e2simple/thumbbox.png has changed
   340.1 Binary file e2gallerypro/design/e2simple/thumbwrap.png has changed
   341.1 Binary file e2gallerypro/design/e2simple/tip-bottom.png has changed
   342.1 Binary file e2gallerypro/design/e2simple/tip-middle.png has changed
   343.1 Binary file e2gallerypro/design/e2simple/tip-top.png has changed
   344.1 Binary file e2gallerypro/design/e2simple/tip_bottom.png has changed
   345.1 Binary file e2gallerypro/design/e2simple/tip_middle.png has changed
   346.1 Binary file e2gallerypro/design/e2simple/tip_top.png has changed
   347.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   347.2 +++ b/e2gallerypro/e2config.php	Mon Feb 22 08:02:39 2010 -0500
   347.3 @@ -0,0 +1,71 @@
   347.4 +<?php
   347.5 +##################################################################
   347.6 +#  SETTINGS For (E)2 Gallery Pro
   347.7 +##################################################################
   347.8 +
   347.9 +$e2xmlurl = "e2upload/xml/judyYates.xml"; 			//XML file location
  347.10 +
  347.11 +$myPHPVersion = "5"; 								//What version of PHP are you running? 4 or 5
  347.12 +
  347.13 +$galleryDesign = "design/e2simple";					//Design Path Degault Designs: 'design/e2simple' and 'design/e2gallerypro'
  347.14 +
  347.15 +$autoStartSlideshow = 'false';						//Do you want the slide show to start on load of the gallery? true or false
  347.16 +
  347.17 +$showThumbsAtStart = 'true';						//Do you want to show the thumbnails when the gallery first loads? true or false
  347.18 +
  347.19 +$showGalleriesAtStart = 'false';					//Do you want to show the galleires box when the gallery first loads? true or false
  347.20 +
  347.21 +$showInfoAtStart = 'false';							//Do you want to show the Info box when the gallery first loads? true or false
  347.22 +
  347.23 +##################################################################
  347.24 +#  Text Settings for Mini Buttons Mouse overs
  347.25 +##################################################################
  347.26 +
  347.27 +define('THUMBSTEXT', 'Toggle Thumbs');
  347.28 +define('GALLERIESTEXT', 'View Galleries');
  347.29 +define('INFOTEXT', 'View Info');
  347.30 +define('PLAYTEXT', 'Play Slideshow');
  347.31 +define('PAUSETEXT', 'Pause Slideshow');
  347.32 +
  347.33 +##################################################################
  347.34 +#  SETTINGS For (E)2 Gallery Pro End
  347.35 +##################################################################
  347.36 +//
  347.37 +//
  347.38 +##################################################################
  347.39 +#  SETTINGS For E2 Upload - UPLOAD ONLY WORKS IN PHP5
  347.40 +##################################################################
  347.41 +
  347.42 +define('GALLERY_LOCATION', 'Galleries/');
  347.43 +define('XML_LOCATION', 'xml/');
  347.44 +
  347.45 +// NOTE: You can add as many usernames & passwords as you want to, seperate with a comma:
  347.46 +/*
  347.47 +$LOGIN_INFORMATION = array(
  347.48 +  'username1' => 'username1',
  347.49 +  'username2' => 'username2pass'
  347.50 +);*/
  347.51 +//Change this to the username and password you prefer:
  347.52 +$LOGIN_INFORMATION = array(
  347.53 +  'rlm' => '1005025'
  347.54 +);
  347.55 +
  347.56 +// request login? true - show login and password boxes, false - password box only
  347.57 +define('USE_USERNAME', true);
  347.58 +
  347.59 +// User will be redirected to this page after logout
  347.60 +//Set this to any page on your site with a full URL 
  347.61 +define('LOGOUT_URL', 'index.php');
  347.62 +
  347.63 +// time out after NN minutes of inactivity. Set to 0 to not timeout
  347.64 +//This is the timeout of the login cookie
  347.65 +define('TIMEOUT_MINUTES', 30);
  347.66 +
  347.67 +// This parameter is only useful when TIMEOUT_MINUTES is not zero
  347.68 +// true - timeout time from last activity, false - timeout time from login
  347.69 +define('TIMEOUT_CHECK_ACTIVITY', true);
  347.70 +
  347.71 +##################################################################
  347.72 +#  SETTINGS For E2 Upload End
  347.73 +##################################################################
  347.74 +?>
   348.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   348.2 +++ b/e2gallerypro/e2gallery.xml	Mon Feb 22 08:02:39 2010 -0500
   348.3 @@ -0,0 +1,114 @@
   348.4 +<?xml version="1.0" encoding="UTF-8"?>
   348.5 +<galleries>
   348.6 +	<!--Gallery 1-->
   348.7 +	<gallery>
   348.8 +	
   348.9 +	<!--Gallery Settings-->
  348.10 +		<totalitems>4</totalitems>
  348.11 +		<title>Gallery Title</title>
  348.12 +		<description>Gallery Description</description>
  348.13 +		<gallerypath>/e2gallerypro/gallery/gallery1/</gallerypath> 
  348.14 +		<largeimgpath>/e2gallerypro/gallery/gallery1/large/</largeimgpath>
  348.15 +		<thumbpath>/e2gallerypro/gallery/gallery1/thumbs/</thumbpath>
  348.16 +		<mainthumb>/e2gallerypro/gallery/gallery1/</mainthumb>
  348.17 +		<mainthumbsrc>mainthumb.jpg</mainthumbsrc> <!--Main Thumb Size: 195x128-->
  348.18 +	<!--Gallery Settings End-->
  348.19 +			
  348.20 +		<!--Gallery Items-->
  348.21 +			<item type="image">
  348.22 +				<title>Cload Rays</title>
  348.23 +				<author>E2interactive</author>
  348.24 +				<copyright>Copyright E2interactive</copyright>
  348.25 +				<description>Looking up to the sky while the clouds pass on a summer day</description>
  348.26 +				<src>DSC_0670.jpg</src>
  348.27 +				<demensions width="760" height="509" />
  348.28 +				<sellprint type="google" currency="USD" currencysymbol="$">
  348.29 +					<price size="8x10">15</price>
  348.30 +					<price size="11x14">25</price>
  348.31 +					<price size="16x20">55</price>
  348.32 +					<price size="20x24">65</price>
  348.33 +				</sellprint>
  348.34 +			</item>
  348.35 +			<item type="image">
  348.36 +				<title>Down the Tracks</title>
  348.37 +				<author>E2interactive</author>
  348.38 +				<copyright>Copyright E2interactive 2007</copyright>
  348.39 +				<description>Looking across the bridge over the Crocked River in Crocked River Ranch Oregon</description>
  348.40 +				<src>DSC_2051.jpg</src>
  348.41 +				<demensions width="335" height="500" />
  348.42 +				<sellprint type="google" currency="USD" currencysymbol="$">
  348.43 +					<price size="8x10">15</price>
  348.44 +					<price size="11x14">25</price>
  348.45 +					<price size="16x20">55</price>
  348.46 +					<price size="20x24">65</price>
  348.47 +				</sellprint>
  348.48 +			</item>
  348.49 +			<item type="image">
  348.50 +				<title>Sit Down</title>
  348.51 +				<author>E2interactive</author>
  348.52 +				<copyright>Copyright E2interactive</copyright>
  348.53 +				<description></description>
  348.54 +				<src>DSC_2343.jpg</src>
  348.55 +				<demensions width="760" height="505" />
  348.56 +				<sellprint type="google" currency="USD" currencysymbol="$">
  348.57 +					<price size="8x10">15</price>
  348.58 +					<price size="11x14">25</price>
  348.59 +					<price size="16x20">55</price>
  348.60 +					<price size="20x24">65</price>
  348.61 +				</sellprint>
  348.62 +			</item>
  348.63 +			<item type="image">
  348.64 +				<title>Sky High</title>
  348.65 +				<author>E2interactive</author>
  348.66 +				<copyright>Copyright E2interactive</copyright>
  348.67 +				<description>Went to the local race track to watch riders on the Motocross track. There was this kid on a small 125cc just screaming around the track showing all the older kids how to ride.</description>
  348.68 +				<src>DSC_7850.jpg</src>
  348.69 +				<demensions width="760" height="509" />
  348.70 +				<sellprint type="google" currency="USD" currencysymbol="$">
  348.71 +					<price size="8x10">15</price>
  348.72 +					<price size="11x14">25</price>
  348.73 +					<price size="16x20">55</price>
  348.74 +					<price size="20x24">65</price>
  348.75 +				</sellprint>
  348.76 +			</item>
  348.77 +			<item type="image">
  348.78 +				<title>Untitled Ceiling</title>
  348.79 +				<author>E2interactive</author>
  348.80 +				<copyright>Copyright E2interactive</copyright>
  348.81 +				<description>I liked the lines of this ceiling so I took an image of it.</description>
  348.82 +				<src>E29_2000.jpg</src>
  348.83 +				<demensions width="760" height="509" />
  348.84 +				<sellprint type="google" currency="USD" currencysymbol="$">
  348.85 +					<price size="8x10">15</price>
  348.86 +					<price size="11x14">25</price>
  348.87 +					<price size="16x20">55</price>
  348.88 +					<price size="20x24">65</price>
  348.89 +				</sellprint>
  348.90 +			</item>
  348.91 +		<!--Gallery ItemsEnd-->
  348.92 +	</gallery>
  348.93 +	<gallery>
  348.94 +	<!--Gallery Settings-->
  348.95 +		<totalitems>4</totalitems>
  348.96 +		<title>Gallery Title</title>
  348.97 +		<description>Gallery Description</description>
  348.98 +		<gallerypath>/e2gallerypro/gallery/gallery1/</gallerypath> 
  348.99 +		<largeimgpath>/e2gallerypro/gallery/gallery1/large/</largeimgpath>
 348.100 +		<thumbpath>/e2gallerypro/gallery/gallery1/thumbs/</thumbpath>
 348.101 +		<mainthumb>/e2gallerypro/gallery/gallery1/</mainthumb>
 348.102 +		<mainthumbsrc>mainthumb.jpg</mainthumbsrc> <!--Main Thumb Size: 195x128-->
 348.103 +	<!--Gallery Settings End-->
 348.104 +			<!--Gallery Items (Media Files Format, Everything but images)-->
 348.105 +			<item type="swf">
 348.106 +			<!--Supported types [flv, mp4, mov, swf, blip, dailymotion, flickr, googlevideo, metacafe, myspace, revver, rutube, seesmicm, tudou, youku, youtube, veoh, viddler, vimeo, 12seconds]-->
 348.107 +				<mediaURL>/e2gallerypro/gallery/gallery2/swf_file.swf</mediaURL>
 348.108 +				<title>SWF file Test</title>
 348.109 +				<author>E2 Gallery Pro SWF Sample</author>
 348.110 +				<copyright>None</copyright>
 348.111 +				<description>E2 Gallery Pro SWF Sample</description>
 348.112 +				<src>design/e2gallerypro/flash.png</src>
 348.113 +				<demensions width="360" height="240" />
 348.114 +			</item>
 348.115 +		<!--Gallery ItemsEnd-->
 348.116 +	</gallery>
 348.117 +</galleries>
 348.118 \ No newline at end of file
   349.1 Binary file e2gallerypro/e2upload/Assets/Icons/7z.png has changed
   350.1 Binary file e2gallerypro/e2upload/Assets/Icons/ace.png has changed
   351.1 Binary file e2gallerypro/e2upload/Assets/Icons/as.png has changed
   352.1 Binary file e2gallerypro/e2upload/Assets/Icons/bat.png has changed
   353.1 Binary file e2gallerypro/e2upload/Assets/Icons/bmp.png has changed
   354.1 Binary file e2gallerypro/e2upload/Assets/Icons/cmd.png has changed
   355.1 Binary file e2gallerypro/e2upload/Assets/Icons/default.png has changed
   356.1 Binary file e2gallerypro/e2upload/Assets/Icons/dir.png has changed
   357.1 Binary file e2gallerypro/e2upload/Assets/Icons/dir_up.png has changed
   358.1 Binary file e2gallerypro/e2upload/Assets/Icons/doc.png has changed
   359.1 Binary file e2gallerypro/e2upload/Assets/Icons/docx.png has changed
   360.1 Binary file e2gallerypro/e2upload/Assets/Icons/exe.png has changed
   361.1 Binary file e2gallerypro/e2upload/Assets/Icons/flv.png has changed
   362.1 Binary file e2gallerypro/e2upload/Assets/Icons/gif.png has changed
   363.1 Binary file e2gallerypro/e2upload/Assets/Icons/gz.png has changed
   364.1 Binary file e2gallerypro/e2upload/Assets/Icons/html.png has changed
   365.1 Binary file e2gallerypro/e2upload/Assets/Icons/ini.png has changed
   366.1 Binary file e2gallerypro/e2upload/Assets/Icons/iso.png has changed
   367.1 Binary file e2gallerypro/e2upload/Assets/Icons/jpeg.png has changed
   368.1 Binary file e2gallerypro/e2upload/Assets/Icons/jpg.png has changed
   369.1 Binary file e2gallerypro/e2upload/Assets/Icons/js.png has changed
   370.1 Binary file e2gallerypro/e2upload/Assets/Icons/lnk.png has changed
   371.1 Binary file e2gallerypro/e2upload/Assets/Icons/mp3.png has changed
   372.1 Binary file e2gallerypro/e2upload/Assets/Icons/odp.png has changed
   373.1 Binary file e2gallerypro/e2upload/Assets/Icons/ods.png has changed
   374.1 Binary file e2gallerypro/e2upload/Assets/Icons/odt.png has changed
   375.1 Binary file e2gallerypro/e2upload/Assets/Icons/pdf.png has changed
   376.1 Binary file e2gallerypro/e2upload/Assets/Icons/php.png has changed
   377.1 Binary file e2gallerypro/e2upload/Assets/Icons/png.png has changed
   378.1 Binary file e2gallerypro/e2upload/Assets/Icons/ppt.png has changed
   379.1 Binary file e2gallerypro/e2upload/Assets/Icons/rar.png has changed
   380.1 Binary file e2gallerypro/e2upload/Assets/Icons/rb.png has changed
   381.1 Binary file e2gallerypro/e2upload/Assets/Icons/sql.png has changed
   382.1 Binary file e2gallerypro/e2upload/Assets/Icons/swf.png has changed
   383.1 Binary file e2gallerypro/e2upload/Assets/Icons/tar.png has changed
   384.1 Binary file e2gallerypro/e2upload/Assets/Icons/wmv.png has changed
   385.1 Binary file e2gallerypro/e2upload/Assets/Icons/xls.png has changed
   386.1 Binary file e2gallerypro/e2upload/Assets/Icons/xlsx.png has changed
   387.1 Binary file e2gallerypro/e2upload/Assets/Icons/zip.png has changed
   388.1 Binary file e2gallerypro/e2upload/Assets/Swiff.Uploader.swf has changed
   389.1 Binary file e2gallerypro/e2upload/Assets/add.png has changed
   390.1 Binary file e2gallerypro/e2upload/Assets/bar.gif has changed
   391.1 Binary file e2gallerypro/e2upload/Assets/button.png has changed
   392.1 Binary file e2gallerypro/e2upload/Assets/button_disabled.png has changed
   393.1 Binary file e2gallerypro/e2upload/Assets/cancel.png has changed
   394.1 Binary file e2gallerypro/e2upload/Assets/checkbox.png has changed
   395.1 Binary file e2gallerypro/e2upload/Assets/destroy.png has changed
   396.1 Binary file e2gallerypro/e2upload/Assets/dewplayer.swf has changed
   397.1 Binary file e2gallerypro/e2upload/Assets/dialog.png has changed
   398.1 Binary file e2gallerypro/e2upload/Assets/disk.png has changed
   399.1 Binary file e2gallerypro/e2upload/Assets/filelist.png has changed
   400.1 Binary file e2gallerypro/e2upload/Assets/filelist_selected.png has changed
   401.1 Binary file e2gallerypro/e2upload/Assets/loader.gif has changed
   402.1 Binary file e2gallerypro/e2upload/Assets/menu.png has changed
   403.1 Binary file e2gallerypro/e2upload/Assets/progress.gif has changed
   404.1 Binary file e2gallerypro/e2upload/Assets/rename.png has changed
   405.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   405.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/getid3.php	Mon Feb 22 08:02:39 2010 -0500
   405.3 @@ -0,0 +1,1598 @@
   405.4 +<?php
   405.5 +// +----------------------------------------------------------------------+
   405.6 +// | PHP version 5                                                        |
   405.7 +// +----------------------------------------------------------------------+
   405.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   405.9 +// +----------------------------------------------------------------------+
  405.10 +// | This source file is subject to version 2 of the GPL license,         |
  405.11 +// | that is bundled with this package in the file license.txt and is     |
  405.12 +// | available through the world-wide-web at the following url:           |
  405.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  405.14 +// +----------------------------------------------------------------------+
  405.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  405.16 +// +----------------------------------------------------------------------+
  405.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  405.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  405.19 +// +----------------------------------------------------------------------+
  405.20 +// | getid3.php                                                           |
  405.21 +// | Main getID3() file.                                                  |
  405.22 +// | dependencies: modules.                                               |
  405.23 +// +----------------------------------------------------------------------+
  405.24 +//
  405.25 +// $Id: getid3.php,v 1.26 2006/12/25 23:44:23 ah Exp $
  405.26 +
  405.27 +
  405.28 +class getid3
  405.29 +{
  405.30 +    //// Settings Section - do NOT modify this file - change setting after newing getid3!
  405.31 +
  405.32 +    // Encoding
  405.33 +    public $encoding                 = 'ISO-8859-1';      // CASE SENSITIVE! - i.e. (must be supported by iconv() - see http://www.gnu.org/software/libiconv/).  Examples:  ISO-8859-1  UTF-8  UTF-16  UTF-16BE.
  405.34 +    public $encoding_id3v1           = 'ISO-8859-1';      // Override SPECIFICATION encoding for broken ID3v1 tags caused by bad tag programs. Examples: 'EUC-CN' for "Chinese MP3s" and 'CP1251' for "Cyrillic".
  405.35 +    public $encoding_id3v2           = 'ISO-8859-1';      // Override ISO-8859-1 encoding for broken ID3v2 tags caused by BRAINDEAD tag programs that writes system codepage as 'ISO-8859-1' instead of UTF-8.
  405.36 +
  405.37 +    // Tags - disable for speed
  405.38 +    public $option_tag_id3v1         = true;              // Read and process ID3v1 tags.
  405.39 +    public $option_tag_id3v2         = true;              // Read and process ID3v2 tags.
  405.40 +    public $option_tag_lyrics3       = true;              // Read and process Lyrics3 tags.
  405.41 +    public $option_tag_apetag        = true;              // Read and process APE tags.
  405.42 +
  405.43 +    // Misc calucations - disable for speed
  405.44 +    public $option_analyze           = true;              // Analyze file - disable if you only need to detect file format.
  405.45 +    public $option_accurate_results  = true;              // Disable to greatly speed up parsing of some file formats at the cost of accuracy.
  405.46 +    public $option_tags_process      = true;              // Copy tags to root key 'tags' and 'comments' and encode to $this->encoding.
  405.47 +    public $option_tags_images       = false;             // Scan tags for binary image data - ID3v2 and vorbiscomments only.
  405.48 +    public $option_extra_info        = true;              // Calculate/return additional info such as bitrate, channelmode etc.
  405.49 +    public $option_max_2gb_check     = false;             // Check whether file is larger than 2 Gb and thus not supported by PHP.
  405.50 +
  405.51 +    // Misc data hashes - slow - require hash module
  405.52 +    public $option_md5_data          = false;             // Get MD5 sum of data part - slow.
  405.53 +    public $option_md5_data_source   = false;             // Use MD5 of source file if available - only FLAC, MAC, OptimFROG and Wavpack4.
  405.54 +    public $option_sha1_data         = false;             // Get SHA1 sum of data part - slow.
  405.55 +
  405.56 +    // Public variables
  405.57 +    public $filename;                                     // Filename of file being analysed.
  405.58 +    public $fp;                                           // Filepointer to file being analysed.
  405.59 +    public $info;                                         // Result array.
  405.60 +
  405.61 +    // Protected variables
  405.62 +    protected $include_path;                              // getid3 include path.
  405.63 +    protected $warnings = array ();
  405.64 +    protected $iconv_present;
  405.65 +
  405.66 +    // Class constants
  405.67 +    const VERSION           = '2.0.0b4';
  405.68 +    const FREAD_BUFFER_SIZE = 16384;                      // Read buffer size in bytes.
  405.69 +    const ICONV_TEST_STRING = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ';
  405.70 +
  405.71 +
  405.72 +
  405.73 +    // Constructor - check PHP enviroment and load library.
  405.74 +    public function __construct() {
  405.75 +
  405.76 +        // Static varibles - no need to recalc every time we new getid3.
  405.77 +        static $include_path;
  405.78 +        static $iconv_present;
  405.79 +
  405.80 +
  405.81 +        static $initialized;
  405.82 +        if ($initialized) {
  405.83 +
  405.84 +            // Import static variables
  405.85 +            $this->include_path  = $include_path;
  405.86 +            $this->iconv_present = $iconv_present;
  405.87 +
  405.88 +            // Run init checks only on first instance.
  405.89 +            return;
  405.90 +        }
  405.91 +
  405.92 +        // Get include_path
  405.93 +        $this->include_path = $include_path = dirname(__FILE__) . '/';
  405.94 +
  405.95 +        // Check for presence of iconv() and make sure it works (simpel test only).
  405.96 +        if (function_exists('iconv') && @iconv('UTF-16LE', 'ISO-8859-1', @iconv('ISO-8859-1', 'UTF-16LE', getid3::ICONV_TEST_STRING)) == getid3::ICONV_TEST_STRING) {
  405.97 +            $this->iconv_present = $iconv_present = true;
  405.98 +        }
  405.99 +
 405.100 +        // iconv() not present - load replacement module.
 405.101 +        else {
 405.102 +            $this->include_module('lib.iconv_replacement');
 405.103 +            $this->iconv_present = $iconv_present = false;
 405.104 +        }
 405.105 +
 405.106 +
 405.107 +        // Require magic_quotes_runtime off
 405.108 +        if (get_magic_quotes_runtime()) {
 405.109 +            throw new getid3_exception('magic_quotes_runtime must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_runtime(0) and set_magic_quotes_runtime(1).');
 405.110 +        }
 405.111 +
 405.112 +
 405.113 +        // Check memory limit.
 405.114 +        $memory_limit = ini_get('memory_limit');
 405.115 +        if (eregi('([0-9]+)M', $memory_limit, $matches)) {
 405.116 +            // could be stored as "16M" rather than 16777216 for example
 405.117 +            $memory_limit = $matches[1] * 1048576;
 405.118 +        }
 405.119 +        if ($memory_limit <= 0) {
 405.120 +            // Should not happen.
 405.121 +        } elseif ($memory_limit <= 4194304) {
 405.122 +            $this->warning('[SERIOUS] PHP has less than 4 Mb available memory and will very likely run out. Increase memory_limit in php.ini.');
 405.123 +        } elseif ($memory_limit <= 12582912) {
 405.124 +            $this->warning('PHP has less than 12 Mb available memory and might run out if all modules are loaded. Increase memory_limit in php.ini if needed.');
 405.125 +        }
 405.126 +
 405.127 +
 405.128 +        // Check safe_mode off
 405.129 +        if ((bool)ini_get('safe_mode')) {
 405.130 +            $this->warning('Safe mode is on, shorten support disabled, md5data/sha1data for ogg vorbis disabled, ogg vorbis/flac tag writing disabled.');
 405.131 +        }
 405.132 +
 405.133 +        $initialized = true;
 405.134 +    }
 405.135 +
 405.136 +
 405.137 +
 405.138 +    // Analyze file by name
 405.139 +    public function Analyze($filename) {
 405.140 +
 405.141 +        // Init and save values
 405.142 +        $this->filename = $filename;
 405.143 +        $this->warnings = array ();
 405.144 +
 405.145 +        // Init result array and set parameters
 405.146 +        $this->info = array ();
 405.147 +        $this->info['GETID3_VERSION'] = getid3::VERSION;
 405.148 +
 405.149 +        // Remote files not supported
 405.150 +        if (preg_match('/^(ht|f)tp:\/\//', $filename)) {
 405.151 +            throw new getid3_exception('Remote files are not supported - please copy the file locally first.');
 405.152 +        }
 405.153 +
 405.154 +        // Open local file
 405.155 +        if (!$this->fp = @fopen($filename, 'rb')) {
 405.156 +            throw new getid3_exception('Could not open file "'.$filename.'"');
 405.157 +        }
 405.158 +
 405.159 +        // Set filesize related parameters
 405.160 +        $this->info['filesize']     = filesize($filename);
 405.161 +        $this->info['avdataoffset'] = 0;
 405.162 +        $this->info['avdataend']    = $this->info['filesize'];
 405.163 +
 405.164 +        // Option_max_2gb_check
 405.165 +        if ($this->option_max_2gb_check) {
 405.166 +            // PHP doesn't support integers larger than 31-bit (~2GB)
 405.167 +            // filesize() simply returns (filesize % (pow(2, 32)), no matter the actual filesize
 405.168 +            // ftell() returns 0 if seeking to the end is beyond the range of unsigned integer
 405.169 +            fseek($this->fp, 0, SEEK_END);
 405.170 +            if ((($this->info['filesize'] != 0) && (ftell($this->fp) == 0)) ||
 405.171 +                ($this->info['filesize'] < 0) ||
 405.172 +                (ftell($this->fp) < 0)) {
 405.173 +                    unset($this->info['filesize']);
 405.174 +                    fclose($this->fp);
 405.175 +                    throw new getid3_exception('File is most likely larger than 2GB and is not supported by PHP.');
 405.176 +            }
 405.177 +        }
 405.178 +
 405.179 +
 405.180 +        // ID3v2 detection (NOT parsing) done to make fileformat easier.
 405.181 +        if (!$this->option_tag_id3v2) {
 405.182 +
 405.183 +            fseek($this->fp, 0, SEEK_SET);
 405.184 +            $header = fread($this->fp, 10);
 405.185 +            if (substr($header, 0, 3) == 'ID3'  &&  strlen($header) == 10) {
 405.186 +                $this->info['id3v2']['header']        = true;
 405.187 +                $this->info['id3v2']['majorversion']  = ord($header{3});
 405.188 +                $this->info['id3v2']['minorversion']  = ord($header{4});
 405.189 +                $this->info['avdataoffset']          += getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length
 405.190 +            }
 405.191 +        }
 405.192 +
 405.193 +
 405.194 +        // Handle tags
 405.195 +        foreach (array ("id3v2", "id3v1", "apetag", "lyrics3") as $tag_name) {
 405.196 +
 405.197 +            $option_tag = 'option_tag_' . $tag_name;
 405.198 +            if ($this->$option_tag) {
 405.199 +                $this->include_module('tag.'.$tag_name);
 405.200 +                try {
 405.201 +                    $tag_class = 'getid3_' . $tag_name;
 405.202 +                    $tag = new $tag_class($this);
 405.203 +                    $tag->Analyze();
 405.204 +                }
 405.205 +                catch (getid3_exception $e) {
 405.206 +                    throw $e;
 405.207 +                }
 405.208 +            }
 405.209 +        }
 405.210 +
 405.211 +
 405.212 +
 405.213 +        //// Determine file format by magic bytes in file header.
 405.214 +
 405.215 +        // Read 32 kb file data
 405.216 +        fseek($this->fp, $this->info['avdataoffset'], SEEK_SET);
 405.217 +        $filedata = fread($this->fp, 32774);
 405.218 +
 405.219 +        // Get huge FileFormatArray
 405.220 +        $file_format_array = getid3::GetFileFormatArray();
 405.221 +
 405.222 +        // Identify file format - loop through $format_info and detect with reg expr
 405.223 +        foreach ($file_format_array as $name => $info) {
 405.224 +
 405.225 +            if (preg_match('/'.$info['pattern'].'/s', $filedata)) {                         // The /s switch on preg_match() forces preg_match() NOT to treat newline (0x0A) characters as special chars but do a binary match
 405.226 +
 405.227 +                // Format detected but not supported
 405.228 +                if (!@$info['module'] || !@$info['group']) {
 405.229 +                    fclose($this->fp);
 405.230 +                    $this->info['fileformat'] = $name;
 405.231 +                    $this->info['mime_type']  = $info['mime_type'];
 405.232 +                    $this->warning('Format only detected. Parsing not available yet.');
 405.233 +                    $this->info['warning'] = $this->warnings;
 405.234 +                    return $this->info;
 405.235 +                }
 405.236 +
 405.237 +                $determined_format = $info;  // copy $info deleted by foreach()
 405.238 +                continue;
 405.239 +            }
 405.240 +        }
 405.241 +
 405.242 +        // Unable to determine file format
 405.243 +        if (!@$determined_format) {
 405.244 +
 405.245 +            // Too many mp3 encoders on the market put gabage in front of mpeg files
 405.246 +            // use assume format on these if format detection failed
 405.247 +            if (preg_match('/\.mp[123a]$/i', $filename)) {
 405.248 +                $determined_format = $file_format_array['mp3'];
 405.249 +            }
 405.250 +
 405.251 +            else {
 405.252 +                fclose($this->fp);
 405.253 +                throw new getid3_exception('Unable to determine file format');
 405.254 +            }
 405.255 +        }
 405.256 +
 405.257 +        // Free memory
 405.258 +        unset($file_format_array);
 405.259 +
 405.260 +        // Check for illegal ID3 tags
 405.261 +        if (@$determined_format['fail_id3'] && (@$this->info['id3v1'] || @$this->info['id3v2'])) {
 405.262 +            if ($determined_format['fail_id3'] === 'ERROR') {
 405.263 +                fclose($this->fp);
 405.264 +                throw new getid3_exception('ID3 tags not allowed on this file type.');
 405.265 +            }
 405.266 +            elseif ($determined_format['fail_id3'] === 'WARNING') {
 405.267 +                @$this->info['id3v1'] and $this->warning('ID3v1 tags not allowed on this file type.');
 405.268 +                @$this->info['id3v2'] and $this->warning('ID3v2 tags not allowed on this file type.');
 405.269 +            }
 405.270 +        }
 405.271 +
 405.272 +        // Check for illegal APE tags
 405.273 +        if (@$determined_format['fail_ape'] && @$this->info['tags']['ape']) {
 405.274 +            if ($determined_format['fail_ape'] === 'ERROR') {
 405.275 +                fclose($this->fp);
 405.276 +                throw new getid3_exception('APE tags not allowed on this file type.');
 405.277 +            } elseif ($determined_format['fail_ape'] === 'WARNING') {
 405.278 +                $this->warning('APE tags not allowed on this file type.');
 405.279 +            }
 405.280 +        }
 405.281 +
 405.282 +
 405.283 +        // Set mime type
 405.284 +        $this->info['mime_type'] = $determined_format['mime_type'];
 405.285 +
 405.286 +        // Calc module file name
 405.287 +        $determined_format['include'] = 'module.'.$determined_format['group'].'.'.$determined_format['module'].'.php';
 405.288 +
 405.289 +        // Supported format signature pattern detected, but module deleted.
 405.290 +        if (!file_exists($this->include_path.$determined_format['include'])) {
 405.291 +            fclose($this->fp);
 405.292 +            throw new getid3_exception('Format not supported, module, '.$determined_format['include'].', was removed.');
 405.293 +        }
 405.294 +
 405.295 +        // Include module
 405.296 +        $this->include_module($determined_format['group'].'.'.$determined_format['module']);
 405.297 +
 405.298 +        // Instantiate module class and analyze
 405.299 +        $class_name = 'getid3_'.$determined_format['module'];
 405.300 +        if (!class_exists($class_name)) {
 405.301 +            throw new getid3_exception('Format not supported, module, '.$determined_format['include'].', is corrupt.');
 405.302 +        }
 405.303 +        $class = new $class_name($this);
 405.304 +
 405.305 +        try {
 405.306 +             $this->option_analyze and $class->Analyze();
 405.307 +            }
 405.308 +        catch (getid3_exception $e) {
 405.309 +            throw $e;
 405.310 +        }
 405.311 +        catch (Exception $e) {
 405.312 +            throw new getid3_exception('Corrupt file.');
 405.313 +        }
 405.314 +
 405.315 +        // Close file
 405.316 +        fclose($this->fp);
 405.317 +
 405.318 +        // Optional - Process all tags - copy to 'tags' and convert charsets
 405.319 +        if ($this->option_tags_process) {
 405.320 +            $this->HandleAllTags();
 405.321 +        }
 405.322 +
 405.323 +
 405.324 +        //// Optional - perform more calculations
 405.325 +        if ($this->option_extra_info) {
 405.326 +
 405.327 +            // Set channelmode on audio
 405.328 +            if (@$this->info['audio']['channels'] == '1') {
 405.329 +                $this->info['audio']['channelmode'] = 'mono';
 405.330 +            } elseif (@$this->info['audio']['channels'] == '2') {
 405.331 +                $this->info['audio']['channelmode'] = 'stereo';
 405.332 +            }
 405.333 +
 405.334 +            // Calculate combined bitrate - audio + video
 405.335 +            $combined_bitrate  = 0;
 405.336 +            $combined_bitrate += (isset($this->info['audio']['bitrate']) ? $this->info['audio']['bitrate'] : 0);
 405.337 +            $combined_bitrate += (isset($this->info['video']['bitrate']) ? $this->info['video']['bitrate'] : 0);
 405.338 +            if (($combined_bitrate > 0) && empty($this->info['bitrate'])) {
 405.339 +                $this->info['bitrate'] = $combined_bitrate;
 405.340 +            }
 405.341 +            if (!isset($this->info['playtime_seconds']) && !empty($this->info['bitrate'])) {
 405.342 +                $this->info['playtime_seconds'] = (($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['bitrate'];
 405.343 +            }
 405.344 +
 405.345 +            // Set playtime string
 405.346 +            if (!empty($this->info['playtime_seconds']) && empty($this->info['playtime_string'])) {
 405.347 +                $this->info['playtime_string'] =  floor(round($this->info['playtime_seconds']) / 60) . ':' . str_pad(floor(round($this->info['playtime_seconds']) % 60), 2, 0, STR_PAD_LEFT);;
 405.348 +            }
 405.349 +
 405.350 +
 405.351 +            // CalculateCompressionRatioVideo() {
 405.352 +            if (@$this->info['video'] && @$this->info['video']['resolution_x'] && @$this->info['video']['resolution_y'] && @$this->info['video']['bits_per_sample']) {
 405.353 +
 405.354 +                // From static image formats
 405.355 +                if (in_array($this->info['video']['dataformat'], array ('bmp', 'gif', 'jpeg', 'jpg', 'png', 'tiff'))) {
 405.356 +                    $frame_rate         = 1;
 405.357 +                    $bitrate_compressed = $this->info['filesize'] * 8;
 405.358 +                }
 405.359 +
 405.360 +                // From video formats
 405.361 +                else {
 405.362 +                    $frame_rate         = @$this->info['video']['frame_rate'];
 405.363 +                    $bitrate_compressed = @$this->info['video']['bitrate'];
 405.364 +                }
 405.365 +
 405.366 +                if ($frame_rate && $bitrate_compressed) {
 405.367 +                    $this->info['video']['compression_ratio'] = $bitrate_compressed / ($this->info['video']['resolution_x'] * $this->info['video']['resolution_y'] * $this->info['video']['bits_per_sample'] * $frame_rate);
 405.368 +                }
 405.369 +            }
 405.370 +
 405.371 +
 405.372 +            // CalculateCompressionRatioAudio() {
 405.373 +            if (@$this->info['audio']['bitrate'] && @$this->info['audio']['channels'] && @$this->info['audio']['sample_rate']) {
 405.374 +                $this->info['audio']['compression_ratio'] = $this->info['audio']['bitrate'] / ($this->info['audio']['channels'] * $this->info['audio']['sample_rate'] * (@$this->info['audio']['bits_per_sample'] ? $this->info['audio']['bits_per_sample'] : 16));
 405.375 +            }
 405.376 +
 405.377 +            if (@$this->info['audio']['streams']) {
 405.378 +                foreach ($this->info['audio']['streams'] as $stream_number => $stream_data) {
 405.379 +                    if (@$stream_data['bitrate'] && @$stream_data['channels'] && @$stream_data['sample_rate']) {
 405.380 +                        $this->info['audio']['streams'][$stream_number]['compression_ratio'] = $stream_data['bitrate'] / ($stream_data['channels'] * $stream_data['sample_rate'] * (@$stream_data['bits_per_sample'] ? $stream_data['bits_per_sample'] : 16));
 405.381 +                    }
 405.382 +                }
 405.383 +            }
 405.384 +
 405.385 +
 405.386 +            // CalculateReplayGain() {
 405.387 +            if (@$this->info['replay_gain']) {
 405.388 +                if (!@$this->info['replay_gain']['reference_volume']) {
 405.389 +                     $this->info['replay_gain']['reference_volume'] = 89;
 405.390 +                }
 405.391 +                if (isset($this->info['replay_gain']['track']['adjustment'])) {
 405.392 +                    $this->info['replay_gain']['track']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['track']['adjustment'];
 405.393 +                }
 405.394 +                if (isset($this->info['replay_gain']['album']['adjustment'])) {
 405.395 +                    $this->info['replay_gain']['album']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['album']['adjustment'];
 405.396 +                }
 405.397 +
 405.398 +                if (isset($this->info['replay_gain']['track']['peak'])) {
 405.399 +                    $this->info['replay_gain']['track']['max_noclip_gain'] = 0 - 20 * log10($this->info['replay_gain']['track']['peak']);
 405.400 +                }
 405.401 +                if (isset($this->info['replay_gain']['album']['peak'])) {
 405.402 +                    $this->info['replay_gain']['album']['max_noclip_gain'] = 0 - 20 * log10($this->info['replay_gain']['album']['peak']);
 405.403 +                }
 405.404 +            }
 405.405 +
 405.406 +
 405.407 +            // ProcessAudioStreams() {
 405.408 +            if (@!$this->info['audio']['streams'] && (@$this->info['audio']['bitrate'] || @$this->info['audio']['channels'] || @$this->info['audio']['sample_rate'])) {
 405.409 +                  foreach ($this->info['audio'] as $key => $value) {
 405.410 +                    if ($key != 'streams') {
 405.411 +                        $this->info['audio']['streams'][0][$key] = $value;
 405.412 +                    }
 405.413 +                }
 405.414 +            }
 405.415 +        }
 405.416 +
 405.417 +
 405.418 +        // Get the md5/sha1sum of the audio/video portion of the file - without ID3/APE/Lyrics3/etc header/footer tags.
 405.419 +        if ($this->option_md5_data || $this->option_sha1_data) {
 405.420 +
 405.421 +            // Load data-hash library if needed
 405.422 +            $this->include_module('lib.data_hash');
 405.423 +
 405.424 +            if ($this->option_sha1_data) {
 405.425 +                new getid3_lib_data_hash($this, 'sha1');
 405.426 +            }
 405.427 +
 405.428 +            if ($this->option_md5_data) {
 405.429 +
 405.430 +                // no md5_data_source or option disabled -- md5_data_source supported by FLAC, MAC, OptimFROG, Wavpack4
 405.431 +                if (!$this->option_md5_data_source || !@$this->info['md5_data_source']) {
 405.432 +                    new getid3_lib_data_hash($this, 'md5');
 405.433 +                }
 405.434 +
 405.435 +                // copy md5_data_source to md5_data if option set to true
 405.436 +                elseif ($this->option_md5_data_source && @$this->info['md5_data_source']) {
 405.437 +                    $this->info['md5_data'] = $this->info['md5_data_source'];
 405.438 +                }
 405.439 +            }
 405.440 +        }
 405.441 +
 405.442 +        // Set warnings
 405.443 +        if ($this->warnings) {
 405.444 +            $this->info['warning'] = $this->warnings;
 405.445 +        }
 405.446 +
 405.447 +        // Return result
 405.448 +        return $this->info;
 405.449 +    }
 405.450 +
 405.451 +
 405.452 +
 405.453 +    // Return array of warnings
 405.454 +    public function warnings() {
 405.455 +
 405.456 +        return $this->warnings;
 405.457 +    }
 405.458 +
 405.459 +
 405.460 +
 405.461 +    // Add warning(s) to $this->warnings[]
 405.462 +    public function warning($message) {
 405.463 +
 405.464 +        if (is_array($message)) {
 405.465 +            $this->warnings = array_merge($this->warnings, $message);
 405.466 +        }
 405.467 +        else {
 405.468 +            $this->warnings[] = $message;
 405.469 +        }
 405.470 +    }
 405.471 +
 405.472 +
 405.473 +
 405.474 +    //  Clear all warnings when cloning
 405.475 +    public function __clone() {
 405.476 +
 405.477 +        $this->warnings = array ();
 405.478 +
 405.479 +        // Copy info array, otherwise it will be a reference.
 405.480 +        $temp = $this->info;
 405.481 +        unset($this->info);
 405.482 +        $this->info = $temp;
 405.483 +    }
 405.484 +
 405.485 +
 405.486 +
 405.487 +    // Convert string between charsets -- iconv() wrapper
 405.488 +    public function iconv($in_charset, $out_charset, $string, $drop01 = false) {
 405.489 +
 405.490 +        if ($drop01 && ($string === "\x00" || $string === "\x01")) {
 405.491 +            return '';
 405.492 +        }
 405.493 +
 405.494 +
 405.495 +        if (!$this->iconv_present) {
 405.496 +            return getid3_iconv_replacement::iconv($in_charset, $out_charset, $string);
 405.497 +        }
 405.498 +
 405.499 +
 405.500 +        // iconv() present
 405.501 +        if ($result = @iconv($in_charset, $out_charset.'//TRANSLIT', $string)) {
 405.502 +
 405.503 +            if ($out_charset == 'ISO-8859-1') {
 405.504 +                return rtrim($result, "\x00");
 405.505 +            }
 405.506 +            return $result;
 405.507 +        }
 405.508 +
 405.509 +        $this->warning('iconv() was unable to convert the string: "' . $string . '" from ' . $in_charset . ' to ' . $out_charset);
 405.510 +        return $string;
 405.511 +    }
 405.512 +
 405.513 +
 405.514 +
 405.515 +    public function include_module($name) {
 405.516 +
 405.517 +        if (!file_exists($this->include_path.'module.'.$name.'.php')) {
 405.518 +            throw new getid3_exception('Required module.'.$name.'.php is missing.');
 405.519 +        }
 405.520 +
 405.521 +        include_once($this->include_path.'module.'.$name.'.php');
 405.522 +    }
 405.523 +
 405.524 +
 405.525 +
 405.526 +    public function include_module_optional($name) {
 405.527 +
 405.528 +        if (!file_exists($this->include_path.'module.'.$name.'.php')) {
 405.529 +            return;
 405.530 +        }
 405.531 +
 405.532 +        include_once($this->include_path.'module.'.$name.'.php');
 405.533 +        return true;
 405.534 +    }
 405.535 +
 405.536 +
 405.537 +    // Return array containing information about all supported formats
 405.538 +    public static function GetFileFormatArray() {
 405.539 +
 405.540 +        static $format_info = array (
 405.541 +
 405.542 +                // Audio formats
 405.543 +
 405.544 +                // AC-3   - audio      - Dolby AC-3 / Dolby Digital
 405.545 +                'ac3'  => array (
 405.546 +                            'pattern'   => '^\x0B\x77',
 405.547 +                            'group'     => 'audio',
 405.548 +                            'module'    => 'ac3',
 405.549 +                            'mime_type' => 'audio/ac3',
 405.550 +                          ),
 405.551 +
 405.552 +                // AAC  - audio       - Advanced Audio Coding (AAC) - ADIF format
 405.553 +                'adif' => array (
 405.554 +                            'pattern'   => '^ADIF',
 405.555 +                            'group'     => 'audio',
 405.556 +                            'module'    => 'aac_adif',
 405.557 +                            'mime_type' => 'application/octet-stream',
 405.558 +                            'fail_ape'  => 'WARNING',
 405.559 +                          ),
 405.560 +
 405.561 +
 405.562 +                // AAC  - audio       - Advanced Audio Coding (AAC) - ADTS format (very similar to MP3)
 405.563 +                'adts' => array (
 405.564 +                            'pattern'   => '^\xFF[\xF0-\xF1\xF8-\xF9]',
 405.565 +                            'group'     => 'audio',
 405.566 +                            'module'    => 'aac_adts',
 405.567 +                            'mime_type' => 'application/octet-stream',
 405.568 +                            'fail_ape'  => 'WARNING',
 405.569 +                          ),
 405.570 +
 405.571 +
 405.572 +                // AU   - audio       - NeXT/Sun AUdio (AU)
 405.573 +                'au'   => array (
 405.574 +                            'pattern'   => '^\.snd',
 405.575 +                            'group'     => 'audio',
 405.576 +                            'module'    => 'au',
 405.577 +                            'mime_type' => 'audio/basic',
 405.578 +                          ),
 405.579 +
 405.580 +                // AVR  - audio       - Audio Visual Research
 405.581 +                'avr'  => array (
 405.582 +                            'pattern'   => '^2BIT',
 405.583 +                            'group'     => 'audio',
 405.584 +                            'module'    => 'avr',
 405.585 +                            'mime_type' => 'application/octet-stream',
 405.586 +                          ),
 405.587 +
 405.588 +                // BONK - audio       - Bonk v0.9+
 405.589 +                'bonk' => array (
 405.590 +                            'pattern'   => '^\x00(BONK|INFO|META| ID3)',
 405.591 +                            'group'     => 'audio',
 405.592 +                            'module'    => 'bonk',
 405.593 +                            'mime_type' => 'audio/xmms-bonk',
 405.594 +                          ),
 405.595 +
 405.596 +                // DTS  - audio       - Dolby Theatre System
 405.597 +				'dts'  => array(
 405.598 +							'pattern'   => '^\x7F\xFE\x80\x01',
 405.599 +							'group'     => 'audio',
 405.600 +							'module'    => 'dts',
 405.601 +							'mime_type' => 'audio/dts',
 405.602 +						),
 405.603 +
 405.604 +                // FLAC - audio       - Free Lossless Audio Codec
 405.605 +                'flac' => array (
 405.606 +                            'pattern'   => '^fLaC',
 405.607 +                            'group'     => 'audio',
 405.608 +                            'module'    => 'xiph',
 405.609 +                            'mime_type' => 'audio/x-flac',
 405.610 +                          ),
 405.611 +
 405.612 +                // LA   - audio       - Lossless Audio (LA)
 405.613 +                'la'   => array (
 405.614 +                            'pattern'   => '^LA0[2-4]',
 405.615 +                            'group'     => 'audio',
 405.616 +                            'module'    => 'la',
 405.617 +                            'mime_type' => 'application/octet-stream',
 405.618 +                          ),
 405.619 +
 405.620 +                // LPAC - audio       - Lossless Predictive Audio Compression (LPAC)
 405.621 +                'lpac' => array (
 405.622 +                            'pattern'   => '^LPAC',
 405.623 +                            'group'     => 'audio',
 405.624 +                            'module'    => 'lpac',
 405.625 +                            'mime_type' => 'application/octet-stream',
 405.626 +                          ),
 405.627 +
 405.628 +                // MIDI - audio       - MIDI (Musical Instrument Digital Interface)
 405.629 +                'midi' => array (
 405.630 +                            'pattern'   => '^MThd',
 405.631 +                            'group'     => 'audio',
 405.632 +                            'module'    => 'midi',
 405.633 +                            'mime_type' => 'audio/midi',
 405.634 +                          ),
 405.635 +
 405.636 +                // MAC  - audio       - Monkey's Audio Compressor
 405.637 +                'mac'  => array (
 405.638 +                            'pattern'   => '^MAC ',
 405.639 +                            'group'     => 'audio',
 405.640 +                            'module'    => 'monkey',
 405.641 +                            'mime_type' => 'application/octet-stream',
 405.642 +                          ),
 405.643 +
 405.644 +                // MOD  - audio       - MODule (assorted sub-formats)
 405.645 +                'mod'  => array (
 405.646 +                            'pattern'   => '^.{1080}(M.K.|[5-9]CHN|[1-3][0-9]CH)',
 405.647 +                            'mime_type' => 'audio/mod',
 405.648 +                          ),
 405.649 +
 405.650 +                // MOD  - audio       - MODule (Impulse Tracker)
 405.651 +                'it'   => array (
 405.652 +                            'pattern'   => '^IMPM',
 405.653 +                            'mime_type' => 'audio/it',
 405.654 +                          ),
 405.655 +
 405.656 +                // MOD  - audio       - MODule (eXtended Module, various sub-formats)
 405.657 +                'xm'   => array (
 405.658 +                            'pattern'   => '^Extended Module',
 405.659 +                            'mime_type' => 'audio/xm',
 405.660 +                          ),
 405.661 +
 405.662 +                // MOD  - audio       - MODule (ScreamTracker)
 405.663 +                's3m'  => array (
 405.664 +                            'pattern'   => '^.{44}SCRM',
 405.665 +                            'mime_type' => 'audio/s3m',
 405.666 +                          ),
 405.667 +
 405.668 +                // MPC  - audio       - Musepack / MPEGplus SV7+
 405.669 +                'mpc'  => array (
 405.670 +                            'pattern'   => '^(MP\+)',
 405.671 +                            'group'     => 'audio',
 405.672 +                            'module'    => 'mpc',
 405.673 +                            'mime_type' => 'audio/x-musepack',
 405.674 +                          ),
 405.675 +
 405.676 +                // MPC  - audio       - Musepack / MPEGplus SV4-6
 405.677 +                'mpc_old' => array (
 405.678 +                            'pattern'   => '^([\x00\x01\x10\x11\x40\x41\x50\x51\x80\x81\x90\x91\xC0\xC1\xD0\xD1][\x20-37][\x00\x20\x40\x60\x80\xA0\xC0\xE0])',
 405.679 +                            'group'     => 'audio',
 405.680 +                            'module'    => 'mpc_old',
 405.681 +                            'mime_type' => 'application/octet-stream',
 405.682 +                          ),
 405.683 +
 405.684 +
 405.685 +                // MP3  - audio       - MPEG-audio Layer 3 (very similar to AAC-ADTS)
 405.686 +                'mp3'  => array (
 405.687 +                            'pattern'   => '^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]',
 405.688 +                            'group'     => 'audio',
 405.689 +                            'module'    => 'mp3',
 405.690 +                            'mime_type' => 'audio/mpeg',
 405.691 +                          ),
 405.692 +
 405.693 +                // OFR  - audio       - OptimFROG
 405.694 +                'ofr'  => array (
 405.695 +                            'pattern'   => '^(\*RIFF|OFR)',
 405.696 +                            'group'     => 'audio',
 405.697 +                            'module'    => 'optimfrog',
 405.698 +                            'mime_type' => 'application/octet-stream',
 405.699 +                          ),
 405.700 +
 405.701 +                // RKAU - audio       - RKive AUdio compressor
 405.702 +                'rkau' => array (
 405.703 +                            'pattern'   => '^RKA',
 405.704 +                            'group'     => 'audio',
 405.705 +                            'module'    => 'rkau',
 405.706 +                            'mime_type' => 'application/octet-stream',
 405.707 +                          ),
 405.708 +
 405.709 +                // SHN  - audio       - Shorten
 405.710 +                'shn'  => array (
 405.711 +                            'pattern'   => '^ajkg',
 405.712 +                            'group'     => 'audio',
 405.713 +                            'module'    => 'shorten',
 405.714 +                            'mime_type' => 'audio/xmms-shn',
 405.715 +                            'fail_id3'  => 'ERROR',
 405.716 +                            'fail_ape'  => 'ERROR',
 405.717 +                          ),
 405.718 +
 405.719 +                // TTA  - audio       - TTA Lossless Audio Compressor (http://tta.corecodec.org)
 405.720 +                'tta'  => array (
 405.721 +                            'pattern'   => '^TTA',  // could also be '^TTA(\x01|\x02|\x03|2|1)'
 405.722 +                            'group'     => 'audio',
 405.723 +                            'module'    => 'tta',
 405.724 +                            'mime_type' => 'application/octet-stream',
 405.725 +                          ),
 405.726 +
 405.727 +                // VOC  - audio       - Creative Voice (VOC)
 405.728 +                'voc'  => array (
 405.729 +                            'pattern'   => '^Creative Voice File',
 405.730 +                            'group'     => 'audio',
 405.731 +                            'module'    => 'voc',
 405.732 +                            'mime_type' => 'audio/voc',
 405.733 +                          ),
 405.734 +
 405.735 +                // VQF  - audio       - transform-domain weighted interleave Vector Quantization Format (VQF)
 405.736 +                'vqf'  => array (
 405.737 +                            'pattern'   => '^TWIN',
 405.738 +                            'group'     => 'audio',
 405.739 +                            'module'    => 'vqf',
 405.740 +                            'mime_type' => 'application/octet-stream',
 405.741 +                          ),
 405.742 +
 405.743 +                // WV  - audio        - WavPack (v4.0+)
 405.744 +                'vw'  => array(
 405.745 +                            'pattern'   => '^wvpk',
 405.746 +                            'group'     => 'audio',
 405.747 +                            'module'    => 'wavpack',
 405.748 +                            'mime_type' => 'application/octet-stream',
 405.749 +                          ),
 405.750 +
 405.751 +
 405.752 +                // Audio-Video formats
 405.753 +
 405.754 +                // ASF  - audio/video - Advanced Streaming Format, Windows Media Video, Windows Media Audio
 405.755 +                'asf'  => array (
 405.756 +                            'pattern'   => '^\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C',
 405.757 +                            'group'     => 'audio-video',
 405.758 +                            'module'    => 'asf',
 405.759 +                            'mime_type' => 'video/x-ms-asf',
 405.760 +                          ),
 405.761 +
 405.762 +                // BINK  - audio/video - Bink / Smacker
 405.763 +                'bink' => array(
 405.764 +                            'pattern'   => '^(BIK|SMK)',
 405.765 +                            'mime_type' => 'application/octet-stream',
 405.766 +                          ),
 405.767 +
 405.768 +                // FLV  - audio/video - FLash Video
 405.769 +                'flv' => array(
 405.770 +                            'pattern'   => '^FLV\x01',
 405.771 +                            'group'     => 'audio-video',
 405.772 +                            'module'    => 'flv',
 405.773 +                            'mime_type' => 'video/x-flv',
 405.774 +                          ),
 405.775 +
 405.776 +                // MKAV - audio/video - Mastroka
 405.777 +                'matroska' => array (
 405.778 +                            'pattern'   => '^\x1A\x45\xDF\xA3',
 405.779 +                            'mime_type' => 'application/octet-stream',
 405.780 +                          ),
 405.781 +
 405.782 +                // MPEG - audio/video - MPEG (Moving Pictures Experts Group)
 405.783 +                'mpeg' => array (
 405.784 +                            'pattern'   => '^\x00\x00\x01(\xBA|\xB3)',
 405.785 +                            'group'     => 'audio-video',
 405.786 +                            'module'    => 'mpeg',
 405.787 +                            'mime_type' => 'video/mpeg',
 405.788 +                          ),
 405.789 +
 405.790 +                // NSV  - audio/video - Nullsoft Streaming Video (NSV)
 405.791 +                'nsv'  => array (
 405.792 +                            'pattern'   => '^NSV[sf]',
 405.793 +                            'group'     => 'audio-video',
 405.794 +                            'module'    => 'nsv',
 405.795 +                            'mime_type' => 'application/octet-stream',
 405.796 +                          ),
 405.797 +
 405.798 +                // Ogg  - audio/video - Ogg (Ogg Vorbis, OggFLAC, Speex, Ogg Theora(*), Ogg Tarkin(*))
 405.799 +                'ogg'  => array (
 405.800 +                            'pattern'   => '^OggS',
 405.801 +                            'group'     => 'audio',
 405.802 +                            'module'    => 'xiph',
 405.803 +                            'mime_type' => 'application/ogg',
 405.804 +                            'fail_id3'  => 'WARNING',
 405.805 +                            'fail_ape'  => 'WARNING',
 405.806 +                          ),
 405.807 +
 405.808 +                // QT   - audio/video - Quicktime
 405.809 +                'quicktime' => array (
 405.810 +                            'pattern'   => '^.{4}(cmov|free|ftyp|mdat|moov|pnot|skip|wide)',
 405.811 +                            'group'     => 'audio-video',
 405.812 +                            'module'    => 'quicktime',
 405.813 +                            'mime_type' => 'video/quicktime',
 405.814 +                          ),
 405.815 +
 405.816 +                // RIFF - audio/video - Resource Interchange File Format (RIFF) / WAV / AVI / CD-audio / SDSS = renamed variant used by SmartSound QuickTracks (www.smartsound.com) / FORM = Audio Interchange File Format (AIFF)
 405.817 +                'riff' => array (
 405.818 +                            'pattern'   => '^(RIFF|SDSS|FORM)',
 405.819 +                            'group'     => 'audio-video',
 405.820 +                            'module'    => 'riff',
 405.821 +                            'mime_type' => 'audio/x-wave',
 405.822 +                            'fail_ape'  => 'WARNING',
 405.823 +                          ),
 405.824 +
 405.825 +                // Real - audio/video - RealAudio, RealVideo
 405.826 +                'real' => array (
 405.827 +                            'pattern'   => '^(\.RMF|.ra)',
 405.828 +                            'group'     => 'audio-video',
 405.829 +                            'module'    => 'real',
 405.830 +                            'mime_type' => 'audio/x-realaudio',
 405.831 +                          ),
 405.832 +
 405.833 +                // SWF - audio/video - ShockWave Flash
 405.834 +                'swf' => array (
 405.835 +                            'pattern'   => '^(F|C)WS',
 405.836 +                            'group'     => 'audio-video',
 405.837 +                            'module'    => 'swf',
 405.838 +                            'mime_type' => 'application/x-shockwave-flash',
 405.839 +                          ),
 405.840 +
 405.841 +
 405.842 +                // Still-Image formats
 405.843 +
 405.844 +                // BMP  - still image - Bitmap (Windows, OS/2; uncompressed, RLE8, RLE4)
 405.845 +                'bmp'  => array (
 405.846 +                            'pattern'   => '^BM',
 405.847 +                            'group'     => 'graphic',
 405.848 +                            'module'    => 'bmp',
 405.849 +                            'mime_type' => 'image/bmp',
 405.850 +                            'fail_id3'  => 'ERROR',
 405.851 +                            'fail_ape'  => 'ERROR',
 405.852 +                          ),
 405.853 +
 405.854 +                // GIF  - still image - Graphics Interchange Format
 405.855 +                'gif'  => array (
 405.856 +                            'pattern'   => '^GIF',
 405.857 +                            'group'     => 'graphic',
 405.858 +                            'module'    => 'gif',
 405.859 +                            'mime_type' => 'image/gif',
 405.860 +                            'fail_id3'  => 'ERROR',
 405.861 +                            'fail_ape'  => 'ERROR',
 405.862 +                          ),
 405.863 +
 405.864 +                // JPEG - still image - Joint Photographic Experts Group (JPEG)
 405.865 +                'jpeg'  => array (
 405.866 +                            'pattern'   => '^\xFF\xD8\xFF',
 405.867 +                            'group'     => 'graphic',
 405.868 +                            'module'    => 'jpeg',
 405.869 +                            'mime_type' => 'image/jpeg',
 405.870 +                            'fail_id3'  => 'ERROR',
 405.871 +                            'fail_ape'  => 'ERROR',
 405.872 +                          ),
 405.873 +
 405.874 +                // PCD  - still image - Kodak Photo CD
 405.875 +                'pcd'  => array (
 405.876 +                            'pattern'   => '^.{2048}PCD_IPI\x00',
 405.877 +                            'group'     => 'graphic',
 405.878 +                            'module'    => 'pcd',
 405.879 +                            'mime_type' => 'image/x-photo-cd',
 405.880 +                            'fail_id3'  => 'ERROR',
 405.881 +                            'fail_ape'  => 'ERROR',
 405.882 +                          ),
 405.883 +
 405.884 +
 405.885 +                // PNG  - still image - Portable Network Graphics (PNG)
 405.886 +                'png'  => array (
 405.887 +                            'pattern'   => '^\x89\x50\x4E\x47\x0D\x0A\x1A\x0A',
 405.888 +                            'group'     => 'graphic',
 405.889 +                            'module'    => 'png',
 405.890 +                            'mime_type' => 'image/png',
 405.891 +                            'fail_id3'  => 'ERROR',
 405.892 +                            'fail_ape'  => 'ERROR',
 405.893 +                          ),
 405.894 +
 405.895 +
 405.896 +                // SVG  - still image - Scalable Vector Graphics (SVG)
 405.897 +				'svg'  => array(
 405.898 +							'pattern'   => '<!DOCTYPE svg PUBLIC ',
 405.899 +							'mime_type' => 'image/svg+xml',
 405.900 +							'fail_id3'  => 'ERROR',
 405.901 +							'fail_ape'  => 'ERROR',
 405.902 +						),
 405.903 +
 405.904 +
 405.905 +                // TIFF  - still image - Tagged Information File Format (TIFF)
 405.906 +                'tiff' => array (
 405.907 +                            'pattern'   => '^(II\x2A\x00|MM\x00\x2A)',
 405.908 +                            'group'     => 'graphic',
 405.909 +                            'module'    => 'tiff',
 405.910 +                            'mime_type' => 'image/tiff',
 405.911 +                            'fail_id3'  => 'ERROR',
 405.912 +                            'fail_ape'  => 'ERROR',
 405.913 +                          ),
 405.914 +
 405.915 +
 405.916 +                // Data formats
 405.917 +
 405.918 +                'exe'  => array(
 405.919 +                            'pattern'   => '^MZ',
 405.920 +                            'mime_type' => 'application/octet-stream',
 405.921 +                            'fail_id3'  => 'ERROR',
 405.922 +                            'fail_ape'  => 'ERROR',
 405.923 +                          ),
 405.924 +
 405.925 +                // ISO  - data        - International Standards Organization (ISO) CD-ROM Image
 405.926 +                'iso'  => array (
 405.927 +                            'pattern'   => '^.{32769}CD001',
 405.928 +                            'group'     => 'misc',
 405.929 +                            'module'    => 'iso',
 405.930 +                            'mime_type' => 'application/octet-stream',
 405.931 +                            'fail_id3'  => 'ERROR',
 405.932 +                            'fail_ape'  => 'ERROR',
 405.933 +                          ),
 405.934 +
 405.935 +                // RAR  - data        - RAR compressed data
 405.936 +                'rar'  => array(
 405.937 +                            'pattern'   => '^Rar\!',
 405.938 +                            'mime_type' => 'application/octet-stream',
 405.939 +                            'fail_id3'  => 'ERROR',
 405.940 +                            'fail_ape'  => 'ERROR',
 405.941 +                          ),
 405.942 +
 405.943 +                // SZIP - audio       - SZIP compressed data
 405.944 +                'szip' => array (
 405.945 +                            'pattern'   => '^SZ\x0A\x04',
 405.946 +                            'group'     => 'archive',
 405.947 +                            'module'    => 'szip',
 405.948 +                            'mime_type' => 'application/octet-stream',
 405.949 +                            'fail_id3'  => 'ERROR',
 405.950 +                            'fail_ape'  => 'ERROR',
 405.951 +                          ),
 405.952 +
 405.953 +                // TAR  - data        - TAR compressed data
 405.954 +                'tar'  => array(
 405.955 +                            'pattern'   => '^.{100}[0-9\x20]{7}\x00[0-9\x20]{7}\x00[0-9\x20]{7}\x00[0-9\x20\x00]{12}[0-9\x20\x00]{12}',
 405.956 +                            'group'     => 'archive',
 405.957 +                            'module'    => 'tar',
 405.958 +                            'mime_type' => 'application/x-tar',
 405.959 +                            'fail_id3'  => 'ERROR',
 405.960 +                            'fail_ape'  => 'ERROR',
 405.961 +                          ),
 405.962 +
 405.963 +                // GZIP  - data        - GZIP compressed data
 405.964 +                'gz'  => array(
 405.965 +                            'pattern'   => '^\x1F\x8B\x08',
 405.966 +                            'group'     => 'archive',
 405.967 +                            'module'    => 'gzip',
 405.968 +                            'mime_type' => 'application/x-gzip',
 405.969 +                            'fail_id3'  => 'ERROR',
 405.970 +                            'fail_ape'  => 'ERROR',
 405.971 +                          ),
 405.972 +
 405.973 +
 405.974 +                // ZIP  - data        - ZIP compressed data
 405.975 +                'zip'  => array (
 405.976 +                            'pattern'   => '^PK\x03\x04',
 405.977 +                            'group'     => 'archive',
 405.978 +                            'module'    => 'zip',
 405.979 +                            'mime_type' => 'application/zip',
 405.980 +                            'fail_id3'  => 'ERROR',
 405.981 +                            'fail_ape'  => 'ERROR',
 405.982 +                          ),
 405.983 +
 405.984 +
 405.985 +                // PAR2 - data        - Parity Volume Set Specification 2.0
 405.986 +                'par2' => array (
 405.987 +                			'pattern'   => '^PAR2\x00PKT',
 405.988 +							'mime_type' => 'application/octet-stream',
 405.989 +							'fail_id3'  => 'ERROR',
 405.990 +							'fail_ape'  => 'ERROR',
 405.991 +						),
 405.992 +
 405.993 +
 405.994 +                 // PDF  - data       - Portable Document Format
 405.995 +                 'pdf' => array(
 405.996 +                            'pattern'   => '^\x25PDF',
 405.997 +                            'mime_type' => 'application/pdf',
 405.998 +                            'fail_id3'  => 'ERROR',
 405.999 +                            'fail_ape'  => 'ERROR',
405.1000 +                           ),
405.1001 +
405.1002 +                 // DOC  - data       - Microsoft Word
405.1003 +                 'msoffice' => array(
405.1004 +                            'pattern'   => '^\xD0\xCF\x11\xE0', // D0CF11E == DOCFILE == Microsoft Office Document
405.1005 +                            'mime_type' => 'application/octet-stream',
405.1006 +                            'fail_id3'  => 'ERROR',
405.1007 +                            'fail_ape'  => 'ERROR',
405.1008 +                          ),
405.1009 +            );
405.1010 +
405.1011 +        return $format_info;
405.1012 +    }
405.1013 +
405.1014 +
405.1015 +
405.1016 +    // Recursive over array - converts array to $encoding charset from $this->encoding
405.1017 +    function CharConvert(&$array, $encoding) {
405.1018 +
405.1019 +        // Identical encoding - end here
405.1020 +        if ($encoding == $this->encoding) {
405.1021 +            return;
405.1022 +        }
405.1023 +
405.1024 +        // Loop thru array
405.1025 +        foreach ($array as $key => $value) {
405.1026 +
405.1027 +            // Go recursive
405.1028 +            if (is_array($value)) {
405.1029 +                $this->CharConvert($array[$key], $encoding);
405.1030 +            }
405.1031 +
405.1032 +            // Convert string
405.1033 +            elseif (is_string($value)) {
405.1034 +                $array[$key] = $this->iconv($encoding, $this->encoding, $value);
405.1035 +            }
405.1036 +        }
405.1037 +    }
405.1038 +
405.1039 +
405.1040 +
405.1041 +    // Convert and copy tags
405.1042 +    protected function HandleAllTags() {
405.1043 +
405.1044 +        // Key name => array (tag name, character encoding)
405.1045 +        static $tags = array (
405.1046 +            'asf'       => array ('asf',           'UTF-16LE'),
405.1047 +            'midi'      => array ('midi',          'ISO-8859-1'),
405.1048 +            'nsv'       => array ('nsv',           'ISO-8859-1'),
405.1049 +            'ogg'       => array ('vorbiscomment', 'UTF-8'),
405.1050 +            'png'       => array ('png',           'UTF-8'),
405.1051 +            'tiff'      => array ('tiff',          'ISO-8859-1'),
405.1052 +            'quicktime' => array ('quicktime',     'ISO-8859-1'),
405.1053 +            'real'      => array ('real',          'ISO-8859-1'),
405.1054 +            'vqf'       => array ('vqf',           'ISO-8859-1'),
405.1055 +            'zip'       => array ('zip',           'ISO-8859-1'),
405.1056 +            'riff'      => array ('riff',          'ISO-8859-1'),
405.1057 +            'lyrics3'   => array ('lyrics3',       'ISO-8859-1'),
405.1058 +            'id3v1'     => array ('id3v1',         ''),            // change below - cannot assign variable to static array
405.1059 +            'id3v2'     => array ('id3v2',         'UTF-8'),       // module converts all frames to UTF-8
405.1060 +            'ape'       => array ('ape',           'UTF-8')
405.1061 +        );
405.1062 +        $tags['id3v1'][1] = $this->encoding_id3v1;
405.1063 +
405.1064 +        // Loop thru tags array
405.1065 +        foreach ($tags as $comment_name => $tag_name_encoding_array) {
405.1066 +            list($tag_name, $encoding) = $tag_name_encoding_array;
405.1067 +
405.1068 +            // Fill in default encoding type if not already present
405.1069 +            @$this->info[$comment_name]  and  $this->info[$comment_name]['encoding'] = $encoding;
405.1070 +
405.1071 +            // Copy comments if key name set
405.1072 +            if (@$this->info[$comment_name]['comments']) {
405.1073 +
405.1074 +                foreach ($this->info[$comment_name]['comments'] as $tag_key => $value_array) {
405.1075 +                    foreach ($value_array as $key => $value) {
405.1076 +                        if (strlen(trim($value)) > 0) {
405.1077 +                            $this->info['tags'][$tag_name][trim($tag_key)][] = $value; // do not trim!! Unicode characters will get mangled if trailing nulls are removed!
405.1078 +                        }
405.1079 +                    }
405.1080 +
405.1081 +                }
405.1082 +
405.1083 +                if (!@$this->info['tags'][$tag_name]) {
405.1084 +                    // comments are set but contain nothing but empty strings, so skip
405.1085 +                    continue;
405.1086 +                }
405.1087 +
405.1088 +                $this->CharConvert($this->info['tags'][$tag_name], $encoding);
405.1089 +            }
405.1090 +        }
405.1091 +
405.1092 +
405.1093 +        // Merge comments from ['tags'] into common ['comments']
405.1094 +        if (@$this->info['tags']) {
405.1095 +
405.1096 +            foreach ($this->info['tags'] as $tag_type => $tag_array) {
405.1097 +
405.1098 +                foreach ($tag_array as $tag_name => $tagdata) {
405.1099 +
405.1100 +                    foreach ($tagdata as $key => $value) {
405.1101 +
405.1102 +                        if (!empty($value)) {
405.1103 +
405.1104 +                            if (empty($this->info['comments'][$tag_name])) {
405.1105 +
405.1106 +                                // fall through and append value
405.1107 +                            }
405.1108 +                            elseif ($tag_type == 'id3v1') {
405.1109 +
405.1110 +                                $new_value_length = strlen(trim($value));
405.1111 +                                foreach ($this->info['comments'][$tag_name] as $existing_key => $existing_value) {
405.1112 +                                    $old_value_length = strlen(trim($existing_value));
405.1113 +                                    if (($new_value_length <= $old_value_length) && (substr($existing_value, 0, $new_value_length) == trim($value))) {
405.1114 +                                        // new value is identical but shorter-than (or equal-length to) one already in comments - skip
405.1115 +                                        break 2;
405.1116 +                                    }
405.1117 +                                }
405.1118 +                            }
405.1119 +                            else {
405.1120 +
405.1121 +                                $new_value_length = strlen(trim($value));
405.1122 +                                foreach ($this->info['comments'][$tag_name] as $existing_key => $existing_value) {
405.1123 +                                    $old_value_length = strlen(trim($existing_value));
405.1124 +                                    if (($new_value_length > $old_value_length) && (substr(trim($value), 0, strlen($existing_value)) == $existing_value)) {
405.1125 +                                        $this->info['comments'][$tag_name][$existing_key] = trim($value);
405.1126 +                                        break 2;
405.1127 +                                    }
405.1128 +                                }
405.1129 +                            }
405.1130 +
405.1131 +                            if (empty($this->info['comments'][$tag_name]) || !in_array(trim($value), $this->info['comments'][$tag_name])) {
405.1132 +                                $this->info['comments'][$tag_name][] = trim($value);
405.1133 +                            }
405.1134 +                        }
405.1135 +                    }
405.1136 +                }
405.1137 +            }
405.1138 +        }
405.1139 +
405.1140 +        return true;
405.1141 +    }
405.1142 +}
405.1143 +
405.1144 +
405.1145 +abstract class getid3_handler
405.1146 +{
405.1147 +
405.1148 +    protected $getid3;                          // pointer
405.1149 +
405.1150 +    protected $data_string_flag = false;        // analyzing filepointer or string
405.1151 +    protected $data_string;                     // string to analyze
405.1152 +    protected $data_string_position = 0;        // seek position in string
405.1153 +
405.1154 +
405.1155 +    public function __construct(getID3 $getid3) {
405.1156 +
405.1157 +        $this->getid3 = $getid3;
405.1158 +    }
405.1159 +
405.1160 +
405.1161 +    // Analyze from file pointer
405.1162 +    abstract public function Analyze();
405.1163 +
405.1164 +
405.1165 +
405.1166 +    // Analyze from string instead
405.1167 +    public function AnalyzeString(&$string) {
405.1168 +
405.1169 +        // Enter string mode
405.1170 +        $this->data_string_flag = true;
405.1171 +        $this->data_string      = $string;
405.1172 +
405.1173 +        // Save info
405.1174 +        $saved_avdataoffset = $this->getid3->info['avdataoffset'];
405.1175 +        $saved_avdataend    = $this->getid3->info['avdataend'];
405.1176 +        $saved_filesize     = $this->getid3->info['filesize'];
405.1177 +
405.1178 +        // Reset some info
405.1179 +        $this->getid3->info['avdataoffset'] = 0;
405.1180 +        $this->getid3->info['avdataend']    = $this->getid3->info['filesize'] = strlen($string);
405.1181 +
405.1182 +        // Analyze
405.1183 +        $this->Analyze();
405.1184 +
405.1185 +        // Restore some info
405.1186 +        $this->getid3->info['avdataoffset'] = $saved_avdataoffset;
405.1187 +        $this->getid3->info['avdataend']    = $saved_avdataend;
405.1188 +        $this->getid3->info['filesize']     = $saved_filesize;
405.1189 +
405.1190 +        // Exit string mode
405.1191 +        $this->data_string_flag = false;
405.1192 +    }
405.1193 +
405.1194 +
405.1195 +    protected function ftell() {
405.1196 +
405.1197 +        if ($this->data_string_flag) {
405.1198 +            return $this->data_string_position;
405.1199 +        }
405.1200 +        return ftell($this->getid3->fp);
405.1201 +    }
405.1202 +
405.1203 +
405.1204 +    protected function fread($bytes) {
405.1205 +
405.1206 +        if ($this->data_string_flag) {
405.1207 +            $this->data_string_position += $bytes;
405.1208 +            return substr($this->data_string, $this->data_string_position - $bytes, $bytes);
405.1209 +        }
405.1210 +        return fread($this->getid3->fp, $bytes);
405.1211 +    }
405.1212 +
405.1213 +
405.1214 +    protected function fseek($bytes, $whence = SEEK_SET) {
405.1215 +
405.1216 +        if ($this->data_string_flag) {
405.1217 +            switch ($whence) {
405.1218 +                case SEEK_SET:
405.1219 +                    $this->data_string_position = $bytes;
405.1220 +                    return;
405.1221 +
405.1222 +                case SEEK_CUR:
405.1223 +                    $this->data_string_position += $bytes;
405.1224 +                    return;
405.1225 +
405.1226 +                case SEEK_END:
405.1227 +                    $this->data_string_position = strlen($this->data_string) + $bytes;
405.1228 +                    return;
405.1229 +            }
405.1230 +        }
405.1231 +        return fseek($this->getid3->fp, $bytes, $whence);
405.1232 +    }
405.1233 +
405.1234 +}
405.1235 +
405.1236 +
405.1237 +
405.1238 +
405.1239 +abstract class getid3_handler_write
405.1240 +{
405.1241 +    protected $filename;
405.1242 +    protected $user_abort;
405.1243 +
405.1244 +    private $fp_lock;
405.1245 +    private $owner;
405.1246 +    private $group;
405.1247 +    private $perms;
405.1248 +
405.1249 +
405.1250 +    public function __construct($filename) {
405.1251 +
405.1252 +        if (!file_exists($filename)) {
405.1253 +            throw new getid3_exception('File does not exist: "' . $filename . '"');
405.1254 +        }
405.1255 +
405.1256 +        if (!is_writeable($filename)) {
405.1257 +            throw new getid3_exception('File is not writeable: "' . $filename . '"');
405.1258 +        }
405.1259 +
405.1260 +        if (!is_writeable(dirname($filename))) {
405.1261 +            throw new getid3_exception('Directory is not writeable: ' . dirname($filename) . ' (need to write lock file).');
405.1262 +        }
405.1263 +
405.1264 +        $this->user_abort = ignore_user_abort(true);
405.1265 +
405.1266 +        $this->fp_lock = fopen($filename . '.getid3.lock', 'w');
405.1267 +        flock($this->fp_lock, LOCK_EX);
405.1268 +
405.1269 +        $this->filename = $filename;
405.1270 +    }
405.1271 +
405.1272 +
405.1273 +    public function __destruct() {
405.1274 +
405.1275 +        flock($this->fp_lock, LOCK_UN);
405.1276 +        fclose($this->fp_lock);
405.1277 +        unlink($this->filename . '.getid3.lock');
405.1278 +
405.1279 +        ignore_user_abort($this->user_abort);
405.1280 +    }
405.1281 +    
405.1282 +    
405.1283 +    protected function save_permissions() {
405.1284 +        
405.1285 +        $this->owner = fileowner($this->filename);
405.1286 +        $this->group = filegroup($this->filename);
405.1287 +        $this->perms = fileperms($this->filename);
405.1288 +    }
405.1289 +    
405.1290 +    
405.1291 +    protected function restore_permissions() {
405.1292 +        
405.1293 +        @chown($this->filename, $this->owner);
405.1294 +        @chgrp($this->filename, $this->group);
405.1295 +        @chmod($this->filename, $this->perms);
405.1296 +    }
405.1297 +
405.1298 +
405.1299 +    abstract public function read();
405.1300 +
405.1301 +    abstract public function write();
405.1302 +
405.1303 +    abstract public function remove();
405.1304 +
405.1305 +}
405.1306 +
405.1307 +
405.1308 +
405.1309 +
405.1310 +class getid3_exception extends Exception
405.1311 +{
405.1312 +    public $message;
405.1313 +
405.1314 +}
405.1315 +
405.1316 +
405.1317 +
405.1318 +
405.1319 +class getid3_lib
405.1320 +{
405.1321 +
405.1322 +    // Convert Little Endian byte string to int - max 32 bits
405.1323 +    public static function LittleEndian2Int($byte_word, $signed = false) {
405.1324 +
405.1325 +        return getid3_lib::BigEndian2Int(strrev($byte_word), $signed);
405.1326 +    }
405.1327 +
405.1328 +
405.1329 +
405.1330 +    // Convert number to Little Endian byte string
405.1331 +    public static function LittleEndian2String($number, $minbytes=1, $synchsafe=false) {
405.1332 +        $intstring = '';
405.1333 +        while ($number > 0) {
405.1334 +            if ($synchsafe) {
405.1335 +                $intstring = $intstring.chr($number & 127);
405.1336 +                $number >>= 7;
405.1337 +            } else {
405.1338 +                $intstring = $intstring.chr($number & 255);
405.1339 +                $number >>= 8;
405.1340 +            }
405.1341 +        }
405.1342 +        return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
405.1343 +    }
405.1344 +
405.1345 +
405.1346 +
405.1347 +    // Convert Big Endian byte string to int - max 32 bits
405.1348 +    public static function BigEndian2Int($byte_word, $signed = false) {
405.1349 +
405.1350 +        $int_value = 0;
405.1351 +        $byte_wordlen = strlen($byte_word);
405.1352 +
405.1353 +        for ($i = 0; $i < $byte_wordlen; $i++) {
405.1354 +            $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i));
405.1355 +        }
405.1356 +
405.1357 +        if ($signed) {
405.1358 +            $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1));
405.1359 +            if ($int_value & $sign_mask_bit) {
405.1360 +                $int_value = 0 - ($int_value & ($sign_mask_bit - 1));
405.1361 +            }
405.1362 +        }
405.1363 +
405.1364 +        return $int_value;
405.1365 +    }
405.1366 +
405.1367 +
405.1368 +
405.1369 +    // Convert Big Endian byte sybc safe string to int - max 32 bits
405.1370 +    public static function BigEndianSyncSafe2Int($byte_word) {
405.1371 +
405.1372 +        $int_value = 0;
405.1373 +        $byte_wordlen = strlen($byte_word);
405.1374 +
405.1375 +        // disregard MSB, effectively 7-bit bytes
405.1376 +        for ($i = 0; $i < $byte_wordlen; $i++) {
405.1377 +            $int_value = $int_value | (ord($byte_word{$i}) & 0x7F) << (($byte_wordlen - 1 - $i) * 7);
405.1378 +        }
405.1379 +        return $int_value;
405.1380 +    }
405.1381 +
405.1382 +
405.1383 +
405.1384 +    // Convert Big Endian byte string to bit string
405.1385 +    public static function BigEndian2Bin($byte_word) {
405.1386 +
405.1387 +        $bin_value = '';
405.1388 +        $byte_wordlen = strlen($byte_word);
405.1389 +        for ($i = 0; $i < $byte_wordlen; $i++) {
405.1390 +            $bin_value .= str_pad(decbin(ord($byte_word{$i})), 8, '0', STR_PAD_LEFT);
405.1391 +        }
405.1392 +        return $bin_value;
405.1393 +    }
405.1394 +
405.1395 +
405.1396 +
405.1397 +    public static function BigEndian2Float($byte_word) {
405.1398 +
405.1399 +		// ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic
405.1400 +		// http://www.psc.edu/general/software/packages/ieee/ieee.html
405.1401 +		// http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee.html
405.1402 +
405.1403 +		$bit_word = getid3_lib::BigEndian2Bin($byte_word);
405.1404 +		if (!$bit_word) {
405.1405 +            return 0;
405.1406 +        }
405.1407 +		$sign_bit = $bit_word{0};
405.1408 +
405.1409 +		switch (strlen($byte_word) * 8) {
405.1410 +			case 32:
405.1411 +				$exponent_bits = 8;
405.1412 +				$fraction_bits = 23;
405.1413 +				break;
405.1414 +
405.1415 +			case 64:
405.1416 +				$exponent_bits = 11;
405.1417 +				$fraction_bits = 52;
405.1418 +				break;
405.1419 +
405.1420 +			case 80:
405.1421 +				// 80-bit Apple SANE format
405.1422 +				// http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/
405.1423 +				$exponent_string = substr($bit_word, 1, 15);
405.1424 +				$is_normalized = intval($bit_word{16});
405.1425 +				$fraction_string = substr($bit_word, 17, 63);
405.1426 +				$exponent = pow(2, getid3_lib::Bin2Dec($exponent_string) - 16383);
405.1427 +				$fraction = $is_normalized + getid3_lib::DecimalBinary2Float($fraction_string);
405.1428 +				$float_value = $exponent * $fraction;
405.1429 +				if ($sign_bit == '1') {
405.1430 +					$float_value *= -1;
405.1431 +				}
405.1432 +				return $float_value;
405.1433 +				break;
405.1434 +
405.1435 +			default:
405.1436 +				return false;
405.1437 +				break;
405.1438 +		}
405.1439 +		$exponent_string = substr($bit_word, 1, $exponent_bits);
405.1440 +		$fraction_string = substr($bit_word, $exponent_bits + 1, $fraction_bits);
405.1441 +		$exponent = bindec($exponent_string);
405.1442 +		$fraction = bindec($fraction_string);
405.1443 +
405.1444 +		if (($exponent == (pow(2, $exponent_bits) - 1)) && ($fraction != 0)) {
405.1445 +			// Not a Number
405.1446 +			$float_value = false;
405.1447 +		} elseif (($exponent == (pow(2, $exponent_bits) - 1)) && ($fraction == 0)) {
405.1448 +			if ($sign_bit == '1') {
405.1449 +				$float_value = '-infinity';
405.1450 +			} else {
405.1451 +				$float_value = '+infinity';
405.1452 +			}
405.1453 +		} elseif (($exponent == 0) && ($fraction == 0)) {
405.1454 +			if ($sign_bit == '1') {
405.1455 +				$float_value = -0;
405.1456 +			} else {
405.1457 +				$float_value = 0;
405.1458 +			}
405.1459 +			$float_value = ($sign_bit ? 0 : -0);
405.1460 +		} elseif (($exponent == 0) && ($fraction != 0)) {
405.1461 +			// These are 'unnormalized' values
405.1462 +			$float_value = pow(2, (-1 * (pow(2, $exponent_bits - 1) - 2))) * getid3_lib::DecimalBinary2Float($fraction_string);
405.1463 +			if ($sign_bit == '1') {
405.1464 +				$float_value *= -1;
405.1465 +			}
405.1466 +		} elseif ($exponent != 0) {
405.1467 +			$float_value = pow(2, ($exponent - (pow(2, $exponent_bits - 1) - 1))) * (1 + getid3_lib::DecimalBinary2Float($fraction_string));
405.1468 +			if ($sign_bit == '1') {
405.1469 +				$float_value *= -1;
405.1470 +			}
405.1471 +		}
405.1472 +		return (float) $float_value;
405.1473 +	}
405.1474 +
405.1475 +
405.1476 +
405.1477 +	public static function LittleEndian2Float($byte_word) {
405.1478 +
405.1479 +		return getid3_lib::BigEndian2Float(strrev($byte_word));
405.1480 +	}
405.1481 +
405.1482 +
405.1483 +
405.1484 +	public static function DecimalBinary2Float($binary_numerator) {
405.1485 +		$numerator   = bindec($binary_numerator);
405.1486 +		$denominator = bindec('1'.str_repeat('0', strlen($binary_numerator)));
405.1487 +		return ($numerator / $denominator);
405.1488 +	}
405.1489 +
405.1490 +
405.1491 +	public static function PrintHexBytes($string, $hex=true, $spaces=true, $html_safe=true) {
405.1492 +
405.1493 +        $return_string = '';
405.1494 +        for ($i = 0; $i < strlen($string); $i++) {
405.1495 +            if ($hex) {
405.1496 +                $return_string .= str_pad(dechex(ord($string{$i})), 2, '0', STR_PAD_LEFT);
405.1497 +            } else {
405.1498 +                $return_string .= ' '.(ereg("[\x20-\x7E]", $string{$i}) ? $string{$i} : '¤');
405.1499 +            }
405.1500 +            if ($spaces) {
405.1501 +                $return_string .= ' ';
405.1502 +            }
405.1503 +        }
405.1504 +        if ($html_safe) {
405.1505 +            $return_string = htmlentities($return_string);
405.1506 +        }
405.1507 +        return $return_string;
405.1508 +    }
405.1509 +
405.1510 +
405.1511 +
405.1512 +    // Process header data string - read several values with algorithm and add to target
405.1513 +    //   algorithm is one one the getid3_lib::Something2Something() function names
405.1514 +    //   parts_array is  index => length    -  $target[index] = algorithm(substring(data))
405.1515 +    //   - OR just substring(data) if length is negative!
405.1516 +    //  indexes == 'IGNORE**' are ignored
405.1517 +
405.1518 +    public static function ReadSequence($algorithm, &$target, &$data, $offset, $parts_array) {
405.1519 +
405.1520 +        // Loop thru $parts_array
405.1521 +        foreach ($parts_array as $target_string => $length) {
405.1522 +
405.1523 +            // Add to target
405.1524 +            if (!strstr($target_string, 'IGNORE')) {
405.1525 +
405.1526 +                // substr(....length)
405.1527 +                if ($length < 0) {
405.1528 +                    $target[$target_string] = substr($data, $offset, -$length);
405.1529 +                }
405.1530 +
405.1531 +                // algorithm(substr(...length))
405.1532 +                else {
405.1533 +                    $target[$target_string] = getid3_lib::$algorithm(substr($data, $offset, $length));
405.1534 +                }
405.1535 +            }
405.1536 +
405.1537 +            // Move pointer
405.1538 +            $offset += abs($length);
405.1539 +        }
405.1540 +    }
405.1541 +
405.1542 +}
405.1543 +
405.1544 +
405.1545 +
405.1546 +class getid3_lib_replaygain
405.1547 +{
405.1548 +
405.1549 +    public static function NameLookup($name_code) {
405.1550 +
405.1551 +        static $lookup = array (
405.1552 +            0 => 'not set',
405.1553 +            1 => 'Track Gain Adjustment',
405.1554 +            2 => 'Album Gain Adjustment'
405.1555 +        );
405.1556 +
405.1557 +        return @$lookup[$name_code];
405.1558 +    }
405.1559 +
405.1560 +
405.1561 +
405.1562 +    public static function OriginatorLookup($originator_code) {
405.1563 +
405.1564 +        static $lookup = array (
405.1565 +            0 => 'unspecified',
405.1566 +            1 => 'pre-set by artist/producer/mastering engineer',
405.1567 +            2 => 'set by user',
405.1568 +            3 => 'determined automatically'
405.1569 +        );
405.1570 +
405.1571 +        return @$lookup[$originator_code];
405.1572 +    }
405.1573 +
405.1574 +
405.1575 +
405.1576 +    public static function AdjustmentLookup($raw_adjustment, $sign_bit) {
405.1577 +
405.1578 +        return (float)$raw_adjustment / 10 * ($sign_bit == 1 ? -1 : 1);
405.1579 +    }
405.1580 +
405.1581 +
405.1582 +
405.1583 +    public static function GainString($name_code, $originator_code, $replaygain) {
405.1584 +
405.1585 +        $sign_bit = $replaygain < 0 ? 1 : 0;
405.1586 +
405.1587 +        $stored_replaygain = intval(round($replaygain * 10));
405.1588 +        $gain_string  = str_pad(decbin($name_code), 3, '0', STR_PAD_LEFT);
405.1589 +        $gain_string .= str_pad(decbin($originator_code), 3, '0', STR_PAD_LEFT);
405.1590 +        $gain_string .= $sign_bit;
405.1591 +        $gain_string .= str_pad(decbin($stored_replaygain), 9, '0', STR_PAD_LEFT);
405.1592 +
405.1593 +        return $gain_string;
405.1594 +    }
405.1595 +
405.1596 +}
405.1597 +
405.1598 +
405.1599 +
405.1600 +
405.1601 +?>
405.1602 \ No newline at end of file
   406.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   406.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.gzip.php	Mon Feb 22 08:02:39 2010 -0500
   406.3 @@ -0,0 +1,296 @@
   406.4 +<?php
   406.5 +// +----------------------------------------------------------------------+
   406.6 +// | PHP version 5                                                        |
   406.7 +// +----------------------------------------------------------------------+
   406.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   406.9 +// +----------------------------------------------------------------------+
  406.10 +// | This source file is subject to version 2 of the GPL license,         |
  406.11 +// | that is bundled with this package in the file license.txt and is     |
  406.12 +// | available through the world-wide-web at the following url:           |
  406.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  406.14 +// +----------------------------------------------------------------------+
  406.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  406.16 +// +----------------------------------------------------------------------+
  406.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  406.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  406.19 +// +----------------------------------------------------------------------+
  406.20 +// | module.archive.gzip.php                                              |
  406.21 +// | module for analyzing GZIP files                                      |
  406.22 +// | dependencies: PHP compiled with zlib support (optional)              |
  406.23 +// +----------------------------------------------------------------------+
  406.24 +// | Module originally written by Mike Mozolin <teddybearØmail*ru>        |
  406.25 +// +----------------------------------------------------------------------+
  406.26 +//
  406.27 +// $Id: module.archive.gzip.php,v 1.4 2006/12/04 16:00:35 ah Exp $
  406.28 +
  406.29 +        
  406.30 +        
  406.31 +class getid3_gzip extends getid3_handler
  406.32 +{
  406.33 +
  406.34 +    // public: Optional file list - disable for speed.
  406.35 +    public $option_gzip_parse_contents = true; // decode gzipped files, if possible, and parse recursively (.tar.gz for example)
  406.36 +
  406.37 +    
  406.38 +    // Reads the gzip-file
  406.39 +    function Analyze() {
  406.40 +
  406.41 +        $info = &$this->getid3->info;
  406.42 +
  406.43 +        $info['fileformat'] = 'gzip';
  406.44 +
  406.45 +        $start_length = 10;
  406.46 +        $unpack_header = 'a1id1/a1id2/a1cmethod/a1flags/a4mtime/a1xflags/a1os';
  406.47 +        
  406.48 +        //+---+---+---+---+---+---+---+---+---+---+
  406.49 +        //|ID1|ID2|CM |FLG|     MTIME     |XFL|OS |
  406.50 +        //+---+---+---+---+---+---+---+---+---+---+
  406.51 +        
  406.52 +        @fseek($this->getid3->fp, 0);
  406.53 +        $buffer = @fread($this->getid3->fp, $info['filesize']);
  406.54 +
  406.55 +        $arr_members = explode("\x1F\x8B\x08", $buffer);
  406.56 +        
  406.57 +        while (true) {
  406.58 +            $is_wrong_members = false;
  406.59 +            $num_members = intval(count($arr_members));
  406.60 +            for ($i = 0; $i < $num_members; $i++) {
  406.61 +                if (strlen($arr_members[$i]) == 0) {
  406.62 +                    continue;
  406.63 +                }
  406.64 +                $buf = "\x1F\x8B\x08".$arr_members[$i];
  406.65 +
  406.66 +                $attr = unpack($unpack_header, substr($buf, 0, $start_length));
  406.67 +                if (!$this->get_os_type(ord($attr['os']))) {
  406.68 +        
  406.69 +                    // Merge member with previous if wrong OS type
  406.70 +                    $arr_members[$i - 1] .= $buf;
  406.71 +                    $arr_members[$i] = '';
  406.72 +                    $is_wrong_members = true;
  406.73 +                    continue;
  406.74 +                }
  406.75 +            }
  406.76 +            if (!$is_wrong_members) {
  406.77 +                break;
  406.78 +            }
  406.79 +        }
  406.80 +
  406.81 +        $fpointer = 0;
  406.82 +        $idx = 0;
  406.83 +        for ($i = 0; $i < $num_members; $i++) {
  406.84 +            if (strlen($arr_members[$i]) == 0) {
  406.85 +                continue;
  406.86 +            }
  406.87 +            $info_gzip_member_header_idx = &$info['gzip']['member_header'][++$idx];
  406.88 +
  406.89 +            $buff = "\x1F\x8B\x08".$arr_members[$i];
  406.90 +
  406.91 +            $attr = unpack($unpack_header, substr($buff, 0, $start_length));
  406.92 +            $info_gzip_member_header_idx['filemtime']      = getid3_lib::LittleEndian2Int($attr['mtime']);
  406.93 +            $info_gzip_member_header_idx['raw']['id1']     = ord($attr['cmethod']);
  406.94 +            $info_gzip_member_header_idx['raw']['id2']     = ord($attr['cmethod']);
  406.95 +            $info_gzip_member_header_idx['raw']['cmethod'] = ord($attr['cmethod']);
  406.96 +            $info_gzip_member_header_idx['raw']['os']      = ord($attr['os']);
  406.97 +            $info_gzip_member_header_idx['raw']['xflags']  = ord($attr['xflags']);
  406.98 +            $info_gzip_member_header_idx['raw']['flags']   = ord($attr['flags']);
  406.99 +
 406.100 +            $info_gzip_member_header_idx['flags']['crc16']    = (bool) ($info_gzip_member_header_idx['raw']['flags'] & 0x02);
 406.101 +            $info_gzip_member_header_idx['flags']['extra']    = (bool) ($info_gzip_member_header_idx['raw']['flags'] & 0x04);
 406.102 +            $info_gzip_member_header_idx['flags']['filename'] = (bool) ($info_gzip_member_header_idx['raw']['flags'] & 0x08);
 406.103 +            $info_gzip_member_header_idx['flags']['comment']  = (bool) ($info_gzip_member_header_idx['raw']['flags'] & 0x10);
 406.104 +
 406.105 +            $info_gzip_member_header_idx['compression'] = $this->get_xflag_type($info_gzip_member_header_idx['raw']['xflags']);
 406.106 +
 406.107 +            $info_gzip_member_header_idx['os'] = $this->get_os_type($info_gzip_member_header_idx['raw']['os']);
 406.108 +            if (!$info_gzip_member_header_idx['os']) {
 406.109 +                $info['error'][] = 'Read error on gzip file';
 406.110 +                return false;
 406.111 +            }
 406.112 +
 406.113 +            $fpointer = 10;
 406.114 +            $arr_xsubfield = array ();
 406.115 +            
 406.116 +            // bit 2 - FLG.FEXTRA
 406.117 +            //+---+---+=================================+
 406.118 +            //| XLEN  |...XLEN bytes of "extra field"...|
 406.119 +            //+---+---+=================================+
 406.120 +            
 406.121 +            if ($info_gzip_member_header_idx['flags']['extra']) {
 406.122 +                $w_xlen = substr($buff, $fpointer, 2);
 406.123 +                $xlen = getid3_lib::LittleEndian2Int($w_xlen);
 406.124 +                $fpointer += 2;
 406.125 +
 406.126 +                $info_gzip_member_header_idx['raw']['xfield'] = substr($buff, $fpointer, $xlen);
 406.127 +            
 406.128 +                // Extra SubFields
 406.129 +                //+---+---+---+---+==================================+
 406.130 +                //|SI1|SI2|  LEN  |... LEN bytes of subfield data ...|
 406.131 +                //+---+---+---+---+==================================+
 406.132 +            
 406.133 +                $idx = 0;
 406.134 +                while (true) {
 406.135 +                    if ($idx >= $xlen) {
 406.136 +                        break;
 406.137 +                    }
 406.138 +                    $si1 = ord(substr($buff, $fpointer + $idx++, 1));
 406.139 +                    $si2 = ord(substr($buff, $fpointer + $idx++, 1));
 406.140 +                    if (($si1 == 0x41) && ($si2 == 0x70)) {
 406.141 +                        $w_xsublen = substr($buff, $fpointer+$idx, 2);
 406.142 +                        $xsublen = getid3_lib::LittleEndian2Int($w_xsublen);
 406.143 +                        $idx += 2;
 406.144 +                        $arr_xsubfield[] = substr($buff, $fpointer+$idx, $xsublen);
 406.145 +                        $idx += $xsublen;
 406.146 +                    } else {
 406.147 +                        break;
 406.148 +                    }
 406.149 +                }
 406.150 +                $fpointer += $xlen;
 406.151 +            }
 406.152 +            
 406.153 +            // bit 3 - FLG.FNAME
 406.154 +            //+=========================================+
 406.155 +            //|...original file name, zero-terminated...|
 406.156 +            //+=========================================+
 406.157 +            // GZIP files may have only one file, with no filename, so assume original filename is current filename without .gz
 406.158 +            
 406.159 +            $info_gzip_member_header_idx['filename'] = eregi_replace('.gz$', '', @$info['filename']);
 406.160 +            if ($info_gzip_member_header_idx['flags']['filename']) {
 406.161 +                while (true) {
 406.162 +                    if (ord($buff[$fpointer]) == 0) {
 406.163 +                        $fpointer++;
 406.164 +                        break;
 406.165 +                    }
 406.166 +                    $info_gzip_member_header_idx['filename'] .= $buff[$fpointer];
 406.167 +                    $fpointer++;
 406.168 +                }
 406.169 +            }
 406.170 +            
 406.171 +            // bit 4 - FLG.FCOMMENT
 406.172 +            //+===================================+
 406.173 +            //|...file comment, zero-terminated...|
 406.174 +            //+===================================+
 406.175 +            
 406.176 +            if ($info_gzip_member_header_idx['flags']['comment']) {
 406.177 +                while (true) {
 406.178 +                    if (ord($buff[$fpointer]) == 0) {
 406.179 +                        $fpointer++;
 406.180 +                        break;
 406.181 +                    }
 406.182 +                    $info_gzip_member_header_idx['comment'] .= $buff[$fpointer];
 406.183 +                    $fpointer++;
 406.184 +                }
 406.185 +            }
 406.186 +            
 406.187 +            // bit 1 - FLG.FHCRC
 406.188 +            //+---+---+
 406.189 +            //| CRC16 |
 406.190 +            //+---+---+
 406.191 +            
 406.192 +            if ($info_gzip_member_header_idx['flags']['crc16']) {
 406.193 +                $w_crc = substr($buff, $fpointer, 2);
 406.194 +                $info_gzip_member_header_idx['crc16'] = getid3_lib::LittleEndian2Int($w_crc);
 406.195 +                $fpointer += 2;
 406.196 +            }
 406.197 +            
 406.198 +            // bit 0 - FLG.FTEXT
 406.199 +            //if ($info_gzip_member_header_idx['raw']['flags'] & 0x01) {
 406.200 +            //  Ignored...
 406.201 +            //}
 406.202 +            // bits 5, 6, 7 - reserved
 406.203 +
 406.204 +            $info_gzip_member_header_idx['crc32']    = getid3_lib::LittleEndian2Int(substr($buff, strlen($buff) - 8, 4));
 406.205 +            $info_gzip_member_header_idx['filesize'] = getid3_lib::LittleEndian2Int(substr($buff, strlen($buff) - 4));
 406.206 +
 406.207 +            if ($this->option_gzip_parse_contents) {
 406.208 +
 406.209 +                // Try to inflate GZip
 406.210 +                
 406.211 +                if (!function_exists('gzinflate')) {
 406.212 +                    $this->getid3->warning('PHP does not have zlib support - contents not parsed.');
 406.213 +                    return true;
 406.214 +                }
 406.215 +
 406.216 +                $csize = 0;
 406.217 +                $inflated = '';
 406.218 +                $chkcrc32 = '';
 406.219 +
 406.220 +                $cdata = substr($buff, $fpointer);
 406.221 +                $cdata = substr($cdata, 0, strlen($cdata) - 8);
 406.222 +                $csize = strlen($cdata);
 406.223 +                $inflated = gzinflate($cdata);
 406.224 +
 406.225 +                // Calculate CRC32 for inflated content
 406.226 +                $info_gzip_member_header_idx['crc32_valid'] = (bool) (sprintf('%u', crc32($inflated)) == $info_gzip_member_header_idx['crc32']);
 406.227 +
 406.228 +                
 406.229 +                //// Analyse contents
 406.230 +                
 406.231 +                // write content to temp file
 406.232 +                if (($temp_file_name = tempnam('*', 'getID3'))  === false) {
 406.233 +                    throw new getid3_exception('Unable to create temporary file.');
 406.234 +                }
 406.235 +
 406.236 +                if ($tmp = fopen($temp_file_name, 'wb')) {
 406.237 +                    fwrite($tmp, $inflated);
 406.238 +                    fclose($tmp);
 406.239 +                    
 406.240 +                    // clone getid3 - we want same settings
 406.241 +                    $clone = clone $this->getid3;
 406.242 +                    unset($clone->info);
 406.243 +                    try {
 406.244 +                        $clone->Analyze($temp_file_name);
 406.245 +                        $info_gzip_member_header_idx['parsed_content'] = $clone->info;
 406.246 +                    }
 406.247 +                    catch (getid3_exception $e) {
 406.248 +                        // unable to parse contents
 406.249 +                    }
 406.250 +                    
 406.251 +                    unlink($temp_file_name);
 406.252 +                }
 406.253 +            
 406.254 +                // Unknown/unhandled format 
 406.255 +                else {
 406.256 +                                        
 406.257 +                }
 406.258 +            }
 406.259 +        }
 406.260 +        return true;
 406.261 +    }
 406.262 +
 406.263 +
 406.264 +    // Converts the OS type
 406.265 +    public static function get_os_type($key) {
 406.266 +        static $os_type = array (
 406.267 +            '0'   => 'FAT filesystem (MS-DOS, OS/2, NT/Win32)',
 406.268 +            '1'   => 'Amiga',
 406.269 +            '2'   => 'VMS (or OpenVMS)',
 406.270 +            '3'   => 'Unix',
 406.271 +            '4'   => 'VM/CMS',
 406.272 +            '5'   => 'Atari TOS',
 406.273 +            '6'   => 'HPFS filesystem (OS/2, NT)',
 406.274 +            '7'   => 'Macintosh',
 406.275 +            '8'   => 'Z-System',
 406.276 +            '9'   => 'CP/M',
 406.277 +            '10'  => 'TOPS-20',
 406.278 +            '11'  => 'NTFS filesystem (NT)',
 406.279 +            '12'  => 'QDOS',
 406.280 +            '13'  => 'Acorn RISCOS',
 406.281 +            '255' => 'unknown'
 406.282 +        );
 406.283 +        return @$os_type[$key];
 406.284 +    }
 406.285 +
 406.286 +
 406.287 +    // Converts the eXtra FLags
 406.288 +    public static function get_xflag_type($key) {
 406.289 +        static $xflag_type = array (
 406.290 +            '0' => 'unknown',
 406.291 +            '2' => 'maximum compression',
 406.292 +            '4' => 'fastest algorithm'
 406.293 +        );
 406.294 +        return @$xflag_type[$key];
 406.295 +    }
 406.296 +    
 406.297 +}
 406.298 +
 406.299 +?>
 406.300 \ No newline at end of file
   407.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   407.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.szip.php	Mon Feb 22 08:02:39 2010 -0500
   407.3 @@ -0,0 +1,105 @@
   407.4 +<?php
   407.5 +// +----------------------------------------------------------------------+
   407.6 +// | PHP version 5                                                        |
   407.7 +// +----------------------------------------------------------------------+
   407.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   407.9 +// +----------------------------------------------------------------------+
  407.10 +// | This source file is subject to version 2 of the GPL license,         |
  407.11 +// | that is bundled with this package in the file license.txt and is     |
  407.12 +// | available through the world-wide-web at the following url:           |
  407.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  407.14 +// +----------------------------------------------------------------------+
  407.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  407.16 +// +----------------------------------------------------------------------+
  407.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  407.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  407.19 +// +----------------------------------------------------------------------+
  407.20 +// | module.archive.szip.php                                              |
  407.21 +// | module for analyzing SZIP compressed files                           |
  407.22 +// | dependencies: NONE                                                   |
  407.23 +// +----------------------------------------------------------------------+
  407.24 +//
  407.25 +// $Id: module.archive.szip.php,v 1.2 2006/11/02 10:48:00 ah Exp $
  407.26 +
  407.27 +        
  407.28 +        
  407.29 +class getid3_szip extends getid3_handler
  407.30 +{
  407.31 +
  407.32 +    public function Analyze() {
  407.33 +        
  407.34 +        $getid3 = $this->getid3;
  407.35 +
  407.36 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  407.37 +        $szip_rkau = fread($getid3->fp, 6);
  407.38 +        
  407.39 +        // Magic bytes:  'SZ'."\x0A\x04"
  407.40 +            
  407.41 +        $getid3->info['fileformat']            = 'szip';
  407.42 +
  407.43 +        $getid3->info['szip']['major_version'] = getid3_lib::BigEndian2Int(substr($szip_rkau, 4, 1));
  407.44 +        $getid3->info['szip']['minor_version'] = getid3_lib::BigEndian2Int(substr($szip_rkau, 5, 1));
  407.45 +
  407.46 +        while (!feof($getid3->fp)) {
  407.47 +            $next_block_id = fread($getid3->fp, 2);
  407.48 +            switch ($next_block_id) {
  407.49 +                case 'SZ':
  407.50 +                    // Note that szip files can be concatenated, this has the same effect as
  407.51 +                    // concatenating the files. this also means that global header blocks
  407.52 +                    // might be present between directory/data blocks.
  407.53 +                    fseek($getid3->fp, 4, SEEK_CUR);
  407.54 +                    break;
  407.55 +
  407.56 +                case 'BH':
  407.57 +                    $bh_header_bytes  = getid3_lib::BigEndian2Int(fread($getid3->fp, 3));
  407.58 +                    $bh_header_data   = fread($getid3->fp, $bh_header_bytes);
  407.59 +                    $bh_header_offset = 0;
  407.60 +                    while (strpos($bh_header_data, "\x00", $bh_header_offset) > 0) {
  407.61 +                        //filename as \0 terminated string  (empty string indicates end)
  407.62 +                        //owner as \0 terminated string (empty is same as last file)
  407.63 +                        //group as \0 terminated string (empty is same as last file)
  407.64 +                        //3 byte filelength in this block
  407.65 +                        //2 byte access flags
  407.66 +                        //4 byte creation time (like in unix)
  407.67 +                        //4 byte modification time (like in unix)
  407.68 +                        //4 byte access time (like in unix)
  407.69 +
  407.70 +                        $bh_data_array['filename'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
  407.71 +                        $bh_header_offset += (strlen($bh_data_array['filename']) + 1);
  407.72 +
  407.73 +                        $bh_data_array['owner'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
  407.74 +                        $bh_header_offset += (strlen($bh_data_array['owner']) + 1);
  407.75 +
  407.76 +                        $bh_data_array['group'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
  407.77 +                        $bh_header_offset += (strlen($bh_data_array['group']) + 1);
  407.78 +
  407.79 +                        $bh_data_array['filelength'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 3));
  407.80 +                        $bh_header_offset += 3;
  407.81 +
  407.82 +                        $bh_data_array['access_flags'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 2));
  407.83 +                        $bh_header_offset += 2;
  407.84 +
  407.85 +                        $bh_data_array['creation_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
  407.86 +                        $bh_header_offset += 4;
  407.87 +
  407.88 +                        $bh_data_array['modification_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
  407.89 +                        $bh_header_offset += 4;
  407.90 +
  407.91 +                        $bh_data_array['access_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
  407.92 +                        $bh_header_offset += 4;
  407.93 +
  407.94 +                        $getid3->info['szip']['BH'][] = $bh_data_array;
  407.95 +                    }
  407.96 +                    break;
  407.97 +
  407.98 +                default:
  407.99 +                    break 2;
 407.100 +            }
 407.101 +        }
 407.102 +
 407.103 +        return true;
 407.104 +    }
 407.105 +
 407.106 +}
 407.107 +
 407.108 +?>
 407.109 \ No newline at end of file
   408.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   408.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.tar.php	Mon Feb 22 08:02:39 2010 -0500
   408.3 @@ -0,0 +1,231 @@
   408.4 +<?php
   408.5 +// +----------------------------------------------------------------------+
   408.6 +// | PHP version 5                                                        |
   408.7 +// +----------------------------------------------------------------------+
   408.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   408.9 +// +----------------------------------------------------------------------+
  408.10 +// | This source file is subject to version 2 of the GPL license,         |
  408.11 +// | that is bundled with this package in the file license.txt and is     |
  408.12 +// | available through the world-wide-web at the following url:           |
  408.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  408.14 +// +----------------------------------------------------------------------+
  408.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  408.16 +// +----------------------------------------------------------------------+
  408.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  408.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  408.19 +// +----------------------------------------------------------------------+
  408.20 +// | module.archive.tar.php                                               |
  408.21 +// | module for analyzing TAR files                                       |
  408.22 +// | dependencies: NONE                                                   |
  408.23 +// +----------------------------------------------------------------------+
  408.24 +// | Module originally written by Mike Mozolin <teddybearØmail*ru>        |
  408.25 +// +----------------------------------------------------------------------+
  408.26 +//
  408.27 +// $Id: module.archive.tar.php,v 1.2 2006/11/02 10:48:00 ah Exp $
  408.28 +
  408.29 +        
  408.30 +        
  408.31 +class getid3_tar extends getid3_handler
  408.32 +{
  408.33 +
  408.34 +    function Analyze() {
  408.35 +
  408.36 +        $info = &$this->getid3->info;
  408.37 +
  408.38 +        $info['fileformat'] = 'tar';
  408.39 +
  408.40 +        $fp = $this->getid3->fp;
  408.41 +        
  408.42 +        fseek($fp, 0);
  408.43 +        
  408.44 +        $unpack_header = 'a100fname/a8mode/a8uid/a8gid/a12size/a12mtime/a8chksum/a1typflag/a100lnkname/a6magic/a2ver/a32uname/a32gname/a8devmaj/a8devmin/a155/prefix';
  408.45 +
  408.46 +        $null_512k = str_repeat("\0", 512); // end-of-file marker
  408.47 +
  408.48 +        $already_warned = false;
  408.49 +
  408.50 +        while (!feof($fp)) {
  408.51 +            
  408.52 +            $buffer = fread($fp, 512);
  408.53 +            
  408.54 +            // check the block
  408.55 +            $checksum = 0;
  408.56 +            for ($i = 0; $i < 148; $i++) {
  408.57 +                $checksum += ord(substr($buffer, $i, 1));
  408.58 +            }
  408.59 +            for ($i = 148; $i < 156; $i++) {
  408.60 +                $checksum += ord(' ');
  408.61 +            }
  408.62 +            for ($i = 156; $i < 512; $i++) {
  408.63 +                $checksum += ord(substr($buffer, $i, 1));
  408.64 +            }
  408.65 +            $attr    = unpack($unpack_header, $buffer);
  408.66 +            $name    =        trim(@$attr['fname']);
  408.67 +            $mode    = octdec(trim(@$attr['mode']));
  408.68 +            $uid     = octdec(trim(@$attr['uid']));
  408.69 +            $gid     = octdec(trim(@$attr['gid']));
  408.70 +            $size    = octdec(trim(@$attr['size']));
  408.71 +            $mtime   = octdec(trim(@$attr['mtime']));
  408.72 +            $chksum  = octdec(trim(@$attr['chksum']));
  408.73 +            $typflag =        trim(@$attr['typflag']);
  408.74 +            $lnkname =        trim(@$attr['lnkname']);
  408.75 +            $magic   =        trim(@$attr['magic']);
  408.76 +            $ver     =        trim(@$attr['ver']);
  408.77 +            $uname   =        trim(@$attr['uname']);
  408.78 +            $gname   =        trim(@$attr['gname']);
  408.79 +            $devmaj  = octdec(trim(@$attr['devmaj']));
  408.80 +            $devmin  = octdec(trim(@$attr['devmin']));
  408.81 +            $prefix  =        trim(@$attr['prefix']);
  408.82 +
  408.83 +            // EOF Found
  408.84 +            if (($checksum == 256) && ($chksum == 0)) {
  408.85 +                break;
  408.86 +            }
  408.87 +
  408.88 +            // Check if filename if 7bit as spec requires
  408.89 +            if (!$already_warned) {
  408.90 +                for ($i = 0; $i < strlen($name); $i++) {
  408.91 +                    if ($name{$i} < chr(32) || $name{$i} > chr(127)) {
  408.92 +                        $this->getid3->warning('Some filenames contains extended characters, which breaks the tar specifation. This is not uncommon, but you will have to handle the character encoding for filenames yourself.');
  408.93 +                        $already_warned = true;
  408.94 +                        break;
  408.95 +                    }
  408.96 +                }
  408.97 +            }
  408.98 +            
  408.99 +            if ($prefix) {
 408.100 +                $name = $prefix.'/'.$name;
 408.101 +            }
 408.102 +            if ((preg_match('#/$#', $name)) && !$name) {
 408.103 +                $typeflag = 5;
 408.104 +            }
 408.105 +            
 408.106 +            // If it's the end of the tar-file...
 408.107 +            if ($buffer == $null_512k) {
 408.108 +                break;
 408.109 +            }
 408.110 +            
 408.111 +            // Protect against tar-files with garbage at the end
 408.112 +            if ($name == '') {
 408.113 +                break;
 408.114 +            }
 408.115 +            
 408.116 +            $info['tar']['file_details'][$name] = array (
 408.117 +                'name'     => $name,
 408.118 +                'mode_raw' => $mode,
 408.119 +                'mode'     => getid3_tar::display_perms($mode),
 408.120 +                'uid'      => $uid,
 408.121 +                'gid'      => $gid,
 408.122 +                'size'     => $size,
 408.123 +                'mtime'    => $mtime,
 408.124 +                'chksum'   => $chksum,
 408.125 +                'typeflag' => getid3_tar::get_flag_type($typflag),
 408.126 +                'linkname' => $lnkname,
 408.127 +                'magic'    => $magic,
 408.128 +                'version'  => $ver,
 408.129 +                'uname'    => $uname,
 408.130 +                'gname'    => $gname,
 408.131 +                'devmajor' => $devmaj,
 408.132 +                'devminor' => $devmin
 408.133 +            );
 408.134 +            
 408.135 +            // Skip the next chunk
 408.136 +            fseek($fp, $size, SEEK_CUR);
 408.137 +
 408.138 +            // Throw away padding
 408.139 +            if ($size % 512) {
 408.140 +                fseek($fp, 512 - $diff, SEEK_CUR);
 408.141 +            }
 408.142 +            
 408.143 +        }
 408.144 +        return true;
 408.145 +    }
 408.146 +
 408.147 +
 408.148 +    // Parses the file mode to file permissions
 408.149 +    public static function display_perms($mode) {
 408.150 +
 408.151 +        // Determine Type
 408.152 +        if ($mode & 0x1000) {
 408.153 +            $type='p'; // FIFO pipe
 408.154 +        }
 408.155 +        elseif ($mode & 0x2000) {
 408.156 +            $type='c'; // Character special
 408.157 +        }
 408.158 +        elseif ($mode & 0x4000) {
 408.159 +            $type='d'; // Directory
 408.160 +        }
 408.161 +        elseif ($mode & 0x6000) {
 408.162 +            $type='b'; // Block special
 408.163 +        }
 408.164 +        elseif ($mode & 0x8000) {
 408.165 +            $type='-'; // Regular
 408.166 +        }
 408.167 +        elseif ($mode & 0xA000) {
 408.168 +            $type='l'; // Symbolic Link
 408.169 +        }
 408.170 +        elseif ($mode & 0xC000) {
 408.171 +            $type='s'; // Socket
 408.172 +        }
 408.173 +        else {
 408.174 +            $type='u'; // UNKNOWN
 408.175 +        }
 408.176 +
 408.177 +        // Determine permissions
 408.178 +        $owner['read']    = (($mode & 00400) ? 'r' : '-');
 408.179 +        $owner['write']   = (($mode & 00200) ? 'w' : '-');
 408.180 +        $owner['execute'] = (($mode & 00100) ? 'x' : '-');
 408.181 +        $group['read']    = (($mode & 00040) ? 'r' : '-');
 408.182 +        $group['write']   = (($mode & 00020) ? 'w' : '-');
 408.183 +        $group['execute'] = (($mode & 00010) ? 'x' : '-');
 408.184 +        $world['read']    = (($mode & 00004) ? 'r' : '-');
 408.185 +        $world['write']   = (($mode & 00002) ? 'w' : '-');
 408.186 +        $world['execute'] = (($mode & 00001) ? 'x' : '-');
 408.187 +
 408.188 +        // Adjust for SUID, SGID and sticky bit
 408.189 +        if ($mode & 0x800) {
 408.190 +            $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
 408.191 +        }
 408.192 +        if ($mode & 0x400) {
 408.193 +            $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
 408.194 +        }
 408.195 +        if ($mode & 0x200) {
 408.196 +            $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';
 408.197 +        }
 408.198 +
 408.199 +        $s  = sprintf('%1s', $type);
 408.200 +        $s .= sprintf('%1s%1s%1s',      $owner['read'], $owner['write'], $owner['execute']);
 408.201 +        $s .= sprintf('%1s%1s%1s',      $group['read'], $group['write'], $group['execute']);
 408.202 +        $s .= sprintf('%1s%1s%1s'."\n", $world['read'], $world['write'], $world['execute']);
 408.203 +
 408.204 +        return $s;
 408.205 +    }
 408.206 +
 408.207 +
 408.208 +    // Converts the file type
 408.209 +    public static function get_flag_type($typflag) {
 408.210 +
 408.211 +        static $flag_types = array (
 408.212 +            '0' => 'LF_NORMAL',
 408.213 +            '1' => 'LF_LINK',
 408.214 +            '2' => 'LF_SYNLINK',
 408.215 +            '3' => 'LF_CHR',
 408.216 +            '4' => 'LF_BLK',
 408.217 +            '5' => 'LF_DIR',
 408.218 +            '6' => 'LF_FIFO',
 408.219 +            '7' => 'LF_CONFIG',
 408.220 +            'D' => 'LF_DUMPDIR',
 408.221 +            'K' => 'LF_LONGLINK',
 408.222 +            'L' => 'LF_LONGNAME',
 408.223 +            'M' => 'LF_MULTIVOL',
 408.224 +            'N' => 'LF_NAMES',
 408.225 +            'S' => 'LF_SPARSE',
 408.226 +            'V' => 'LF_VOLHDR'
 408.227 +        );
 408.228 +
 408.229 +        return @$flag_types[$typflag];
 408.230 +    }
 408.231 +    
 408.232 +}
 408.233 +
 408.234 +?>
 408.235 \ No newline at end of file
   409.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   409.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.archive.zip.php	Mon Feb 22 08:02:39 2010 -0500
   409.3 @@ -0,0 +1,510 @@
   409.4 +<?php
   409.5 +// +----------------------------------------------------------------------+
   409.6 +// | PHP version 5                                                        |
   409.7 +// +----------------------------------------------------------------------+
   409.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   409.9 +// +----------------------------------------------------------------------+
  409.10 +// | This source file is subject to version 2 of the GPL license,         |
  409.11 +// | that is bundled with this package in the file license.txt and is     |
  409.12 +// | available through the world-wide-web at the following url:           |
  409.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  409.14 +// +----------------------------------------------------------------------+
  409.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  409.16 +// +----------------------------------------------------------------------+
  409.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  409.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  409.19 +// +----------------------------------------------------------------------+
  409.20 +// | module.archive.zip.php                                               |
  409.21 +// | Module for analyzing pkZip files                                     |
  409.22 +// | dependencies: NONE                                                   |
  409.23 +// +----------------------------------------------------------------------+
  409.24 +//
  409.25 +// $Id: module.archive.zip.php,v 1.4 2006/11/02 10:48:00 ah Exp $
  409.26 +
  409.27 +
  409.28 +
  409.29 +class getid3_zip extends getid3_handler
  409.30 +{
  409.31 +
  409.32 +    public function Analyze() {
  409.33 +
  409.34 +        $getid3 = $this->getid3;
  409.35 +        
  409.36 +        $getid3->info['zip'] = array ();
  409.37 +        $info_zip = &$getid3->info['zip'];
  409.38 +        
  409.39 +        $getid3->info['fileformat'] = 'zip';
  409.40 +        
  409.41 +        $info_zip['encoding'] = 'ISO-8859-1';
  409.42 +        $info_zip['files']    = array ();
  409.43 +        $info_zip['compressed_size'] = $info_zip['uncompressed_size'] = $info_zip['entries_count'] = 0;
  409.44 +
  409.45 +        $eocd_search_data    = '';
  409.46 +        $eocd_search_counter = 0;
  409.47 +        while ($eocd_search_counter++ < 512) {
  409.48 +
  409.49 +            fseek($getid3->fp, -128 * $eocd_search_counter, SEEK_END);
  409.50 +            $eocd_search_data = fread($getid3->fp, 128).$eocd_search_data;
  409.51 +
  409.52 +            if (strstr($eocd_search_data, 'PK'."\x05\x06")) {
  409.53 +
  409.54 +                $eocd_position = strpos($eocd_search_data, 'PK'."\x05\x06");
  409.55 +                fseek($getid3->fp, (-128 * $eocd_search_counter) + $eocd_position, SEEK_END);
  409.56 +                $info_zip['end_central_directory'] = $this->ZIPparseEndOfCentralDirectory();
  409.57 +
  409.58 +                fseek($getid3->fp, $info_zip['end_central_directory']['directory_offset'], SEEK_SET);
  409.59 +                $info_zip['entries_count'] = 0;
  409.60 +                while ($central_directoryentry = $this->ZIPparseCentralDirectory($getid3->fp)) {
  409.61 +                    $info_zip['central_directory'][] = $central_directoryentry;
  409.62 +                    $info_zip['entries_count']++;
  409.63 +                    $info_zip['compressed_size']   += $central_directoryentry['compressed_size'];
  409.64 +                    $info_zip['uncompressed_size'] += $central_directoryentry['uncompressed_size'];
  409.65 +
  409.66 +                    if ($central_directoryentry['uncompressed_size'] > 0) {
  409.67 +                        $info_zip['files'] = getid3_zip::array_merge_clobber($info_zip['files'], getid3_zip::CreateDeepArray($central_directoryentry['filename'], '/', $central_directoryentry['uncompressed_size']));
  409.68 +                    }
  409.69 +                }
  409.70 +
  409.71 +                if ($info_zip['entries_count'] == 0) {
  409.72 +                    throw new getid3_exception('No Central Directory entries found (truncated file?)');
  409.73 +                }
  409.74 +
  409.75 +                if (!empty($info_zip['end_central_directory']['comment'])) {
  409.76 +                    $info_zip['comments']['comment'][] = $info_zip['end_central_directory']['comment'];
  409.77 +                }
  409.78 +
  409.79 +                if (isset($info_zip['central_directory'][0]['compression_method'])) {
  409.80 +                    $info_zip['compression_method'] = $info_zip['central_directory'][0]['compression_method'];
  409.81 +                }
  409.82 +                if (isset($info_zip['central_directory'][0]['flags']['compression_speed'])) {
  409.83 +                    $info_zip['compression_speed']  = $info_zip['central_directory'][0]['flags']['compression_speed'];
  409.84 +                }
  409.85 +                if (isset($info_zip['compression_method']) && ($info_zip['compression_method'] == 'store') && !isset($info_zip['compression_speed'])) {
  409.86 +                    $info_zip['compression_speed']  = 'store';
  409.87 +                }
  409.88 +
  409.89 +                return true;
  409.90 +            }
  409.91 +        }
  409.92 +
  409.93 +        if ($this->getZIPentriesFilepointer()) {
  409.94 +
  409.95 +            // central directory couldn't be found and/or parsed
  409.96 +            // scan through actual file data entries, recover as much as possible from probable trucated file
  409.97 +            if (@$info_zip['compressed_size'] > ($getid3->info['filesize'] - 46 - 22)) {
  409.98 +                throw new getid3_exception('Warning: Truncated file! - Total compressed file sizes ('.$info_zip['compressed_size'].' bytes) is greater than filesize minus Central Directory and End Of Central Directory structures ('.($getid3->info['filesize'] - 46 - 22).' bytes)');
  409.99 +            }
 409.100 +            throw new getid3_exception('Cannot find End Of Central Directory - returned list of files in [zip][entries] array may not be complete');
 409.101 +        }
 409.102 +        
 409.103 +        //throw new getid3_exception('Cannot find End Of Central Directory (truncated file?)');
 409.104 +    }
 409.105 +
 409.106 +
 409.107 +
 409.108 +    private function getZIPHeaderFilepointerTopDown() {
 409.109 +        
 409.110 +        // shortcut
 409.111 +        $getid3 = $this->getid3;
 409.112 +        
 409.113 +        $getid3->info['fileformat'] = 'zip';
 409.114 +        
 409.115 +        $getid3->info['zip'] = array ();
 409.116 +        $info_zip['compressed_size'] = $info_zip['uncompressed_size'] = $info_zip['entries_count'] = 0;
 409.117 +        
 409.118 +        rewind($getid3->fp);
 409.119 +        while ($fileentry = $this->ZIPparseLocalFileHeader()) {
 409.120 +            $info_zip['entries'][] = $fileentry;
 409.121 +            $info_zip['entries_count']++;
 409.122 +        }
 409.123 +        if ($info_zip['entries_count'] == 0) {
 409.124 +            throw new getid3_exception('No Local File Header entries found');
 409.125 +        }
 409.126 +
 409.127 +        $info_zip['entries_count']  = 0;
 409.128 +        while ($central_directoryentry = $this->ZIPparseCentralDirectory($getid3->fp)) {
 409.129 +            $info_zip['central_directory'][] = $central_directoryentry;
 409.130 +            $info_zip['entries_count']++;
 409.131 +            $info_zip['compressed_size']   += $central_directoryentry['compressed_size'];
 409.132 +            $info_zip['uncompressed_size'] += $central_directoryentry['uncompressed_size'];
 409.133 +        }
 409.134 +        if ($info_zip['entries_count'] == 0) {
 409.135 +            throw new getid3_exception('No Central Directory entries found (truncated file?)');
 409.136 +        }
 409.137 +
 409.138 +        if ($eocd = $this->ZIPparseEndOfCentralDirectory()) {
 409.139 +            $info_zip['end_central_directory'] = $eocd;
 409.140 +        } else {
 409.141 +            throw new getid3_exception('No End Of Central Directory entry found (truncated file?)');
 409.142 +        }
 409.143 +
 409.144 +        if (!@$info_zip['end_central_directory']['comment']) {
 409.145 +            $info_zip['comments']['comment'][] = $info_zip['end_central_directory']['comment'];
 409.146 +        }
 409.147 +
 409.148 +        return true;
 409.149 +    }
 409.150 +
 409.151 +
 409.152 +
 409.153 +    private function getZIPentriesFilepointer() {
 409.154 +        
 409.155 +        // shortcut
 409.156 +        $getid3 = $this->getid3;
 409.157 +        
 409.158 +        $getid3->info['zip'] = array ();
 409.159 +        $info_zip['compressed_size'] = $info_zip['uncompressed_size'] = $info_zip['entries_count'] = 0;
 409.160 +
 409.161 +        rewind($getid3->fp);
 409.162 +        while ($fileentry = $this->ZIPparseLocalFileHeader($getid3->fp)) {
 409.163 +            $info_zip['entries'][] = $fileentry;
 409.164 +            $info_zip['entries_count']++;
 409.165 +            $info_zip['compressed_size']   += $fileentry['compressed_size'];
 409.166 +            $info_zip['uncompressed_size'] += $fileentry['uncompressed_size'];
 409.167 +        }
 409.168 +        if ($info_zip['entries_count'] == 0) {
 409.169 +            throw new getid3_exception('No Local File Header entries found');
 409.170 +        }
 409.171 +
 409.172 +        return true;
 409.173 +    }
 409.174 +
 409.175 +
 409.176 +
 409.177 +    private function ZIPparseLocalFileHeader() {
 409.178 +        
 409.179 +        // shortcut
 409.180 +        $getid3 = $this->getid3;
 409.181 +
 409.182 +        $local_file_header['offset'] = ftell($getid3->fp);
 409.183 +        
 409.184 +        $zip_local_file_header = fread($getid3->fp, 30);
 409.185 +
 409.186 +        $local_file_header['raw']['signature'] = getid3_lib::LittleEndian2Int(substr($zip_local_file_header,  0, 4));
 409.187 +        
 409.188 +        // Invalid Local File Header Signature
 409.189 +        if ($local_file_header['raw']['signature'] != 0x04034B50) {
 409.190 +            fseek($getid3->fp, $local_file_header['offset'], SEEK_SET); // seek back to where filepointer originally was so it can be handled properly
 409.191 +            return false;
 409.192 +        }
 409.193 +        
 409.194 +        getid3_lib::ReadSequence('LittleEndian2Int', $local_file_header['raw'], $zip_local_file_header,  4, 
 409.195 +            array (
 409.196 +                'extract_version'    => 2, 
 409.197 +                'general_flags'      => 2, 
 409.198 +                'compression_method' => 2, 
 409.199 +                'last_mod_file_time' => 2, 
 409.200 +                'last_mod_file_date' => 2, 
 409.201 +                'crc_32'             => 2, 
 409.202 +                'compressed_size'    => 2, 
 409.203 +                'uncompressed_size'  => 2, 
 409.204 +                'filename_length'    => 2, 
 409.205 +                'extra_field_length' => 2
 409.206 +            )
 409.207 +        );        
 409.208 +
 409.209 +        $local_file_header['extract_version']         = sprintf('%1.1f', $local_file_header['raw']['extract_version'] / 10);
 409.210 +        $local_file_header['host_os']                 = $this->ZIPversionOSLookup(($local_file_header['raw']['extract_version'] & 0xFF00) >> 8);
 409.211 +        $local_file_header['compression_method']      = $this->ZIPcompressionMethodLookup($local_file_header['raw']['compression_method']);
 409.212 +        $local_file_header['compressed_size']         = $local_file_header['raw']['compressed_size'];
 409.213 +        $local_file_header['uncompressed_size']       = $local_file_header['raw']['uncompressed_size'];
 409.214 +        $local_file_header['flags']                   = $this->ZIPparseGeneralPurposeFlags($local_file_header['raw']['general_flags'], $local_file_header['raw']['compression_method']);
 409.215 +        $local_file_header['last_modified_timestamp'] = $this->DOStime2UNIXtime($local_file_header['raw']['last_mod_file_date'], $local_file_header['raw']['last_mod_file_time']);
 409.216 +
 409.217 +        $filename_extra_field_length = $local_file_header['raw']['filename_length'] + $local_file_header['raw']['extra_field_length'];
 409.218 +        if ($filename_extra_field_length > 0) {
 409.219 +            $zip_local_file_header .= fread($getid3->fp, $filename_extra_field_length);
 409.220 +
 409.221 +            if ($local_file_header['raw']['filename_length'] > 0) {
 409.222 +                $local_file_header['filename'] = substr($zip_local_file_header, 30, $local_file_header['raw']['filename_length']);
 409.223 +            }
 409.224 +            if ($local_file_header['raw']['extra_field_length'] > 0) {
 409.225 +                $local_file_header['raw']['extra_field_data'] = substr($zip_local_file_header, 30 + $local_file_header['raw']['filename_length'], $local_file_header['raw']['extra_field_length']);
 409.226 +            }
 409.227 +        }
 409.228 +
 409.229 +        $local_file_header['data_offset'] = ftell($getid3->fp);
 409.230 +        fseek($getid3->fp, $local_file_header['raw']['compressed_size'], SEEK_CUR);
 409.231 +
 409.232 +        if ($local_file_header['flags']['data_descriptor_used']) {
 409.233 +            $data_descriptor = fread($getid3->fp, 12);
 409.234 +            
 409.235 +            getid3_lib::ReadSequence('LittleEndian2Int', $local_file_header['data_descriptor'], $data_descriptor, 0, 
 409.236 +                array (
 409.237 +                'crc_32'            => 4,
 409.238 +                'compressed_size'   => 4,
 409.239 +                'uncompressed_size' => 4 
 409.240 +                )
 409.241 +            );
 409.242 +        }
 409.243 +
 409.244 +        return $local_file_header;
 409.245 +    }
 409.246 +
 409.247 +
 409.248 +
 409.249 +    private function ZIPparseCentralDirectory() {
 409.250 +        
 409.251 +        // shortcut
 409.252 +        $getid3 = $this->getid3;
 409.253 +
 409.254 +        $central_directory['offset'] = ftell($getid3->fp);
 409.255 +
 409.256 +        $zip_central_directory = fread($getid3->fp, 46);
 409.257 +
 409.258 +        $central_directory['raw']['signature']  = getid3_lib::LittleEndian2Int(substr($zip_central_directory,  0, 4));
 409.259 +        
 409.260 +        // invalid Central Directory Signature
 409.261 +        if ($central_directory['raw']['signature'] != 0x02014B50) {
 409.262 +            fseek($getid3->fp, $central_directory['offset'], SEEK_SET); // seek back to where filepointer originally was so it can be handled properly
 409.263 +            return false;
 409.264 +        }
 409.265 +        
 409.266 +        getid3_lib::ReadSequence('LittleEndian2Int', $central_directory['raw'], $zip_central_directory,  4, 
 409.267 +            array (
 409.268 +                'create_version'       => 2,
 409.269 +                'extract_version'      => 2,
 409.270 +                'general_flags'        => 2,
 409.271 +                'compression_method'   => 2,
 409.272 +                'last_mod_file_time'   => 2,
 409.273 +                'last_mod_file_date'   => 2,
 409.274 +                'crc_32'               => 4,
 409.275 +                'compressed_size'      => 4,
 409.276 +                'uncompressed_size'    => 4,
 409.277 +                'filename_length'      => 2,
 409.278 +                'extra_field_length'   => 2,
 409.279 +                'file_comment_length'  => 2,
 409.280 +                'disk_number_start'    => 2,
 409.281 +                'internal_file_attrib' => 2,
 409.282 +                'external_file_attrib' => 4,
 409.283 +                'local_header_offset'  => 4
 409.284 +            )
 409.285 +        );
 409.286 +        
 409.287 +        $central_directory['entry_offset']            = $central_directory['raw']['local_header_offset'];
 409.288 +        $central_directory['create_version']          = sprintf('%1.1f', $central_directory['raw']['create_version'] / 10);
 409.289 +        $central_directory['extract_version']         = sprintf('%1.1f', $central_directory['raw']['extract_version'] / 10);
 409.290 +        $central_directory['host_os']                 = $this->ZIPversionOSLookup(($central_directory['raw']['extract_version'] & 0xFF00) >> 8);
 409.291 +        $central_directory['compression_method']      = $this->ZIPcompressionMethodLookup($central_directory['raw']['compression_method']);
 409.292 +        $central_directory['compressed_size']         = $central_directory['raw']['compressed_size'];
 409.293 +        $central_directory['uncompressed_size']       = $central_directory['raw']['uncompressed_size'];
 409.294 +        $central_directory['flags']                   = $this->ZIPparseGeneralPurposeFlags($central_directory['raw']['general_flags'], $central_directory['raw']['compression_method']);
 409.295 +        $central_directory['last_modified_timestamp'] = $this->DOStime2UNIXtime($central_directory['raw']['last_mod_file_date'], $central_directory['raw']['last_mod_file_time']);
 409.296 +
 409.297 +        $filename_extra_field_comment_length = $central_directory['raw']['filename_length'] + $central_directory['raw']['extra_field_length'] + $central_directory['raw']['file_comment_length'];
 409.298 +        if ($filename_extra_field_comment_length > 0) {
 409.299 +            $filename_extra_field_comment = fread($getid3->fp, $filename_extra_field_comment_length);
 409.300 +
 409.301 +            if ($central_directory['raw']['filename_length'] > 0) {
 409.302 +                $central_directory['filename']= substr($filename_extra_field_comment, 0, $central_directory['raw']['filename_length']);
 409.303 +            }
 409.304 +            if ($central_directory['raw']['extra_field_length'] > 0) {
 409.305 +                $central_directory['raw']['extra_field_data'] = substr($filename_extra_field_comment, $central_directory['raw']['filename_length'], $central_directory['raw']['extra_field_length']);
 409.306 +            }
 409.307 +            if ($central_directory['raw']['file_comment_length'] > 0) {
 409.308 +                $central_directory['file_comment'] = substr($filename_extra_field_comment, $central_directory['raw']['filename_length'] + $central_directory['raw']['extra_field_length'], $central_directory['raw']['file_comment_length']);
 409.309 +            }
 409.310 +        }
 409.311 +
 409.312 +        return $central_directory;
 409.313 +    }
 409.314 +
 409.315 +    
 409.316 +    
 409.317 +    private function ZIPparseEndOfCentralDirectory() {
 409.318 +        
 409.319 +        // shortcut             
 409.320 +        $getid3 = $this->getid3;
 409.321 +    
 409.322 +        $end_of_central_directory['offset'] = ftell($getid3->fp);
 409.323 +
 409.324 +        $zip_end_of_central_directory = fread($getid3->fp, 22);
 409.325 +
 409.326 +        $end_of_central_directory['signature'] = getid3_lib::LittleEndian2Int(substr($zip_end_of_central_directory,  0, 4));
 409.327 +        
 409.328 +        // invalid End Of Central Directory Signature
 409.329 +        if ($end_of_central_directory['signature'] != 0x06054B50) {
 409.330 +            fseek($getid3->fp, $end_of_central_directory['offset'], SEEK_SET); // seek back to where filepointer originally was so it can be handled properly
 409.331 +            return false;
 409.332 +        }
 409.333 +        
 409.334 +        getid3_lib::ReadSequence('LittleEndian2Int', $end_of_central_directory, $zip_end_of_central_directory,  4, 
 409.335 +            array (
 409.336 +                'disk_number_current'         => 2,
 409.337 +                'disk_number_start_directory' => 2,
 409.338 +                'directory_entries_this_disk' => 2,
 409.339 +                'directory_entries_total'     => 2,
 409.340 +                'directory_size'              => 4,
 409.341 +                'directory_offset'            => 4,
 409.342 +                'comment_length'              => 2
 409.343 +            )
 409.344 +        );
 409.345 +        
 409.346 +        if ($end_of_central_directory['comment_length'] > 0) {
 409.347 +            $end_of_central_directory['comment'] = fread($getid3->fp, $end_of_central_directory['comment_length']);
 409.348 +        }
 409.349 +
 409.350 +        return $end_of_central_directory;
 409.351 +    }
 409.352 +    
 409.353 +
 409.354 +
 409.355 +    public static function ZIPparseGeneralPurposeFlags($flag_bytes, $compression_method) {
 409.356 +
 409.357 +        $parsed_flags['encrypted'] = (bool)($flag_bytes & 0x0001);
 409.358 +
 409.359 +        switch ($compression_method) {
 409.360 +            case 6:
 409.361 +                $parsed_flags['dictionary_size']    = (($flag_bytes & 0x0002) ? 8192 : 4096);
 409.362 +                $parsed_flags['shannon_fano_trees'] = (($flag_bytes & 0x0004) ? 3    : 2);
 409.363 +                break;
 409.364 +
 409.365 +            case 8:
 409.366 +            case 9:
 409.367 +                switch (($flag_bytes & 0x0006) >> 1) {
 409.368 +                    case 0:
 409.369 +                        $parsed_flags['compression_speed'] = 'normal';
 409.370 +                        break;
 409.371 +                    case 1:
 409.372 +                        $parsed_flags['compression_speed'] = 'maximum';
 409.373 +                        break;
 409.374 +                    case 2:
 409.375 +                        $parsed_flags['compression_speed'] = 'fast';
 409.376 +                        break;
 409.377 +                    case 3:
 409.378 +                        $parsed_flags['compression_speed'] = 'superfast';
 409.379 +                        break;
 409.380 +                }
 409.381 +                break;
 409.382 +        }
 409.383 +        $parsed_flags['data_descriptor_used'] = (bool)($flag_bytes & 0x0008);
 409.384 +
 409.385 +        return $parsed_flags;
 409.386 +    }
 409.387 +
 409.388 +
 409.389 +
 409.390 +    public static function ZIPversionOSLookup($index) {
 409.391 +        
 409.392 +        static $lookup = array (
 409.393 +            0  => 'MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)',
 409.394 +            1  => 'Amiga',
 409.395 +            2  => 'OpenVMS',
 409.396 +            3  => 'Unix',
 409.397 +            4  => 'VM/CMS',
 409.398 +            5  => 'Atari ST',
 409.399 +            6  => 'OS/2 H.P.F.S.',
 409.400 +            7  => 'Macintosh',
 409.401 +            8  => 'Z-System',
 409.402 +            9  => 'CP/M',
 409.403 +            10 => 'Windows NTFS',
 409.404 +            11 => 'MVS',
 409.405 +            12 => 'VSE',
 409.406 +            13 => 'Acorn Risc',
 409.407 +            14 => 'VFAT',
 409.408 +            15 => 'Alternate MVS',
 409.409 +            16 => 'BeOS',
 409.410 +            17 => 'Tandem'
 409.411 +        );
 409.412 +        return (isset($lookup[$index]) ? $lookup[$index] : '[unknown]');
 409.413 +    }
 409.414 +
 409.415 +
 409.416 +
 409.417 +    public static function ZIPcompressionMethodLookup($index) {
 409.418 +
 409.419 +        static $lookup = array (
 409.420 +            0  => 'store',
 409.421 +            1  => 'shrink',
 409.422 +            2  => 'reduce-1',
 409.423 +            3  => 'reduce-2',
 409.424 +            4  => 'reduce-3',
 409.425 +            5  => 'reduce-4',
 409.426 +            6  => 'implode',
 409.427 +            7  => 'tokenize',
 409.428 +            8  => 'deflate',
 409.429 +            9  => 'deflate64',
 409.430 +            10 => 'PKWARE Date Compression Library Imploding'
 409.431 +        );
 409.432 +        return (isset($lookup[$index]) ? $lookup[$index] : '[unknown]');
 409.433 +    }
 409.434 +
 409.435 +
 409.436 +
 409.437 +    public static function DOStime2UNIXtime($DOSdate, $DOStime) {
 409.438 +
 409.439 +        /*
 409.440 +        // wFatDate
 409.441 +        // Specifies the MS-DOS date. The date is a packed 16-bit value with the following format:
 409.442 +        // Bits      Contents
 409.443 +        // 0-4    Day of the month (1-31)
 409.444 +        // 5-8    Month (1 = January, 2 = February, and so on)
 409.445 +        // 9-15   Year offset from 1980 (add 1980 to get actual year)
 409.446 +
 409.447 +        $UNIXday    =  ($DOSdate & 0x001F);
 409.448 +        $UNIXmonth  = (($DOSdate & 0x01E0) >> 5);
 409.449 +        $UNIXyear   = (($DOSdate & 0xFE00) >> 9) + 1980;
 409.450 +
 409.451 +        // wFatTime
 409.452 +        // Specifies the MS-DOS time. The time is a packed 16-bit value with the following format:
 409.453 +        // Bits   Contents
 409.454 +        // 0-4    Second divided by 2
 409.455 +        // 5-10   Minute (0-59)
 409.456 +        // 11-15  Hour (0-23 on a 24-hour clock)
 409.457 +
 409.458 +        $UNIXsecond =  ($DOStime & 0x001F) * 2;
 409.459 +        $UNIXminute = (($DOStime & 0x07E0) >> 5);
 409.460 +        $UNIXhour   = (($DOStime & 0xF800) >> 11);
 409.461 +
 409.462 +        return gmmktime($UNIXhour, $UNIXminute, $UNIXsecond, $UNIXmonth, $UNIXday, $UNIXyear);
 409.463 +        */
 409.464 +        return gmmktime(($DOStime & 0xF800) >> 11, ($DOStime & 0x07E0) >> 5, ($DOStime & 0x001F) * 2, ($DOSdate & 0x01E0) >> 5, $DOSdate & 0x001F, (($DOSdate & 0xFE00) >> 9) + 1980);
 409.465 +    }
 409.466 +    
 409.467 +    
 409.468 +    
 409.469 +    public static function array_merge_clobber($array1, $array2) {
 409.470 +
 409.471 +        // written by kcØhireability*com
 409.472 +        // taken from http://www.php.net/manual/en/function.array-merge-recursive.php
 409.473 +        
 409.474 +        if (!is_array($array1) || !is_array($array2)) {
 409.475 +            return false;
 409.476 +        }
 409.477 +        
 409.478 +        $newarray = $array1;
 409.479 +        foreach ($array2 as $key => $val) {
 409.480 +            if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) {
 409.481 +                $newarray[$key] = getid3_zip::array_merge_clobber($newarray[$key], $val);
 409.482 +            } else {
 409.483 +                $newarray[$key] = $val;
 409.484 +            }
 409.485 +        }
 409.486 +        return $newarray;
 409.487 +    }
 409.488 +    
 409.489 +    
 409.490 +    
 409.491 +    public static function CreateDeepArray($array_path, $separator, $value) {
 409.492 +
 409.493 +        // assigns $value to a nested array path:
 409.494 +        //   $foo = getid3_lib::CreateDeepArray('/path/to/my', '/', 'file.txt')
 409.495 +        // is the same as:
 409.496 +        //   $foo = array ('path'=>array('to'=>'array('my'=>array('file.txt'))));
 409.497 +        // or
 409.498 +        //   $foo['path']['to']['my'] = 'file.txt';
 409.499 +        
 409.500 +        while ($array_path{0} == $separator) {
 409.501 +            $array_path = substr($array_path, 1);
 409.502 +        }
 409.503 +        if (($pos = strpos($array_path, $separator)) !== false) {
 409.504 +            return array (substr($array_path, 0, $pos) => getid3_zip::CreateDeepArray(substr($array_path, $pos + 1), $separator, $value));
 409.505 +        }
 409.506 +        
 409.507 +        return array ($array_path => $value);
 409.508 +    }
 409.509 +
 409.510 +}
 409.511 +
 409.512 +
 409.513 +?>
 409.514 \ No newline at end of file
   410.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   410.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.asf.php	Mon Feb 22 08:02:39 2010 -0500
   410.3 @@ -0,0 +1,1846 @@
   410.4 +<?php
   410.5 +// +----------------------------------------------------------------------+
   410.6 +// | PHP version 5                                                        |
   410.7 +// +----------------------------------------------------------------------+
   410.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   410.9 +// +----------------------------------------------------------------------+
  410.10 +// | This source file is subject to version 2 of the GPL license,         |
  410.11 +// | that is bundled with this package in the file license.txt and is     |
  410.12 +// | available through the world-wide-web at the following url:           |
  410.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  410.14 +// +----------------------------------------------------------------------+
  410.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  410.16 +// +----------------------------------------------------------------------+
  410.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  410.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  410.19 +// +----------------------------------------------------------------------+
  410.20 +// | module.audio-video.php                                               |
  410.21 +// | Module for analyzing Microsoft ASF, WMA and WMV files.               |
  410.22 +// | dependencies: module.audio-video.riff.php                            |
  410.23 +// +----------------------------------------------------------------------+
  410.24 +//
  410.25 +// $Id: module.audio-video.asf.php,v 1.7 2006/12/01 22:39:48 ah Exp $
  410.26 +
  410.27 +        
  410.28 +        
  410.29 +class getid3_asf extends getid3_handler
  410.30 +{
  410.31 +
  410.32 +    const Extended_Stream_Properties_Object   = '14E6A5CB-C672-4332-8399-A96952065B5A';
  410.33 +    const Padding_Object                      = '1806D474-CADF-4509-A4BA-9AABCB96AAE8';
  410.34 +    const Payload_Ext_Syst_Pixel_Aspect_Ratio = '1B1EE554-F9EA-4BC8-821A-376B74E4C4B8';
  410.35 +    const Script_Command_Object               = '1EFB1A30-0B62-11D0-A39B-00A0C90348F6';
  410.36 +    const No_Error_Correction                 = '20FB5700-5B55-11CF-A8FD-00805F5C442B';
  410.37 +    const Content_Branding_Object             = '2211B3FA-BD23-11D2-B4B7-00A0C955FC6E';
  410.38 +    const Content_Encryption_Object           = '2211B3FB-BD23-11D2-B4B7-00A0C955FC6E';
  410.39 +    const Digital_Signature_Object            = '2211B3FC-BD23-11D2-B4B7-00A0C955FC6E';
  410.40 +    const Extended_Content_Encryption_Object  = '298AE614-2622-4C17-B935-DAE07EE9289C';
  410.41 +    const Simple_Index_Object                 = '33000890-E5B1-11CF-89F4-00A0C90349CB';
  410.42 +    const Degradable_JPEG_Media               = '35907DE0-E415-11CF-A917-00805F5C442B';
  410.43 +    const Payload_Extension_System_Timecode   = '399595EC-8667-4E2D-8FDB-98814CE76C1E';
  410.44 +    const Binary_Media                        = '3AFB65E2-47EF-40F2-AC2C-70A90D71D343';
  410.45 +    const Timecode_Index_Object               = '3CB73FD0-0C4A-4803-953D-EDF7B6228F0C';
  410.46 +    const Metadata_Library_Object             = '44231C94-9498-49D1-A141-1D134E457054';
  410.47 +    const Reserved_3                          = '4B1ACBE3-100B-11D0-A39B-00A0C90348F6';
  410.48 +    const Reserved_4                          = '4CFEDB20-75F6-11CF-9C0F-00A0C90349CB';
  410.49 +    const Command_Media                       = '59DACFC0-59E6-11D0-A3AC-00A0C90348F6';
  410.50 +    const Header_Extension_Object             = '5FBF03B5-A92E-11CF-8EE3-00C00C205365';
  410.51 +    const Media_Object_Index_Parameters_Obj   = '6B203BAD-3F11-4E84-ACA8-D7613DE2CFA7';
  410.52 +    const Header_Object                       = '75B22630-668E-11CF-A6D9-00AA0062CE6C';
  410.53 +    const Content_Description_Object          = '75B22633-668E-11CF-A6D9-00AA0062CE6C';
  410.54 +    const Error_Correction_Object             = '75B22635-668E-11CF-A6D9-00AA0062CE6C';
  410.55 +    const Data_Object                         = '75B22636-668E-11CF-A6D9-00AA0062CE6C';
  410.56 +    const Web_Stream_Media_Subtype            = '776257D4-C627-41CB-8F81-7AC7FF1C40CC';
  410.57 +    const Stream_Bitrate_Properties_Object    = '7BF875CE-468D-11D1-8D82-006097C9A2B2';
  410.58 +    const Language_List_Object                = '7C4346A9-EFE0-4BFC-B229-393EDE415C85';
  410.59 +    const Codec_List_Object                   = '86D15240-311D-11D0-A3A4-00A0C90348F6';
  410.60 +    const Reserved_2                          = '86D15241-311D-11D0-A3A4-00A0C90348F6';
  410.61 +    const File_Properties_Object              = '8CABDCA1-A947-11CF-8EE4-00C00C205365';
  410.62 +    const File_Transfer_Media                 = '91BD222C-F21C-497A-8B6D-5AA86BFC0185';
  410.63 +    const Old_RTP_Extension_Data              = '96800C63-4C94-11D1-837B-0080C7A37F95';
  410.64 +    const Advanced_Mutual_Exclusion_Object    = 'A08649CF-4775-4670-8A16-6E35357566CD';
  410.65 +    const Bandwidth_Sharing_Object            = 'A69609E6-517B-11D2-B6AF-00C04FD908E9';
  410.66 +    const Reserved_1                          = 'ABD3D211-A9BA-11CF-8EE6-00C00C205365';
  410.67 +    const Bandwidth_Sharing_Exclusive         = 'AF6060AA-5197-11D2-B6AF-00C04FD908E9';
  410.68 +    const Bandwidth_Sharing_Partial           = 'AF6060AB-5197-11D2-B6AF-00C04FD908E9';
  410.69 +    const JFIF_Media                          = 'B61BE100-5B4E-11CF-A8FD-00805F5C442B';
  410.70 +    const Stream_Properties_Object            = 'B7DC0791-A9B7-11CF-8EE6-00C00C205365';
  410.71 +    const Video_Media                         = 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B';
  410.72 +    const Audio_Spread                        = 'BFC3CD50-618F-11CF-8BB2-00AA00B4E220';
  410.73 +    const Metadata_Object                     = 'C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA';
  410.74 +    const Payload_Ext_Syst_Sample_Duration    = 'C6BD9450-867F-4907-83A3-C77921B733AD';
  410.75 +    const Group_Mutual_Exclusion_Object       = 'D1465A40-5A79-4338-B71B-E36B8FD6C249';
  410.76 +    const Extended_Content_Description_Object = 'D2D0A440-E307-11D2-97F0-00A0C95EA850';
  410.77 +    const Stream_Prioritization_Object        = 'D4FED15B-88D3-454F-81F0-ED5C45999E24';
  410.78 +    const Payload_Ext_System_Content_Type     = 'D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC';
  410.79 +    const Old_File_Properties_Object          = 'D6E229D0-35DA-11D1-9034-00A0C90349BE';
  410.80 +    const Old_ASF_Header_Object               = 'D6E229D1-35DA-11D1-9034-00A0C90349BE';
  410.81 +    const Old_ASF_Data_Object                 = 'D6E229D2-35DA-11D1-9034-00A0C90349BE';
  410.82 +    const Index_Object                        = 'D6E229D3-35DA-11D1-9034-00A0C90349BE';
  410.83 +    const Old_Stream_Properties_Object        = 'D6E229D4-35DA-11D1-9034-00A0C90349BE';
  410.84 +    const Old_Content_Description_Object      = 'D6E229D5-35DA-11D1-9034-00A0C90349BE';
  410.85 +    const Old_Script_Command_Object           = 'D6E229D6-35DA-11D1-9034-00A0C90349BE';
  410.86 +    const Old_Marker_Object                   = 'D6E229D7-35DA-11D1-9034-00A0C90349BE';
  410.87 +    const Old_Component_Download_Object       = 'D6E229D8-35DA-11D1-9034-00A0C90349BE';
  410.88 +    const Old_Stream_Group_Object             = 'D6E229D9-35DA-11D1-9034-00A0C90349BE';
  410.89 +    const Old_Scalable_Object                 = 'D6E229DA-35DA-11D1-9034-00A0C90349BE';
  410.90 +    const Old_Prioritization_Object           = 'D6E229DB-35DA-11D1-9034-00A0C90349BE';
  410.91 +    const Bitrate_Mutual_Exclusion_Object     = 'D6E229DC-35DA-11D1-9034-00A0C90349BE';
  410.92 +    const Old_Inter_Media_Dependency_Object   = 'D6E229DD-35DA-11D1-9034-00A0C90349BE';
  410.93 +    const Old_Rating_Object                   = 'D6E229DE-35DA-11D1-9034-00A0C90349BE';
  410.94 +    const Index_Parameters_Object             = 'D6E229DF-35DA-11D1-9034-00A0C90349BE';
  410.95 +    const Old_Color_Table_Object              = 'D6E229E0-35DA-11D1-9034-00A0C90349BE';
  410.96 +    const Old_Language_List_Object            = 'D6E229E1-35DA-11D1-9034-00A0C90349BE';
  410.97 +    const Old_Audio_Media                     = 'D6E229E2-35DA-11D1-9034-00A0C90349BE';
  410.98 +    const Old_Video_Media                     = 'D6E229E3-35DA-11D1-9034-00A0C90349BE';
  410.99 +    const Old_Image_Media                     = 'D6E229E4-35DA-11D1-9034-00A0C90349BE';
 410.100 +    const Old_Timecode_Media                  = 'D6E229E5-35DA-11D1-9034-00A0C90349BE';
 410.101 +    const Old_Text_Media                      = 'D6E229E6-35DA-11D1-9034-00A0C90349BE';
 410.102 +    const Old_MIDI_Media                      = 'D6E229E7-35DA-11D1-9034-00A0C90349BE';
 410.103 +    const Old_Command_Media                   = 'D6E229E8-35DA-11D1-9034-00A0C90349BE';
 410.104 +    const Old_No_Error_Concealment            = 'D6E229EA-35DA-11D1-9034-00A0C90349BE';
 410.105 +    const Old_Scrambled_Audio                 = 'D6E229EB-35DA-11D1-9034-00A0C90349BE';
 410.106 +    const Old_No_Color_Table                  = 'D6E229EC-35DA-11D1-9034-00A0C90349BE';
 410.107 +    const Old_SMPTE_Time                      = 'D6E229ED-35DA-11D1-9034-00A0C90349BE';
 410.108 +    const Old_ASCII_Text                      = 'D6E229EE-35DA-11D1-9034-00A0C90349BE';
 410.109 +    const Old_Unicode_Text                    = 'D6E229EF-35DA-11D1-9034-00A0C90349BE';
 410.110 +    const Old_HTML_Text                       = 'D6E229F0-35DA-11D1-9034-00A0C90349BE';
 410.111 +    const Old_URL_Command                     = 'D6E229F1-35DA-11D1-9034-00A0C90349BE';
 410.112 +    const Old_Filename_Command                = 'D6E229F2-35DA-11D1-9034-00A0C90349BE';
 410.113 +    const Old_ACM_Codec                       = 'D6E229F3-35DA-11D1-9034-00A0C90349BE';
 410.114 +    const Old_VCM_Codec                       = 'D6E229F4-35DA-11D1-9034-00A0C90349BE';
 410.115 +    const Old_QuickTime_Codec                 = 'D6E229F5-35DA-11D1-9034-00A0C90349BE';
 410.116 +    const Old_DirectShow_Transform_Filter     = 'D6E229F6-35DA-11D1-9034-00A0C90349BE';
 410.117 +    const Old_DirectShow_Rendering_Filter     = 'D6E229F7-35DA-11D1-9034-00A0C90349BE';
 410.118 +    const Old_No_Enhancement                  = 'D6E229F8-35DA-11D1-9034-00A0C90349BE';
 410.119 +    const Old_Unknown_Enhancement_Type        = 'D6E229F9-35DA-11D1-9034-00A0C90349BE';
 410.120 +    const Old_Temporal_Enhancement            = 'D6E229FA-35DA-11D1-9034-00A0C90349BE';
 410.121 +    const Old_Spatial_Enhancement             = 'D6E229FB-35DA-11D1-9034-00A0C90349BE';
 410.122 +    const Old_Quality_Enhancement             = 'D6E229FC-35DA-11D1-9034-00A0C90349BE';
 410.123 +    const Old_Number_of_Channels_Enhancement  = 'D6E229FD-35DA-11D1-9034-00A0C90349BE';
 410.124 +    const Old_Frequency_Response_Enhancement  = 'D6E229FE-35DA-11D1-9034-00A0C90349BE';
 410.125 +    const Old_Media_Object                    = 'D6E229FF-35DA-11D1-9034-00A0C90349BE';
 410.126 +    const Mutex_Language                      = 'D6E22A00-35DA-11D1-9034-00A0C90349BE';
 410.127 +    const Mutex_Bitrate                       = 'D6E22A01-35DA-11D1-9034-00A0C90349BE';
 410.128 +    const Mutex_Unknown                       = 'D6E22A02-35DA-11D1-9034-00A0C90349BE';
 410.129 +    const Old_ASF_Placeholder_Object          = 'D6E22A0E-35DA-11D1-9034-00A0C90349BE';
 410.130 +    const Old_Data_Unit_Extension_Object      = 'D6E22A0F-35DA-11D1-9034-00A0C90349BE';
 410.131 +    const Web_Stream_Format                   = 'DA1E6B13-8359-4050-B398-388E965BF00C';
 410.132 +    const Payload_Ext_System_File_Name        = 'E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B';
 410.133 +    const Marker_Object                       = 'F487CD01-A951-11CF-8EE6-00C00C205365';
 410.134 +    const Timecode_Index_Parameters_Object    = 'F55E496D-9797-4B5D-8C8B-604DFE9BFB24';
 410.135 +    const Audio_Media                         = 'F8699E40-5B4D-11CF-A8FD-00805F5C442B';
 410.136 +    const Media_Object_Index_Object           = 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C';
 410.137 +    const Alt_Extended_Content_Encryption_Obj = 'FF889EF1-ADEE-40DA-9E71-98704BB928CE';
 410.138 +
 410.139 +
 410.140 +
 410.141 +    public function Analyze() {
 410.142 +
 410.143 +        $getid3 = $this->getid3;
 410.144 +        
 410.145 +        $getid3->include_module('audio-video.riff');
 410.146 +
 410.147 +        !isset($getid3->info['audio']) and $getid3->info['audio'] = array ();
 410.148 +        !isset($getid3->info['video']) and $getid3->info['video'] = array ();
 410.149 +        $getid3->info['asf']['comments'] = $getid3->info['asf']['header_object'] = array ();
 410.150 +            
 410.151 +        $info_audio             = &$getid3->info['audio'];
 410.152 +        $info_video             = &$getid3->info['video'];
 410.153 +        $info_asf               = &$getid3->info['asf'];
 410.154 +        $info_asf_comments      = &$info_asf['comments'];
 410.155 +        $info_asf_header_object = &$info_asf['header_object'];
 410.156 +
 410.157 +        // ASF structure:
 410.158 +        // * Header Object [required]
 410.159 +        //   * File Properties Object [required]   (global file attributes)
 410.160 +        //   * Stream Properties Object [required] (defines media stream & characteristics)
 410.161 +        //   * Header Extension Object [required]  (additional functionality)
 410.162 +        //   * Content Description Object          (bibliographic information)
 410.163 +        //   * Script Command Object               (commands for during playback)
 410.164 +        //   * Marker Object                       (named jumped points within the file)
 410.165 +        // * Data Object [required]
 410.166 +        //   * Data Packets
 410.167 +        // * Index Object
 410.168 +
 410.169 +        // Header Object: (mandatory, one only)
 410.170 +        // Field Name                   Field Type   Size (bits)
 410.171 +        // Object ID                    GUID         128             // GUID for header object - getid3_asf::Header_Object
 410.172 +        // Object Size                  QWORD        64              // size of header object, including 30 bytes of Header Object header
 410.173 +        // Number of Header Objects     DWORD        32              // number of objects in header object
 410.174 +        // Reserved1                    BYTE         8               // hardcoded: 0x01
 410.175 +        // Reserved2                    BYTE         8               // hardcoded: 0x02
 410.176 +
 410.177 +        $getid3->info['fileformat'] = 'asf';
 410.178 +
 410.179 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
 410.180 +        $header_object_data = fread($getid3->fp, 30);
 410.181 +
 410.182 +        $info_asf_header_object['objectid_guid'] = getid3_asf::BytestringToGUID(substr($header_object_data, 0, 16));
 410.183 +        
 410.184 +        if ($info_asf_header_object['objectid_guid'] != getid3_asf::Header_Object) {
 410.185 +            throw new getid3_exception('ASF header GUID {'.$info_asf_header_object['objectid_guid'].'} does not match expected "getid3_asf::Header_Object" GUID {'.getid3_asf::Header_Object.'}');
 410.186 +        }
 410.187 +        
 410.188 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_header_object, $header_object_data, 16,
 410.189 +            array (
 410.190 +                'objectsize'    => 8,
 410.191 +                'headerobjects' => 4,
 410.192 +                'reserved1'     => 1,
 410.193 +                'reserved2'     => 1
 410.194 +            )
 410.195 +        );
 410.196 +
 410.197 +        $asf_header_data = fread($getid3->fp, $info_asf_header_object['objectsize'] - 30);
 410.198 +        $offset = 0;
 410.199 +
 410.200 +        for ($header_objects_counter = 0; $header_objects_counter < $info_asf_header_object['headerobjects']; $header_objects_counter++) {
 410.201 +            
 410.202 +            $next_object_guid = substr($asf_header_data, $offset, 16);
 410.203 +            $offset += 16;
 410.204 +            
 410.205 +            $next_object_size = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 8));
 410.206 +            $offset += 8;
 410.207 +            
 410.208 +            $next_object_guidtext = getid3_asf::BytestringToGUID($next_object_guid);
 410.209 +            
 410.210 +            switch ($next_object_guidtext) {
 410.211 +
 410.212 +                case getid3_asf::File_Properties_Object:
 410.213 +                
 410.214 +                    // File Properties Object: (mandatory, one only)
 410.215 +                    // Field Name                   Field Type   Size (bits)
 410.216 +                    // Object ID                    GUID         128             // GUID for file properties object - getid3_asf::File_Properties_Object
 410.217 +                    // Object Size                  QWORD        64              // size of file properties object, including 104 bytes of File Properties Object header
 410.218 +                    // File ID                      GUID         128             // unique ID - identical to File ID in Data Object
 410.219 +                    // File Size                    QWORD        64              // entire file in bytes. Invalid if Broadcast Flag == 1
 410.220 +                    // Creation Date                QWORD        64              // date & time of file creation. Maybe invalid if Broadcast Flag == 1
 410.221 +                    // Data Packets Count           QWORD        64              // number of data packets in Data Object. Invalid if Broadcast Flag == 1
 410.222 +                    // Play Duration                QWORD        64              // playtime, in 100-nanosecond units. Invalid if Broadcast Flag == 1
 410.223 +                    // Send Duration                QWORD        64              // time needed to send file, in 100-nanosecond units. Players can ignore this value. Invalid if Broadcast Flag == 1
 410.224 +                    // Preroll                      QWORD        64              // time to buffer data before starting to play file, in 1-millisecond units. If <> 0, PlayDuration and PresentationTime have been offset by this amount
 410.225 +                    // Flags                        DWORD        32              //
 410.226 +                    // * Broadcast Flag             bits         1  (0x01)       // file is currently being written, some header values are invalid
 410.227 +                    // * Seekable Flag              bits         1  (0x02)       // is file seekable
 410.228 +                    // * Reserved                   bits         30 (0xFFFFFFFC) // reserved - set to zero
 410.229 +                    // Minimum Data Packet Size     DWORD        32              // in bytes. should be same as Maximum Data Packet Size. Invalid if Broadcast Flag == 1
 410.230 +                    // Maximum Data Packet Size     DWORD        32              // in bytes. should be same as Minimum Data Packet Size. Invalid if Broadcast Flag == 1
 410.231 +                    // Maximum Bitrate              DWORD        32              // maximum instantaneous bitrate in bits per second for entire file, including all data streams and ASF overhead
 410.232 +
 410.233 +                    $info_asf['file_properties_object'] = array ();
 410.234 +                    $info_asf_file_properties_object = &$info_asf['file_properties_object'];
 410.235 +
 410.236 +                    $info_asf_file_properties_object['objectid_guid']      = $next_object_guidtext;
 410.237 +                    $info_asf_file_properties_object['objectsize']         = $next_object_size;
 410.238 +                    
 410.239 +                    $info_asf_file_properties_object['fileid_guid']        = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.240 +                    $offset += 16;
 410.241 +
 410.242 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_file_properties_object, $asf_header_data, $offset,
 410.243 +                        array (
 410.244 +                            'filesize'        => 8,
 410.245 +                            'creation_date'   => 8,
 410.246 +                            'data_packets'    => 8,
 410.247 +                            'play_duration'   => 8,
 410.248 +                            'send_duration'   => 8,
 410.249 +                            'preroll'         => 8,
 410.250 +                            'flags_raw'       => 4,
 410.251 +                            'min_packet_size' => 4,
 410.252 +                            'max_packet_size' => 4,
 410.253 +                            'max_bitrate'     => 4
 410.254 +                        )
 410.255 +                    );
 410.256 +                    
 410.257 +                    $offset += 64   ;
 410.258 +                    
 410.259 +                    $info_asf_file_properties_object['creation_date_unix'] = getid3_asf::FiletimeToUNIXtime($info_asf_file_properties_object['creation_date']);
 410.260 +                    $info_asf_file_properties_object['flags']['broadcast'] = (bool)($info_asf_file_properties_object['flags_raw'] & 0x0001);
 410.261 +                    $info_asf_file_properties_object['flags']['seekable']  = (bool)($info_asf_file_properties_object['flags_raw'] & 0x0002);
 410.262 +
 410.263 +                    $getid3->info['playtime_seconds'] = ($info_asf_file_properties_object['play_duration'] / 10000000) - ($info_asf_file_properties_object['preroll'] / 1000);
 410.264 +                    $getid3->info['bitrate']          = ($info_asf_file_properties_object['filesize'] * 8) / $getid3->info['playtime_seconds'];
 410.265 +                    break;
 410.266 +
 410.267 +
 410.268 +                case getid3_asf::Stream_Properties_Object:
 410.269 +                    
 410.270 +                    // Stream Properties Object: (mandatory, one per media stream)
 410.271 +                    // Field Name                   Field Type   Size (bits)
 410.272 +                    // Object ID                    GUID         128             // GUID for stream properties object - getid3_asf::Stream_Properties_Object
 410.273 +                    // Object Size                  QWORD        64              // size of stream properties object, including 78 bytes of Stream Properties Object header
 410.274 +                    // Stream Type                  GUID         128             // getid3_asf::Audio_Media, getid3_asf::Video_Media or getid3_asf::Command_Media
 410.275 +                    // Error Correction Type        GUID         128             // getid3_asf::Audio_Spread for audio-only streams, getid3_asf::No_Error_Correction for other stream types
 410.276 +                    // Time Offset                  QWORD        64              // 100-nanosecond units. typically zero. added to all timestamps of samples in the stream
 410.277 +                    // Type-Specific Data Length    DWORD        32              // number of bytes for Type-Specific Data field
 410.278 +                    // Error Correction Data Length DWORD        32              // number of bytes for Error Correction Data field
 410.279 +                    // Flags                        WORD         16              //
 410.280 +                    // * Stream Number              bits         7 (0x007F)      // number of this stream.  1 <= valid <= 127
 410.281 +                    // * Reserved                   bits         8 (0x7F80)      // reserved - set to zero
 410.282 +                    // * Encrypted Content Flag     bits         1 (0x8000)      // stream contents encrypted if set
 410.283 +                    // Reserved                     DWORD        32              // reserved - set to zero
 410.284 +                    // Type-Specific Data           BYTESTREAM   variable        // type-specific format data, depending on value of Stream Type
 410.285 +                    // Error Correction Data        BYTESTREAM   variable        // error-correction-specific format data, depending on value of Error Correct Type
 410.286 +
 410.287 +                    // There is one getid3_asf::Stream_Properties_Object for each stream (audio, video) but the
 410.288 +                    // stream number isn't known until halfway through decoding the structure, hence it
 410.289 +                    // it is decoded to a temporary variable and then stuck in the appropriate index later
 410.290 +
 410.291 +                    $stream_properties_object_data['objectid_guid']      = $next_object_guidtext;
 410.292 +                    $stream_properties_object_data['objectsize']         = $next_object_size;
 410.293 +                    
 410.294 +                    getid3_lib::ReadSequence('LittleEndian2Int', $stream_properties_object_data, $asf_header_data, $offset,
 410.295 +                        array (
 410.296 +                            'stream_type'        => -16,
 410.297 +                            'error_correct_type' => -16,
 410.298 +                            'time_offset'        => 8,
 410.299 +                            'type_data_length'   => 4,
 410.300 +                            'error_data_length'  => 4,
 410.301 +                            'flags_raw'          => 2
 410.302 +                        )
 410.303 +                    );
 410.304 +
 410.305 +                    $stream_properties_stream_number                     =        $stream_properties_object_data['flags_raw'] & 0x007F;
 410.306 +                    $stream_properties_object_data['flags']['encrypted'] = (bool)($stream_properties_object_data['flags_raw'] & 0x8000);
 410.307 +
 410.308 +                    $stream_properties_object_data['stream_type_guid']   = getid3_asf::BytestringToGUID($stream_properties_object_data['stream_type']);
 410.309 +                    $stream_properties_object_data['error_correct_guid'] = getid3_asf::BytestringToGUID($stream_properties_object_data['error_correct_type']);
 410.310 +
 410.311 +                    $offset += 54; // 50 bytes + 4 bytes reserved - DWORD
 410.312 +                    
 410.313 +                    $stream_properties_object_data['type_specific_data'] = substr($asf_header_data, $offset, $stream_properties_object_data['type_data_length']);
 410.314 +                    $offset += $stream_properties_object_data['type_data_length'];
 410.315 +                    
 410.316 +                    $stream_properties_object_data['error_correct_data'] = substr($asf_header_data, $offset, $stream_properties_object_data['error_data_length']);
 410.317 +                    $offset += $stream_properties_object_data['error_data_length'];
 410.318 +
 410.319 +                    switch ($stream_properties_object_data['stream_type_guid']) {
 410.320 +
 410.321 +                        case getid3_asf::Audio_Media:
 410.322 +                    
 410.323 +                            $info_audio['dataformat']   = (@$info_audio['dataformat']   ? $info_audio['dataformat']   : 'asf');
 410.324 +                            $info_audio['bitrate_mode'] = (@$info_audio['bitrate_mode'] ? $info_audio['bitrate_mode'] : 'cbr');
 410.325 +
 410.326 +                            $audiodata = getid3_riff::RIFFparseWAVEFORMATex(substr($stream_properties_object_data['type_specific_data'], 0, 16));
 410.327 +                            unset($audiodata['raw']);
 410.328 +                            $info_audio = getid3_riff::array_merge_noclobber($audiodata, $info_audio);
 410.329 +                            break;
 410.330 +
 410.331 +
 410.332 +                        case getid3_asf::Video_Media:
 410.333 +
 410.334 +                            $info_video['dataformat']   = (@$info_video['dataformat']   ? $info_video['dataformat']   : 'asf');
 410.335 +                            $info_video['bitrate_mode'] = (@$info_video['bitrate_mode'] ? $info_video['bitrate_mode'] : 'cbr');
 410.336 +                            break;
 410.337 +
 410.338 +
 410.339 +                        /* does nothing but eat memory
 410.340 +                        case getid3_asf::Command_Media:
 410.341 +                        default:
 410.342 +                            // do nothing
 410.343 +                            break;
 410.344 +                        */
 410.345 +                    }
 410.346 +
 410.347 +                    $info_asf['stream_properties_object'][$stream_properties_stream_number] = $stream_properties_object_data;
 410.348 +                    unset($stream_properties_object_data); // clear for next stream, if any
 410.349 +                    break;
 410.350 +                    
 410.351 +
 410.352 +                case getid3_asf::Header_Extension_Object:
 410.353 +                    
 410.354 +                    // Header Extension Object: (mandatory, one only)
 410.355 +                    // Field Name                   Field Type   Size (bits)
 410.356 +                    // Object ID                    GUID         128             // GUID for Header Extension object - getid3_asf::Header_Extension_Object
 410.357 +                    // Object Size                  QWORD        64              // size of Header Extension object, including 46 bytes of Header Extension Object header
 410.358 +                    // Reserved Field 1             GUID         128             // hardcoded: getid3_asf::Reserved_1
 410.359 +                    // Reserved Field 2             WORD         16              // hardcoded: 0x00000006
 410.360 +                    // Header Extension Data Size   DWORD        32              // in bytes. valid: 0, or > 24. equals object size minus 46
 410.361 +                    // Header Extension Data        BYTESTREAM   variable        // array of zero or more extended header objects
 410.362 +
 410.363 +                    $info_asf['header_extension_object'] = array ();
 410.364 +                    $info_asf_header_extension_object    = &$info_asf['header_extension_object'];
 410.365 +
 410.366 +                    $info_asf_header_extension_object['objectid_guid']   = $next_object_guidtext;
 410.367 +                    $info_asf_header_extension_object['objectsize']      = $next_object_size;
 410.368 +                    $info_asf_header_extension_object['reserved_1_guid'] = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.369 +                    $offset += 16;
 410.370 +                    
 410.371 +                    if ($info_asf_header_extension_object['reserved_1_guid'] != getid3_asf::Reserved_1) {
 410.372 +                        $getid3->warning('header_extension_object.reserved_1 GUID ('.$info_asf_header_extension_object['reserved_1_guid'].') does not match expected "getid3_asf::Reserved_1" GUID ('.getid3_asf::Reserved_1.')');
 410.373 +                        break;
 410.374 +                    }
 410.375 +                    
 410.376 +                    $info_asf_header_extension_object['reserved_2'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.377 +                    $offset += 2;
 410.378 +                    
 410.379 +                    if ($info_asf_header_extension_object['reserved_2'] != 6) {
 410.380 +                        $getid3->warning('header_extension_object.reserved_2 ('.getid3_lib::PrintHexBytes($info_asf_header_extension_object['reserved_2']).') does not match expected value of "6"');
 410.381 +                        break;
 410.382 +                    }
 410.383 +                    
 410.384 +                    $info_asf_header_extension_object['extension_data_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
 410.385 +                    $offset += 4;
 410.386 +                    
 410.387 +                    $info_asf_header_extension_object['extension_data'] = substr($asf_header_data, $offset, $info_asf_header_extension_object['extension_data_size']);
 410.388 +                    $offset += $info_asf_header_extension_object['extension_data_size'];
 410.389 +                    break;
 410.390 +                    
 410.391 +
 410.392 +                case getid3_asf::Codec_List_Object:
 410.393 +                    
 410.394 +                    // Codec List Object: (optional, one only)
 410.395 +                    // Field Name                   Field Type   Size (bits)
 410.396 +                    // Object ID                    GUID         128             // GUID for Codec List object - getid3_asf::Codec_List_Object
 410.397 +                    // Object Size                  QWORD        64              // size of Codec List object, including 44 bytes of Codec List Object header
 410.398 +                    // Reserved                     GUID         128             // hardcoded: 86D15241-311D-11D0-A3A4-00A0C90348F6
 410.399 +                    // Codec Entries Count          DWORD        32              // number of entries in Codec Entries array
 410.400 +                    // Codec Entries                array of:    variable        //
 410.401 +                    // * Type                       WORD         16              // 0x0001 = Video Codec, 0x0002 = Audio Codec, 0xFFFF = Unknown Codec
 410.402 +                    // * Codec Name Length          WORD         16              // number of Unicode characters stored in the Codec Name field
 410.403 +                    // * Codec Name                 WCHAR        variable        // array of Unicode characters - name of codec used to create the content
 410.404 +                    // * Codec Description Length   WORD         16              // number of Unicode characters stored in the Codec Description field
 410.405 +                    // * Codec Description          WCHAR        variable        // array of Unicode characters - description of format used to create the content
 410.406 +                    // * Codec Information Length   WORD         16              // number of Unicode characters stored in the Codec Information field
 410.407 +                    // * Codec Information          BYTESTREAM   variable        // opaque array of information bytes about the codec used to create the content
 410.408 +
 410.409 +                    $info_asf['codec_list_object'] = array ();
 410.410 +                    $info_asf_codec_list_object      = &$info_asf['codec_list_object'];
 410.411 +
 410.412 +                    $info_asf_codec_list_object['objectid_guid'] = $next_object_guidtext;
 410.413 +                    $info_asf_codec_list_object['objectsize']    = $next_object_size;
 410.414 +                    
 410.415 +                    $info_asf_codec_list_object['reserved_guid'] = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.416 +                    $offset += 16;
 410.417 +                    
 410.418 +                    if ($info_asf_codec_list_object['reserved_guid'] != '86D15241-311D-11D0-A3A4-00A0C90348F6') {
 410.419 +                        $getid3->warning('codec_list_object.reserved GUID {'.$info_asf_codec_list_object['reserved_guid'].'} does not match expected "getid3_asf::Reserved_1" GUID {86D15241-311D-11D0-A3A4-00A0C90348F6}');
 410.420 +                        break;
 410.421 +                    }
 410.422 +                    
 410.423 +                    $info_asf_codec_list_object['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
 410.424 +                    $offset += 4;
 410.425 +                    
 410.426 +                    for ($codec_entry_counter = 0; $codec_entry_counter < $info_asf_codec_list_object['codec_entries_count']; $codec_entry_counter++) {
 410.427 +                        
 410.428 +                        $info_asf_codec_list_object['codec_entries'][$codec_entry_counter] = array ();
 410.429 +                        $info_asf_codec_list_object_codecentries_current = &$info_asf_codec_list_object['codec_entries'][$codec_entry_counter];
 410.430 +
 410.431 +                        $info_asf_codec_list_object_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.432 +                        $offset += 2;
 410.433 +                        
 410.434 +                        $info_asf_codec_list_object_codecentries_current['type'] = getid3_asf::ASFCodecListObjectTypeLookup($info_asf_codec_list_object_codecentries_current['type_raw']);
 410.435 +
 410.436 +                        $codec_name_length = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2)) * 2; // 2 bytes per character
 410.437 +                        $offset += 2;
 410.438 +                        
 410.439 +                        $info_asf_codec_list_object_codecentries_current['name'] = substr($asf_header_data, $offset, $codec_name_length);
 410.440 +                        $offset += $codec_name_length;
 410.441 +
 410.442 +                        $codec_description_length = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2)) * 2; // 2 bytes per character
 410.443 +                        $offset += 2;
 410.444 +                        
 410.445 +                        $info_asf_codec_list_object_codecentries_current['description'] = substr($asf_header_data, $offset, $codec_description_length);
 410.446 +                        $offset += $codec_description_length;
 410.447 +
 410.448 +                        $codec_information_length = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.449 +                        $offset += 2;
 410.450 +                        
 410.451 +                        $info_asf_codec_list_object_codecentries_current['information'] = substr($asf_header_data, $offset, $codec_information_length);
 410.452 +                        $offset += $codec_information_length;
 410.453 +
 410.454 +                        if ($info_asf_codec_list_object_codecentries_current['type_raw'] == 2) {
 410.455 +                            
 410.456 +                            // audio codec
 410.457 +                            if (strpos($info_asf_codec_list_object_codecentries_current['description'], ',') === false) {
 410.458 +                                throw new getid3_exception('[asf][codec_list_object][codec_entries]['.$codec_entry_counter.'][description] expected to contain comma-seperated list of parameters: "'.$info_asf_codec_list_object_codecentries_current['description'].'"');
 410.459 +                            }
 410.460 +                            list($audio_codec_bitrate, $audio_codec_frequency, $audio_codec_channels) = explode(',', $this->TrimConvert($info_asf_codec_list_object_codecentries_current['description']));
 410.461 +                            $info_audio['codec'] = $this->TrimConvert($info_asf_codec_list_object_codecentries_current['name']);
 410.462 +
 410.463 +                            if (!isset($info_audio['bitrate']) && strstr($audio_codec_bitrate, 'kbps')) {
 410.464 +                                $info_audio['bitrate'] = (int)(trim(str_replace('kbps', '', $audio_codec_bitrate)) * 1000);
 410.465 +                            }
 410.466 +
 410.467 +                            if (!isset($info_video['bitrate']) && isset($info_audio['bitrate']) && isset($info_asf['file_properties_object']['max_bitrate']) && ($info_asf_codec_list_object['codec_entries_count'] > 1)) {
 410.468 +                                $info_video['bitrate'] = $info_asf['file_properties_object']['max_bitrate'] - $info_audio['bitrate'];
 410.469 +                            }
 410.470 +                            
 410.471 +                            if (!@$info_video['bitrate'] && @$info_audio['bitrate'] && @$getid3->info['bitrate']) {
 410.472 +								$info_video['bitrate'] = $getid3->info['bitrate'] - $info_audio['bitrate'];
 410.473 +							}
 410.474 +
 410.475 +                            $audio_codec_frequency = (int)trim(str_replace('kHz', '', $audio_codec_frequency));
 410.476 +
 410.477 +                            static $sample_rate_lookup = array (
 410.478 +                                8  =>  8000,    8000 =>  8000,
 410.479 +                                11 => 11025,   11025 => 11025,
 410.480 +                                12 => 12000,   12000 => 12000,
 410.481 +                                16 => 16000,   16000 => 16000,
 410.482 +                                22 => 22050,   22050 => 22050,
 410.483 +                                24 => 24000,   24000 => 24000,
 410.484 +                                32 => 32000,   32000 => 32000,
 410.485 +                                44 => 44100,   44100 => 44100,
 410.486 +                                48 => 48000,   48000 => 48000,
 410.487 +                            );
 410.488 +
 410.489 +                            $info_audio['sample_rate'] = @$sample_rate_lookup[$audio_codec_frequency];
 410.490 +
 410.491 +                            if (!$info_audio['sample_rate']) {
 410.492 +                                $getid3->warning('unknown frequency: "'.$audio_codec_frequency.'" ('.$this->TrimConvert($info_asf_codec_list_object_codecentries_current['description']).')');
 410.493 +                                break;
 410.494 +                            }
 410.495 +
 410.496 +                            if (!isset($info_audio['channels'])) {
 410.497 +                                if (strstr($audio_codec_channels, 'stereo')) {
 410.498 +                                    $info_audio['channels'] = 2;
 410.499 +                                } elseif (strstr($audio_codec_channels, 'mono')) {
 410.500 +                                    $info_audio['channels'] = 1;
 410.501 +                                }
 410.502 +                            }
 410.503 +                        }
 410.504 +                    }
 410.505 +                    break;
 410.506 +
 410.507 +
 410.508 +                case getid3_asf::Script_Command_Object:
 410.509 +
 410.510 +                    // Script Command Object: (optional, one only)
 410.511 +                    // Field Name                   Field Type   Size (bits)
 410.512 +                    // Object ID                    GUID         128             // GUID for Script Command object - getid3_asf::Script_Command_Object
 410.513 +                    // Object Size                  QWORD        64              // size of Script Command object, including 44 bytes of Script Command Object header
 410.514 +                    // Reserved                     GUID         128             // hardcoded: 4B1ACBE3-100B-11D0-A39B-00A0C90348F6
 410.515 +                    // Commands Count               WORD         16              // number of Commands structures in the Script Commands Objects
 410.516 +                    // Command Types Count          WORD         16              // number of Command Types structures in the Script Commands Objects
 410.517 +                    // Command Types                array of:    variable        //
 410.518 +                    // * Command Type Name Length   WORD         16              // number of Unicode characters for Command Type Name
 410.519 +                    // * Command Type Name          WCHAR        variable        // array of Unicode characters - name of a type of command
 410.520 +                    // Commands                     array of:    variable        //
 410.521 +                    // * Presentation Time          DWORD        32              // presentation time of that command, in milliseconds
 410.522 +                    // * Type Index                 WORD         16              // type of this command, as a zero-based index into the array of Command Types of this object
 410.523 +                    // * Command Name Length        WORD         16              // number of Unicode characters for Command Name
 410.524 +                    // * Command Name               WCHAR        variable        // array of Unicode characters - name of this command
 410.525 +
 410.526 +                    // shortcut
 410.527 +                    $info_asf['script_command_object'] = array ();
 410.528 +                    $info_asf_script_command_object    = &$info_asf['script_command_object'];
 410.529 +
 410.530 +                    $info_asf_script_command_object['objectid_guid'] = $next_object_guidtext;
 410.531 +                    $info_asf_script_command_object['objectsize']    = $next_object_size;
 410.532 +                    $info_asf_script_command_object['reserved_guid'] = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.533 +                    $offset += 16;
 410.534 +                    
 410.535 +                    if ($info_asf_script_command_object['reserved_guid'] != '4B1ACBE3-100B-11D0-A39B-00A0C90348F6') {
 410.536 +                        $getid3->warning('script_command_object.reserved GUID {'.$info_asf_script_command_object['reserved_guid'].'} does not match expected GUID {4B1ACBE3-100B-11D0-A39B-00A0C90348F6}');
 410.537 +                        break;
 410.538 +                    }
 410.539 +                    
 410.540 +                    $info_asf_script_command_object['commands_count']       = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.541 +                    $offset += 2;
 410.542 +                    
 410.543 +                    $info_asf_script_command_object['command_types_count']  = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.544 +                    $offset += 2;
 410.545 +                    
 410.546 +                    for ($command_types_counter = 0; $command_types_counter < $info_asf_script_command_object['command_types_count']; $command_types_counter++) {
 410.547 +                        
 410.548 +                        $command_type_name_length = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2)) * 2; // 2 bytes per character
 410.549 +                        $offset += 2;
 410.550 +                        
 410.551 +                        $info_asf_script_command_object['command_types'][$command_types_counter]['name'] = substr($asf_header_data, $offset, $command_type_name_length);
 410.552 +                        $offset += $command_type_name_length;
 410.553 +                    }
 410.554 +                    
 410.555 +                    for ($commands_counter = 0; $commands_counter < $info_asf_script_command_object['commands_count']; $commands_counter++) {
 410.556 +                        
 410.557 +                        $info_asf_script_command_object['commands'][$commands_counter]['presentation_time'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
 410.558 +                        $offset += 4;
 410.559 +                        
 410.560 +                        $info_asf_script_command_object['commands'][$commands_counter]['type_index']        = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.561 +                        $offset += 2;
 410.562 +
 410.563 +                        $command_type_name_length                                                           = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2)) * 2; // 2 bytes per character
 410.564 +                        $offset += 2;
 410.565 +                        
 410.566 +                        $info_asf_script_command_object['commands'][$commands_counter]['name']              = substr($asf_header_data, $offset, $command_type_name_length);
 410.567 +                        $offset += $command_type_name_length;
 410.568 +                    }
 410.569 +                    break;
 410.570 +
 410.571 +
 410.572 +                case getid3_asf::Marker_Object:
 410.573 +
 410.574 +                    // Marker Object: (optional, one only)
 410.575 +                    // Field Name                   Field Type   Size (bits)
 410.576 +                    // Object ID                    GUID         128             // GUID for Marker object - getid3_asf::Marker_Object
 410.577 +                    // Object Size                  QWORD        64              // size of Marker object, including 48 bytes of Marker Object header
 410.578 +                    // Reserved                     GUID         128             // hardcoded: 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB
 410.579 +                    // Markers Count                DWORD        32              // number of Marker structures in Marker Object
 410.580 +                    // Reserved                     WORD         16              // hardcoded: 0x0000
 410.581 +                    // Name Length                  WORD         16              // number of bytes in the Name field
 410.582 +                    // Name                         WCHAR        variable        // name of the Marker Object
 410.583 +                    // Markers                      array of:    variable        //
 410.584 +                    // * Offset                     QWORD        64              // byte offset into Data Object
 410.585 +                    // * Presentation Time          QWORD        64              // in 100-nanosecond units
 410.586 +                    // * Entry Length               WORD         16              // length in bytes of (Send Time + Flags + Marker Description Length + Marker Description + Padding)
 410.587 +                    // * Send Time                  DWORD        32              // in milliseconds
 410.588 +                    // * Flags                      DWORD        32              // hardcoded: 0x00000000
 410.589 +                    // * Marker Description Length  DWORD        32              // number of bytes in Marker Description field
 410.590 +                    // * Marker Description         WCHAR        variable        // array of Unicode characters - description of marker entry
 410.591 +                    // * Padding                    BYTESTREAM   variable        // optional padding bytes
 410.592 +
 410.593 +                    $info_asf['marker_object'] = array ();
 410.594 +                    $info_asf_marker_object    = &$info_asf['marker_object'];
 410.595 +
 410.596 +                    $info_asf_marker_object['objectid_guid'] = $next_object_guidtext;
 410.597 +                    $info_asf_marker_object['objectsize']    = $next_object_size;
 410.598 +                    $info_asf_marker_object['reserved_guid'] = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.599 +                    $offset += 16;                           
 410.600 +                    
 410.601 +                    if ($info_asf_marker_object['reserved_guid'] != '4CFEDB20-75F6-11CF-9C0F-00A0C90349CB') {
 410.602 +                        $getid3->warning('marker_object.reserved GUID {'.$info_asf_marker_object['reserved_guid'].'} does not match expected GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}');
 410.603 +                        break;
 410.604 +                    }
 410.605 +                    
 410.606 +                    $info_asf_marker_object['markers_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
 410.607 +                    $offset += 4;
 410.608 +                    
 410.609 +                    $info_asf_marker_object['reserved_2']    = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.610 +                    $offset += 2;
 410.611 +                    
 410.612 +                    if ($info_asf_marker_object['reserved_2'] != 0) {
 410.613 +                        $getid3->warning('marker_object.reserved_2 ('.getid3_lib::PrintHexBytes($info_asf_marker_object['reserved_2']).') does not match expected value of "0"');
 410.614 +                        break;
 410.615 +                    }
 410.616 +                    
 410.617 +                    $info_asf_marker_object['name_length']   = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.618 +                    $offset += 2;
 410.619 +                    
 410.620 +                    $info_asf_marker_object['name'] = substr($asf_header_data, $offset, $info_asf_marker_object['name_length']);
 410.621 +                    $offset += $info_asf_marker_object['name_length'];
 410.622 +                    
 410.623 +                    for ($markers_counter = 0; $markers_counter < $info_asf_marker_object['markers_count']; $markers_counter++) {
 410.624 +                        
 410.625 +                        getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_marker_object['markers'][$markers_counter], $asf_header_data, $offset,
 410.626 +                            array (
 410.627 +                                'offset'                    => 8,
 410.628 +                                'presentation_time'         => 8,
 410.629 +                                'entry_length'              => 2,
 410.630 +                                'send_time'                 => 4,
 410.631 +                                'flags'                     => 4,
 410.632 +                                'marker_description_length' => 4
 410.633 +                            )
 410.634 +                        );
 410.635 +                        $offset += 30;
 410.636 +                        
 410.637 +                        $info_asf_marker_object['markers'][$markers_counter]['marker_description'] = substr($asf_header_data, $offset, $info_asf_marker_object['markers'][$markers_counter]['marker_description_length']);
 410.638 +                        $offset += $info_asf_marker_object['markers'][$markers_counter]['marker_description_length'];
 410.639 +                        
 410.640 +                        $padding_length = $info_asf_marker_object['markers'][$markers_counter]['entry_length'] - 4 -  4 - 4 - $info_asf_marker_object['markers'][$markers_counter]['marker_description_length'];
 410.641 +                        if ($padding_length > 0) {
 410.642 +                            $info_asf_marker_object['markers'][$markers_counter]['padding'] = substr($asf_header_data, $offset, $padding_length);
 410.643 +                            $offset += $padding_length;
 410.644 +                        }
 410.645 +                    }
 410.646 +                    break;
 410.647 +                    
 410.648 +
 410.649 +                case getid3_asf::Bitrate_Mutual_Exclusion_Object:
 410.650 +                    
 410.651 +                    // Bitrate Mutual Exclusion Object: (optional)
 410.652 +                    // Field Name                   Field Type   Size (bits)
 410.653 +                    // Object ID                    GUID         128             // GUID for Bitrate Mutual Exclusion object - getid3_asf::Bitrate_Mutual_Exclusion_Object
 410.654 +                    // Object Size                  QWORD        64              // size of Bitrate Mutual Exclusion object, including 42 bytes of Bitrate Mutual Exclusion Object header
 410.655 +                    // Exlusion Type                GUID         128             // nature of mutual exclusion relationship. one of: (getid3_asf::Mutex_Bitrate, getid3_asf::Mutex_Unknown)
 410.656 +                    // Stream Numbers Count         WORD         16              // number of video streams
 410.657 +                    // Stream Numbers               WORD         variable        // array of mutually exclusive video stream numbers. 1 <= valid <= 127
 410.658 +
 410.659 +                    // shortcut
 410.660 +                    $info_asf['bitrate_mutual_exclusion_object'] = array ();
 410.661 +                    $info_asf_bitrate_mutual_exclusion_object    = &$info_asf['bitrate_mutual_exclusion_object'];
 410.662 +
 410.663 +                    $info_asf_bitrate_mutual_exclusion_object['objectid_guid'] = $next_object_guidtext;
 410.664 +                    $info_asf_bitrate_mutual_exclusion_object['objectsize']    = $next_object_size;
 410.665 +                    $info_asf_bitrate_mutual_exclusion_object['reserved_guid'] = getid3_asf::BytestringToGUID(substr($asf_header_data, $offset, 16));
 410.666 +                    $offset += 16;
 410.667 +                    
 410.668 +                    if ($info_asf_bitrate_mutual_exclusion_object['reserved_guid'] != getid3_asf::Mutex_Bitrate  &&  $info_asf_bitrate_mutual_exclusion_object['reserved_guid'] != getid3_asf::Mutex_Unknown) {
 410.669 +                        $getid3->warning('bitrate_mutual_exclusion_object.reserved GUID {'.$info_asf_bitrate_mutual_exclusion_object['reserved_guid'].'} does not match expected "getid3_asf::Mutex_Bitrate" GUID {'.getid3_asf::Mutex_Bitrate.'} or  "getid3_asf::Mutex_Unknown" GUID {'.getid3_asf::Mutex_Unknown.'}');
 410.670 +                        break;
 410.671 +                    }
 410.672 +                    
 410.673 +                    $info_asf_bitrate_mutual_exclusion_object['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.674 +                    $offset += 2;
 410.675 +                    
 410.676 +                    for ($stream_number_counter = 0; $stream_number_counter < $info_asf_bitrate_mutual_exclusion_object['stream_numbers_count']; $stream_number_counter++) {
 410.677 +                        $info_asf_bitrate_mutual_exclusion_object['stream_numbers'][$stream_number_counter] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.678 +                        $offset += 2;
 410.679 +                    }
 410.680 +                    break;
 410.681 +
 410.682 +
 410.683 +                case getid3_asf::Error_Correction_Object:
 410.684 +
 410.685 +                    // Error Correction Object: (optional, one only)
 410.686 +                    // Field Name                   Field Type   Size (bits)
 410.687 +                    // Object ID                    GUID         128             // GUID for Error Correction object - getid3_asf::Error_Correction_Object
 410.688 +                    // Object Size                  QWORD        64              // size of Error Correction object, including 44 bytes of Error Correction Object header
 410.689 +                    // Error Correction Type        GUID         128             // type of error correction. one of: (getid3_asf::No_Error_Correction, getid3_asf::Audio_Spread)
 410.690 +                    // Error Correction Data Length DWORD        32              // number of bytes in Error Correction Data field
 410.691 +                    // Error Correction Data        BYTESTREAM   variable        // structure depends on value of Error Correction Type field
 410.692 +
 410.693 +                    $info_asf['error_correction_object'] = array ();
 410.694 +                    $info_asf_error_correction_object      = &$info_asf['error_correction_object'];
 410.695 +
 410.696 +                    $info_asf_error_correction_object['objectid_guid']         = $next_object_guidtext;
 410.697 +                    $info_asf_error_correction_object['objectsize']            = $next_object_size;
 410.698 +                    $info_asf_error_correction_object['error_correction_type'] = substr($asf_header_data, $offset, 16);
 410.699 +                    $offset += 16;
 410.700 +                    
 410.701 +                    $info_asf_error_correction_object['error_correction_guid']        = getid3_asf::BytestringToGUID($info_asf_error_correction_object['error_correction_type']);
 410.702 +                    $info_asf_error_correction_object['error_correction_data_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
 410.703 +                    $offset += 4;
 410.704 +                    
 410.705 +                    switch ($info_asf_error_correction_object['error_correction_type_guid']) {
 410.706 +                    
 410.707 +                        case getid3_asf::No_Error_Correction:
 410.708 +                    
 410.709 +                            // should be no data, but just in case there is, skip to the end of the field
 410.710 +                            $offset += $info_asf_error_correction_object['error_correction_data_length'];
 410.711 +                            break;
 410.712 +
 410.713 +
 410.714 +                        case getid3_asf::Audio_Spread:
 410.715 +
 410.716 +                            // Field Name                   Field Type   Size (bits)
 410.717 +                            // Span                         BYTE         8               // number of packets over which audio will be spread.
 410.718 +                            // Virtual Packet Length        WORD         16              // size of largest audio payload found in audio stream
 410.719 +                            // Virtual Chunk Length         WORD         16              // size of largest audio payload found in audio stream
 410.720 +                            // Silence Data Length          WORD         16              // number of bytes in Silence Data field
 410.721 +                            // Silence Data                 BYTESTREAM   variable        // hardcoded: 0x00 * (Silence Data Length) bytes
 410.722 +
 410.723 +                            getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_error_correction_object, $asf_header_data, $offset, 
 410.724 +                                array (
 410.725 +                                    'span'                  => 1,
 410.726 +                                    'virtual_packet_length' => 2,
 410.727 +                                    'virtual_chunk_length'  => 2,
 410.728 +                                    'silence_data_length'   => 2
 410.729 +                                )
 410.730 +                            );
 410.731 +                            $offset += 7;
 410.732 +                            
 410.733 +                            $info_asf_error_correction_object['silence_data'] = substr($asf_header_data, $offset, $info_asf_error_correction_object['silence_data_length']);
 410.734 +                            $offset += $info_asf_error_correction_object['silence_data_length'];
 410.735 +                            break;
 410.736 +
 410.737 +                        default:
 410.738 +                            $getid3->warning('error_correction_object.error_correction_type GUID {'.$info_asf_error_correction_object['reserved_guid'].'} does not match expected "getid3_asf::No_Error_Correction" GUID {'.getid3_asf::No_Error_Correction.'} or  "getid3_asf::Audio_Spread" GUID {'.getid3_asf::Audio_Spread.'}');
 410.739 +                            break;
 410.740 +                    }
 410.741 +
 410.742 +                    break;
 410.743 +
 410.744 +
 410.745 +                case getid3_asf::Content_Description_Object:
 410.746 +
 410.747 +                    // Content Description Object: (optional, one only)
 410.748 +                    // Field Name                   Field Type   Size (bits)
 410.749 +                    // Object ID                    GUID         128             // GUID for Content Description object - getid3_asf::Content_Description_Object
 410.750 +                    // Object Size                  QWORD        64              // size of Content Description object, including 34 bytes of Content Description Object header
 410.751 +                    // Title Length                 WORD         16              // number of bytes in Title field
 410.752 +                    // Author Length                WORD         16              // number of bytes in Author field
 410.753 +                    // Copyright Length             WORD         16              // number of bytes in Copyright field
 410.754 +                    // Description Length           WORD         16              // number of bytes in Description field
 410.755 +                    // Rating Length                WORD         16              // number of bytes in Rating field
 410.756 +                    // Title                        WCHAR        16              // array of Unicode characters - Title
 410.757 +                    // Author                       WCHAR        16              // array of Unicode characters - Author
 410.758 +                    // Copyright                    WCHAR        16              // array of Unicode characters - Copyright
 410.759 +                    // Description                  WCHAR        16              // array of Unicode characters - Description
 410.760 +                    // Rating                       WCHAR        16              // array of Unicode characters - Rating
 410.761 +
 410.762 +                    $info_asf['content_description_object'] = array ();
 410.763 +                    $info_asf_content_description_object      = &$info_asf['content_description_object'];
 410.764 +
 410.765 +                    $info_asf_content_description_object['objectid_guid'] = $next_object_guidtext;
 410.766 +                    $info_asf_content_description_object['objectsize']    = $next_object_size;
 410.767 +                    
 410.768 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_content_description_object, $asf_header_data, $offset, 
 410.769 +                        array (
 410.770 +                            'title_length'       => 2,
 410.771 +                            'author_length'      => 2,
 410.772 +                            'copyright_length'   => 2,
 410.773 +                            'description_length' => 2,
 410.774 +                            'rating_length'      => 2
 410.775 +                        )
 410.776 +                    );
 410.777 +                    $offset += 10;
 410.778 +                    
 410.779 +                    $info_asf_content_description_object['title']       = substr($asf_header_data, $offset, $info_asf_content_description_object['title_length']);
 410.780 +                    $offset += $info_asf_content_description_object['title_length'];
 410.781 +                    
 410.782 +                    $info_asf_content_description_object['author']      = substr($asf_header_data, $offset, $info_asf_content_description_object['author_length']);
 410.783 +                    $offset += $info_asf_content_description_object['author_length'];
 410.784 +                    
 410.785 +                    $info_asf_content_description_object['copyright']   = substr($asf_header_data, $offset, $info_asf_content_description_object['copyright_length']);
 410.786 +                    $offset += $info_asf_content_description_object['copyright_length'];
 410.787 +                    
 410.788 +                    $info_asf_content_description_object['description'] = substr($asf_header_data, $offset, $info_asf_content_description_object['description_length']);
 410.789 +                    $offset += $info_asf_content_description_object['description_length'];
 410.790 +                    
 410.791 +                    $info_asf_content_description_object['rating']      = substr($asf_header_data, $offset, $info_asf_content_description_object['rating_length']);
 410.792 +                    $offset += $info_asf_content_description_object['rating_length'];
 410.793 +
 410.794 +                    foreach (array ('title'=>'title', 'author'=>'artist', 'copyright'=>'copyright', 'description'=>'comment', 'rating'=>'rating') as $key_to_copy_from => $key_to_copy_to) {
 410.795 +                        if (!empty($info_asf_content_description_object[$key_to_copy_from])) {
 410.796 +                            $info_asf_comments[$key_to_copy_to][] = getid3_asf::TrimTerm($info_asf_content_description_object[$key_to_copy_from]);
 410.797 +                        }
 410.798 +                    }
 410.799 +                    break;
 410.800 +
 410.801 +
 410.802 +                case getid3_asf::Extended_Content_Description_Object:
 410.803 +
 410.804 +                    // Extended Content Description Object: (optional, one only)
 410.805 +                    // Field Name                   Field Type   Size (bits)
 410.806 +                    // Object ID                    GUID         128             // GUID for Extended Content Description object - getid3_asf::Extended_Content_Description_Object
 410.807 +                    // Object Size                  QWORD        64              // size of ExtendedContent Description object, including 26 bytes of Extended Content Description Object header
 410.808 +                    // Content Descriptors Count    WORD         16              // number of entries in Content Descriptors list
 410.809 +                    // Content Descriptors          array of:    variable        //
 410.810 +                    // * Descriptor Name Length     WORD         16              // size in bytes of Descriptor Name field
 410.811 +                    // * Descriptor Name            WCHAR        variable        // array of Unicode characters - Descriptor Name
 410.812 +                    // * Descriptor Value Data Type WORD         16              // Lookup array:
 410.813 +                                                                                    // 0x0000 = Unicode String (variable length)
 410.814 +                                                                                    // 0x0001 = BYTE array     (variable length)
 410.815 +                                                                                    // 0x0002 = BOOL           (DWORD, 32 bits)
 410.816 +                                                                                    // 0x0003 = DWORD          (DWORD, 32 bits)
 410.817 +                                                                                    // 0x0004 = QWORD          (QWORD, 64 bits)
 410.818 +                                                                                    // 0x0005 = WORD           (WORD,  16 bits)
 410.819 +                    // * Descriptor Value Length    WORD         16              // number of bytes stored in Descriptor Value field
 410.820 +                    // * Descriptor Value           variable     variable        // value for Content Descriptor
 410.821 +
 410.822 +                    $info_asf['extended_content_description_object'] = array ();
 410.823 +                    $info_asf_extended_content_description_object       = &$info_asf['extended_content_description_object'];
 410.824 +
 410.825 +                    $info_asf_extended_content_description_object['objectid_guid']             = $next_object_guidtext;
 410.826 +                    $info_asf_extended_content_description_object['objectsize']                = $next_object_size;
 410.827 +                    $info_asf_extended_content_description_object['content_descriptors_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.828 +                    $offset += 2;
 410.829 +                    
 410.830 +                    for ($extended_content_descriptors_counter = 0; $extended_content_descriptors_counter < $info_asf_extended_content_description_object['content_descriptors_count']; $extended_content_descriptors_counter++) {
 410.831 +                        
 410.832 +                        $info_asf_extended_content_description_object['content_descriptors'][$extended_content_descriptors_counter] = array ();
 410.833 +                        $info_asf_extended_content_description_object_content_descriptor_current                                  = &$info_asf_extended_content_description_object['content_descriptors'][$extended_content_descriptors_counter];
 410.834 +
 410.835 +                        $info_asf_extended_content_description_object_content_descriptor_current['base_offset']  = $offset + 30;
 410.836 +                        $info_asf_extended_content_description_object_content_descriptor_current['name_length']  = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.837 +                        $offset += 2;
 410.838 +                        
 410.839 +                        $info_asf_extended_content_description_object_content_descriptor_current['name']         = substr($asf_header_data, $offset, $info_asf_extended_content_description_object_content_descriptor_current['name_length']);
 410.840 +                        $offset += $info_asf_extended_content_description_object_content_descriptor_current['name_length'];
 410.841 +                        
 410.842 +                        $info_asf_extended_content_description_object_content_descriptor_current['value_type']   = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.843 +                        $offset += 2;
 410.844 +                        
 410.845 +                        $info_asf_extended_content_description_object_content_descriptor_current['value_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
 410.846 +                        $offset += 2;
 410.847 +                        
 410.848 +                        $info_asf_extended_content_description_object_content_descriptor_current['value']        = substr($asf_header_data, $offset, $info_asf_extended_content_description_object_content_descriptor_current['value_length']);
 410.849 +                        $offset += $info_asf_extended_content_description_object_content_descriptor_current['value_length'];
 410.850 +                        
 410.851 +                        switch ($info_asf_extended_content_description_object_content_descriptor_current['value_type']) {
 410.852 +                            
 410.853 +                            case 0x0000: // Unicode string
 410.854 +                                break;
 410.855 +
 410.856 +                            case 0x0001: // BYTE array
 410.857 +                                // do nothing
 410.858 +                                break;
 410.859 +
 410.860 +                            case 0x0002: // BOOL
 410.861 +                                $info_asf_extended_content_description_object_content_descriptor_current['value'] = (bool)getid3_lib::LittleEndian2Int($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.862 +                                break;
 410.863 +
 410.864 +                            case 0x0003: // DWORD
 410.865 +                            case 0x0004: // QWORD
 410.866 +                            case 0x0005: // WORD
 410.867 +                                $info_asf_extended_content_description_object_content_descriptor_current['value'] = getid3_lib::LittleEndian2Int($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.868 +                                break;
 410.869 +
 410.870 +                            default:
 410.871 +                                $getid3->warning('extended_content_description.content_descriptors.'.$extended_content_descriptors_counter.'.value_type is invalid ('.$info_asf_extended_content_description_object_content_descriptor_current['value_type'].')');
 410.872 +                                break;
 410.873 +                        }
 410.874 +                        
 410.875 +                        switch ($this->TrimConvert(strtolower($info_asf_extended_content_description_object_content_descriptor_current['name']))) {
 410.876 +
 410.877 +                            case 'wm/albumartist':
 410.878 +                            case 'artist':
 410.879 +                                $info_asf_comments['artist'] = array (getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.880 +                                break;
 410.881 +
 410.882 +
 410.883 +                            case 'wm/albumtitle':
 410.884 +                            case 'album':
 410.885 +                                $info_asf_comments['album']  = array (getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.886 +                                break;
 410.887 +
 410.888 +
 410.889 +                            case 'wm/genre':
 410.890 +                            case 'genre':
 410.891 +                                $genre = getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.892 +                                $info_asf_comments['genre'] = array ($genre);
 410.893 +                                break;
 410.894 +
 410.895 +
 410.896 +                            case 'wm/tracknumber':
 410.897 +                            case 'tracknumber':
 410.898 +                                $info_asf_comments['track'] = array (intval(getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value'])));
 410.899 +                                break;
 410.900 +
 410.901 +
 410.902 +                            case 'wm/track':
 410.903 +                                if (empty($info_asf_comments['track'])) {
 410.904 +                                    $info_asf_comments['track'] = array (1 + $this->TrimConvert($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.905 +                                }
 410.906 +                                break;
 410.907 +
 410.908 +
 410.909 +                            case 'wm/year':
 410.910 +                            case 'year':
 410.911 +                            case 'date':
 410.912 +                                $info_asf_comments['year'] = array ( getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.913 +                                break;
 410.914 +                                
 410.915 +                                
 410.916 +                            case 'wm/lyrics':
 410.917 +                            case 'lyrics':
 410.918 +                                $info_asf_comments['lyrics'] = array ( getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.919 +  	                            break;
 410.920 +                            
 410.921 +                            
 410.922 +                            case 'isvbr':
 410.923 +                                if ($info_asf_extended_content_description_object_content_descriptor_current['value']) {
 410.924 +                                    $info_audio['bitrate_mode'] = 'vbr';
 410.925 +                                    $info_video['bitrate_mode'] = 'vbr';
 410.926 +                                }
 410.927 +                                break;
 410.928 +
 410.929 +
 410.930 +                            case 'id3':
 410.931 +								
 410.932 +								// id3v2 parsing might not be enabled
 410.933 +								if (class_exists('getid3_id3v2')) {
 410.934 +									
 410.935 +									// Clone getid3 
 410.936 +                                    $clone = clone $getid3;
 410.937 +                                    
 410.938 +                                    // Analyse clone by string
 410.939 +                                    $id3v2 = new getid3_id3v2($clone);
 410.940 +                                    $id3v2->AnalyzeString($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.941 +                                    
 410.942 +                                    // Import from clone and destroy
 410.943 +                                    $getid3->info['id3v2'] = $clone->info['id3v2'];
 410.944 +                                    $getid3->warnings($clone->warnings());
 410.945 +                                    unset($clone);
 410.946 +								}
 410.947 +								break;
 410.948 +
 410.949 +
 410.950 +                            case 'wm/encodingtime':
 410.951 +                                $info_asf_extended_content_description_object_content_descriptor_current['encoding_time_unix'] = getid3_asf::FiletimeToUNIXtime($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.952 +                                $info_asf_comments['encoding_time_unix'] = array ($info_asf_extended_content_description_object_content_descriptor_current['encoding_time_unix']);
 410.953 +                                break;
 410.954 +
 410.955 +
 410.956 +                            case 'wm/picture':
 410.957 +                                
 410.958 +                                //typedef struct _WMPicture{
 410.959 +                                //  LPWSTR  pwszMIMEType;
 410.960 +                                //  BYTE  bPictureType;
 410.961 +                                //  LPWSTR  pwszDescription;
 410.962 +                                //  DWORD  dwDataLen;
 410.963 +                                //  BYTE*  pbData;
 410.964 +                                //} WM_PICTURE;
 410.965 +
 410.966 +                                $info_asf_extended_content_description_object_content_descriptor_current['image_type_id'] = getid3_lib::LittleEndian2Int($info_asf_extended_content_description_object_content_descriptor_current['value']{0});
 410.967 +                                $info_asf_extended_content_description_object_content_descriptor_current['image_type']    = getid3_asf::WMpictureTypeLookup($info_asf_extended_content_description_object_content_descriptor_current['image_type_id']);
 410.968 +                                $info_asf_extended_content_description_object_content_descriptor_current['image_size']    = getid3_lib::LittleEndian2Int(substr($info_asf_extended_content_description_object_content_descriptor_current['value'], 1, 4));
 410.969 +                                $info_asf_extended_content_description_object_content_descriptor_current['image_mime']   = '';
 410.970 +                                
 410.971 +                                $wm_picture_offset = 5;
 410.972 +                                
 410.973 +                                do {
 410.974 +                                    $next_byte_pair = substr($info_asf_extended_content_description_object_content_descriptor_current['value'], $wm_picture_offset, 2);
 410.975 +                                    $wm_picture_offset += 2;
 410.976 +                                    $info_asf_extended_content_description_object_content_descriptor_current['image_mime'] .= $next_byte_pair;
 410.977 +                                } while ($next_byte_pair !== "\x00\x00");
 410.978 +
 410.979 +                                $info_asf_extended_content_description_object_content_descriptor_current['image_description'] = '';
 410.980 +                                
 410.981 +                                do {
 410.982 +                                    $next_byte_pair = substr($info_asf_extended_content_description_object_content_descriptor_current['value'], $wm_picture_offset, 2);
 410.983 +                                    $wm_picture_offset += 2;
 410.984 +                                    $info_asf_extended_content_description_object_content_descriptor_current['image_description'] .= $next_byte_pair;
 410.985 +                                } while ($next_byte_pair !== "\x00\x00");
 410.986 +
 410.987 +                                $info_asf_extended_content_description_object_content_descriptor_current['dataoffset'] = $wm_picture_offset;
 410.988 +                                $info_asf_extended_content_description_object_content_descriptor_current['data']       = substr($info_asf_extended_content_description_object_content_descriptor_current['value'], $wm_picture_offset);
 410.989 +                                unset($info_asf_extended_content_description_object_content_descriptor_current['value']);
 410.990 +                                break;
 410.991 +
 410.992 +                            default:
 410.993 +                                switch ($info_asf_extended_content_description_object_content_descriptor_current['value_type']) {
 410.994 +                                    case 0: // Unicode string
 410.995 +                                        if (substr($this->TrimConvert($info_asf_extended_content_description_object_content_descriptor_current['name']), 0, 3) == 'WM/') {
 410.996 +                                            $info_asf_comments[str_replace('wm/', '', strtolower($this->TrimConvert($info_asf_extended_content_description_object_content_descriptor_current['name'])))] = array (getid3_asf::TrimTerm($info_asf_extended_content_description_object_content_descriptor_current['value']));
 410.997 +                                        }
 410.998 +                                        break;
 410.999 +
410.1000 +                                    case 1:
410.1001 +                                        break;
410.1002 +                                }
410.1003 +                                break;
410.1004 +                        }
410.1005 +
410.1006 +                    }
410.1007 +                    break;
410.1008 +
410.1009 +
410.1010 +                case getid3_asf::Stream_Bitrate_Properties_Object:
410.1011 +
410.1012 +                    // Stream Bitrate Properties Object: (optional, one only)
410.1013 +                    // Field Name                   Field Type   Size (bits)
410.1014 +                    // Object ID                    GUID         128             // GUID for Stream Bitrate Properties object - getid3_asf::Stream_Bitrate_Properties_Object
410.1015 +                    // Object Size                  QWORD        64              // size of Extended Content Description object, including 26 bytes of Stream Bitrate Properties Object header
410.1016 +                    // Bitrate Records Count        WORD         16              // number of records in Bitrate Records
410.1017 +                    // Bitrate Records              array of:    variable        //
410.1018 +                    // * Flags                      WORD         16              //
410.1019 +                    // * * Stream Number            bits         7  (0x007F)     // number of this stream
410.1020 +                    // * * Reserved                 bits         9  (0xFF80)     // hardcoded: 0
410.1021 +                    // * Average Bitrate            DWORD        32              // in bits per second
410.1022 +
410.1023 +                    // shortcut
410.1024 +                    $info_asf['stream_bitrate_properties_object'] = array ();
410.1025 +                    $info_asf_stream_bitrate_properties_object = &$info_asf['stream_bitrate_properties_object'];
410.1026 +
410.1027 +                    $info_asf_stream_bitrate_properties_object['objectid_guid']         = $next_object_guidtext;
410.1028 +                    $info_asf_stream_bitrate_properties_object['objectsize']            = $next_object_size;
410.1029 +                    $info_asf_stream_bitrate_properties_object['bitrate_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
410.1030 +                    $offset += 2;
410.1031 +                    
410.1032 +                    for ($bitrate_records_counter = 0; $bitrate_records_counter < $info_asf_stream_bitrate_properties_object['bitrate_records_count']; $bitrate_records_counter++) {
410.1033 +                    
410.1034 +                        $info_asf_stream_bitrate_properties_object['bitrate_records'][$bitrate_records_counter]['flags_raw'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 2));
410.1035 +                        $offset += 2;
410.1036 +                        
410.1037 +                        $info_asf_stream_bitrate_properties_object['bitrate_records'][$bitrate_records_counter]['flags']['stream_number'] = $info_asf_stream_bitrate_properties_object['bitrate_records'][$bitrate_records_counter]['flags_raw'] & 0x007F;
410.1038 +                        
410.1039 +                        $info_asf_stream_bitrate_properties_object['bitrate_records'][$bitrate_records_counter]['bitrate'] = getid3_lib::LittleEndian2Int(substr($asf_header_data, $offset, 4));
410.1040 +                        $offset += 4;
410.1041 +                    }
410.1042 +                    break;
410.1043 +
410.1044 +
410.1045 +                case getid3_asf::Padding_Object:
410.1046 +
410.1047 +                    // Padding Object: (optional)
410.1048 +                    // Field Name                   Field Type   Size (bits)
410.1049 +                    // Object ID                    GUID         128             // GUID for Padding object - getid3_asf::Padding_Object
410.1050 +                    // Object Size                  QWORD        64              // size of Padding object, including 24 bytes of ASF Padding Object header
410.1051 +                    // Padding Data                 BYTESTREAM   variable        // ignore
410.1052 +
410.1053 +                    // shortcut
410.1054 +                    $info_asf['padding_object'] = array ();
410.1055 +                    $info_asf_paddingobject     = &$info_asf['padding_object'];
410.1056 +
410.1057 +                    $info_asf_paddingobject['objectid_guid']  = $next_object_guidtext;
410.1058 +                    $info_asf_paddingobject['objectsize']     = $next_object_size;
410.1059 +                    $info_asf_paddingobject['padding_length'] = $info_asf_paddingobject['objectsize'] - 16 - 8;
410.1060 +                    $info_asf_paddingobject['padding']        = substr($asf_header_data, $offset, $info_asf_paddingobject['padding_length']);
410.1061 +                    $offset += ($next_object_size - 16 - 8);
410.1062 +                    break;
410.1063 +
410.1064 +
410.1065 +                case getid3_asf::Extended_Content_Encryption_Object:
410.1066 +                case getid3_asf::Content_Encryption_Object:
410.1067 +
410.1068 +                    // WMA DRM - just ignore
410.1069 +                    $offset += ($next_object_size - 16 - 8);
410.1070 +                    break;
410.1071 +
410.1072 +
410.1073 +                default:
410.1074 +
410.1075 +                    // Implementations shall ignore any standard or non-standard object that they do not know how to handle.
410.1076 +                    if (getid3_asf::GUIDname($next_object_guidtext)) {
410.1077 +                        $getid3->warning('unhandled GUID "'.getid3_asf::GUIDname($next_object_guidtext).'" {'.$next_object_guidtext.'} in ASF header at offset '.($offset - 16 - 8));
410.1078 +                    } else {
410.1079 +                        $getid3->warning('unknown GUID {'.$next_object_guidtext.'} in ASF header at offset '.($offset - 16 - 8));
410.1080 +                    }
410.1081 +                    $offset += ($next_object_size - 16 - 8);
410.1082 +                    break;
410.1083 +            }
410.1084 +        }
410.1085 +        
410.1086 +        if (isset($info_asf_stream_bitrate_properties['bitrate_records_count'])) {
410.1087 +            $asf_bitrate_audio = 0;
410.1088 +            $asf_bitrate_video = 0;
410.1089 +
410.1090 +            for ($bitrate_records_counter = 0; $bitrate_records_counter < $info_asf_stream_bitrate_properties['bitrate_records_count']; $bitrate_records_counter++) {
410.1091 +                if (isset($info_asf_codec_list_object['codec_entries'][$bitrate_records_counter])) {
410.1092 +                    switch ($info_asf_codec_list_object['codec_entries'][$bitrate_records_counter]['type_raw']) {
410.1093 +                        
410.1094 +                        case 1:
410.1095 +                            $asf_bitrate_video += $info_asf_stream_bitrate_properties['bitrate_records'][$bitrate_records_counter]['bitrate'];
410.1096 +                            break;
410.1097 +                            
410.1098 +                        case 2:
410.1099 +                            $asf_bitrate_audio += $info_asf_stream_bitrate_properties['bitrate_records'][$bitrate_records_counter]['bitrate'];
410.1100 +                            break;
410.1101 +                    }
410.1102 +                }
410.1103 +            }
410.1104 +            if ($asf_bitrate_audio > 0) {
410.1105 +                $info_audio['bitrate'] = $asf_bitrate_audio;
410.1106 +            }
410.1107 +            if ($asf_bitrate_video > 0) {
410.1108 +                $info_video['bitrate'] = $asf_bitrate_video;
410.1109 +            }
410.1110 +        }
410.1111 +        
410.1112 +        if (isset($info_asf['stream_properties_object']) && is_array($info_asf['stream_properties_object'])) {
410.1113 +            
410.1114 +            $info_audio['bitrate'] = 0;
410.1115 +            $info_video['bitrate'] = 0;
410.1116 +
410.1117 +            foreach ($info_asf['stream_properties_object'] as $stream_number => $stream_data) {
410.1118 +                
410.1119 +                switch ($stream_data['stream_type_guid']) {
410.1120 +                    
410.1121 +                    case getid3_asf::Audio_Media:
410.1122 +                    
410.1123 +                        // Field Name                   Field Type   Size (bits)
410.1124 +                        // Codec ID / Format Tag        WORD         16              // unique ID of audio codec - defined as wFormatTag field of WAVEFORMATEX structure
410.1125 +                        // Number of Channels           WORD         16              // number of channels of audio - defined as nChannels field of WAVEFORMATEX structure
410.1126 +                        // Samples Per Second           DWORD        32              // in Hertz - defined as nSamplesPerSec field of WAVEFORMATEX structure
410.1127 +                        // Average number of Bytes/sec  DWORD        32              // bytes/sec of audio stream  - defined as nAvgBytesPerSec field of WAVEFORMATEX structure
410.1128 +                        // Block Alignment              WORD         16              // block size in bytes of audio codec - defined as nBlockAlign field of WAVEFORMATEX structure
410.1129 +                        // Bits per sample              WORD         16              // bits per sample of mono data. set to zero for variable bitrate codecs. defined as wBitsPerSample field of WAVEFORMATEX structure
410.1130 +                        // Codec Specific Data Size     WORD         16              // size in bytes of Codec Specific Data buffer - defined as cbSize field of WAVEFORMATEX structure
410.1131 +                        // Codec Specific Data          BYTESTREAM   variable        // array of codec-specific data bytes
410.1132 +
410.1133 +                        // shortcut
410.1134 +                        $info_asf['audio_media'][$stream_number] = array ();
410.1135 +                        $info_asf_audio_media_current_stream     = &$info_asf['audio_media'][$stream_number];
410.1136 +
410.1137 +                        $audio_media_offset = 0;
410.1138 +
410.1139 +                        $info_asf_audio_media_current_stream = getid3_riff::RIFFparseWAVEFORMATex(substr($stream_data['type_specific_data'], $audio_media_offset, 16));
410.1140 +
410.1141 +                        $audio_media_offset += 16;
410.1142 +
410.1143 +                        $info_audio['lossless'] = false;
410.1144 +                        switch ($info_asf_audio_media_current_stream['raw']['wFormatTag']) {
410.1145 +                            case 0x0001: // PCM
410.1146 +                            case 0x0163: // WMA9 Lossless
410.1147 +                                $info_audio['lossless'] = true;
410.1148 +                                break;
410.1149 +                        }
410.1150 +
410.1151 +                        if (!empty($info_asf['stream_bitrate_properties_object']['bitrate_records'])) {
410.1152 +							foreach ($info_asf['stream_bitrate_properties_object']['bitrate_records'] as $data_array) {
410.1153 +								if (@$data_array['flags']['stream_number'] == $stream_number) {
410.1154 +									$info_asf_audio_media_current_stream['bitrate'] = $data_array['bitrate'];
410.1155 +									$info_audio['bitrate'] += $data_array['bitrate'];
410.1156 +									break;
410.1157 +								}
410.1158 +							}
410.1159 +						} else {
410.1160 +							if (@$info_asf_audio_media_current_stream['bytes_sec']) {
410.1161 +								$info_audio['bitrate'] += $info_asf_audio_media_current_stream['bytes_sec'] * 8;
410.1162 +							} elseif (@$info_asf_audio_media_current_stream['bitrate']) {
410.1163 +								$info_audio['bitrate'] += $info_asf_audio_media_current_stream['bitrate'];
410.1164 +							}
410.1165 +						}
410.1166 +                        
410.1167 +                        $info_audio['streams'][$stream_number]                  = $info_asf_audio_media_current_stream;
410.1168 +                        $info_audio['streams'][$stream_number]['wformattag']    = $info_asf_audio_media_current_stream['raw']['wFormatTag'];
410.1169 +                        $info_audio['streams'][$stream_number]['lossless']      = $info_audio['lossless'];
410.1170 +                        $info_audio['streams'][$stream_number]['bitrate']       = $info_audio['bitrate'];
410.1171 +                        unset($info_audio['streams'][$stream_number]['raw']);
410.1172 +
410.1173 +                        $info_asf_audio_media_current_stream['codec_data_size'] = getid3_lib::LittleEndian2Int(substr($stream_data['type_specific_data'], $audio_media_offset, 2));
410.1174 +                        $audio_media_offset += 2;
410.1175 +                        
410.1176 +                        $info_asf_audio_media_current_stream['codec_data']      = substr($stream_data['type_specific_data'], $audio_media_offset, $info_asf_audio_media_current_stream['codec_data_size']);
410.1177 +                        $audio_media_offset += $info_asf_audio_media_current_stream['codec_data_size'];
410.1178 +                        break;
410.1179 +
410.1180 +
410.1181 +                    case getid3_asf::Video_Media:
410.1182 +
410.1183 +                        // Field Name                   Field Type   Size (bits)
410.1184 +                        // Encoded Image Width          DWORD        32              // width of image in pixels
410.1185 +                        // Encoded Image Height         DWORD        32              // height of image in pixels
410.1186 +                        // Reserved Flags               BYTE         8               // hardcoded: 0x02
410.1187 +                        // Format Data Size             WORD         16              // size of Format Data field in bytes
410.1188 +                        // Format Data                  array of:    variable        //
410.1189 +                        // * Format Data Size           DWORD        32              // number of bytes in Format Data field, in bytes - defined as biSize field of BITMAPINFOHEADER structure
410.1190 +                        // * Image Width                LONG         32              // width of encoded image in pixels - defined as biWidth field of BITMAPINFOHEADER structure
410.1191 +                        // * Image Height               LONG         32              // height of encoded image in pixels - defined as biHeight field of BITMAPINFOHEADER structure
410.1192 +                        // * Reserved                   WORD         16              // hardcoded: 0x0001 - defined as biPlanes field of BITMAPINFOHEADER structure
410.1193 +                        // * Bits Per Pixel Count       WORD         16              // bits per pixel - defined as biBitCount field of BITMAPINFOHEADER structure
410.1194 +                        // * Compression ID             FOURCC       32              // fourcc of video codec - defined as biCompression field of BITMAPINFOHEADER structure
410.1195 +                        // * Image Size                 DWORD        32              // image size in bytes - defined as biSizeImage field of BITMAPINFOHEADER structure
410.1196 +                        // * Horizontal Pixels / Meter  DWORD        32              // horizontal resolution of target device in pixels per meter - defined as biXPelsPerMeter field of BITMAPINFOHEADER structure
410.1197 +                        // * Vertical Pixels / Meter    DWORD        32              // vertical resolution of target device in pixels per meter - defined as biYPelsPerMeter field of BITMAPINFOHEADER structure
410.1198 +                        // * Colors Used Count          DWORD        32              // number of color indexes in the color table that are actually used - defined as biClrUsed field of BITMAPINFOHEADER structure
410.1199 +                        // * Important Colors Count     DWORD        32              // number of color index required for displaying bitmap. if zero, all colors are required. defined as biClrImportant field of BITMAPINFOHEADER structure
410.1200 +                        // * Codec Specific Data        BYTESTREAM   variable        // array of codec-specific data bytes
410.1201 +
410.1202 +                        $info_asf['video_media'][$stream_number] = array ();
410.1203 +                        $info_asf_video_media_current_stream     = &$info_asf['video_media'][$stream_number];
410.1204 +
410.1205 +                        getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_video_media_current_stream, $stream_data['type_specific_data'], 0, 
410.1206 +                            array (
410.1207 +                                'image_width'     => 4,
410.1208 +                                'image_height'    => 4,
410.1209 +                                'flags'           => 1,
410.1210 +                                'format_data_size'=> 2
410.1211 +                            )
410.1212 +                        );
410.1213 +                        
410.1214 +                        getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_video_media_current_stream['format_data'], $stream_data['type_specific_data'], 11, 
410.1215 +                            array (
410.1216 +                                'format_data_size' => 4,
410.1217 +                                'image_width'      => 4,
410.1218 +                                'image_height'     => 4,
410.1219 +                                'reserved'         => 2,
410.1220 +                                'bits_per_pixel'   => 2,
410.1221 +                                'codec_fourcc'     => -4,
410.1222 +                                'image_size'       => 4,
410.1223 +                                'horizontal_pels'  => 4,
410.1224 +                                'vertical_pels'    => 4,
410.1225 +                                'colors_used'      => 4,
410.1226 +                                'colors_important' => 4
410.1227 +                            )
410.1228 +                        );
410.1229 +                            
410.1230 +                        $info_asf_video_media_current_stream['format_data']['codec_data'] = substr($stream_data['type_specific_data'], 51);
410.1231 +                        
410.1232 +                        if (!empty($info_asf['stream_bitrate_properties_object']['bitrate_records'])) {
410.1233 +                            foreach ($info_asf['stream_bitrate_properties_object']['bitrate_records'] as $data_array) {
410.1234 +                                if (@$data_array['flags']['stream_number'] == $stream_number) {
410.1235 +                                    $info_asf_video_media_current_stream['bitrate']   = $data_array['bitrate'];
410.1236 +                                    $info_video['streams'][$stream_number]['bitrate'] = $data_array['bitrate'];
410.1237 +                                    $info_video['bitrate'] += $data_array['bitrate'];
410.1238 +                                    
410.1239 +                                    break;
410.1240 +                                }
410.1241 +                            }
410.1242 +                        }
410.1243 +                        
410.1244 +                        $info_asf_video_media_current_stream['format_data']['codec'] = getid3_riff::RIFFfourccLookup($info_asf_video_media_current_stream['format_data']['codec_fourcc']);
410.1245 +
410.1246 +                        $info_video['streams'][$stream_number]['fourcc']          = $info_asf_video_media_current_stream['format_data']['codec_fourcc'];
410.1247 +                        $info_video['streams'][$stream_number]['codec']           = $info_asf_video_media_current_stream['format_data']['codec'];
410.1248 +                        $info_video['streams'][$stream_number]['resolution_x']    = $info_asf_video_media_current_stream['image_width'];
410.1249 +                        $info_video['streams'][$stream_number]['resolution_y']    = $info_asf_video_media_current_stream['image_height'];
410.1250 +                        $info_video['streams'][$stream_number]['bits_per_sample'] = $info_asf_video_media_current_stream['format_data']['bits_per_pixel'];
410.1251 +                        break;
410.1252 +
410.1253 +                    default:
410.1254 +                        break;
410.1255 +                }
410.1256 +            }
410.1257 +        }
410.1258 +
410.1259 +        while (ftell($getid3->fp) < $getid3->info['avdataend']) {
410.1260 +            
410.1261 +            $next_object_data_header = fread($getid3->fp, 24);
410.1262 +            $offset = 0;
410.1263 +            
410.1264 +            $next_object_guid = substr($next_object_data_header, 0, 16);
410.1265 +            $offset += 16;
410.1266 +            
410.1267 +            $next_object_guidtext = getid3_asf::BytestringToGUID($next_object_guid);
410.1268 +            $next_object_size     = getid3_lib::LittleEndian2Int(substr($next_object_data_header, $offset, 8));
410.1269 +            $offset += 8;
410.1270 +
410.1271 +            switch ($next_object_guidtext) {
410.1272 +                
410.1273 +                case getid3_asf::Data_Object:
410.1274 +                
410.1275 +                    // Data Object: (mandatory, one only)
410.1276 +                    // Field Name                       Field Type   Size (bits)
410.1277 +                    // Object ID                        GUID         128             // GUID for Data object - getid3_asf::Data_Object
410.1278 +                    // Object Size                      QWORD        64              // size of Data object, including 50 bytes of Data Object header. may be 0 if FilePropertiesObject.BroadcastFlag == 1
410.1279 +                    // File ID                          GUID         128             // unique identifier. identical to File ID field in Header Object
410.1280 +                    // Total Data Packets               QWORD        64              // number of Data Packet entries in Data Object. invalid if FilePropertiesObject.BroadcastFlag == 1
410.1281 +                    // Reserved                         WORD         16              // hardcoded: 0x0101
410.1282 +
410.1283 +                    // shortcut
410.1284 +                    $info_asf['data_object'] = array ();
410.1285 +                    $info_asf_data_object    = &$info_asf['data_object'];
410.1286 +
410.1287 +                    $data_object_data = $next_object_data_header.fread($getid3->fp, 50 - 24);
410.1288 +                    $offset = 24;
410.1289 +
410.1290 +                    $info_asf_data_object['objectid_guid']      = $next_object_guidtext;
410.1291 +                    $info_asf_data_object['objectsize']         = $next_object_size;
410.1292 +
410.1293 +                    $info_asf_data_object['fileid_guid']        = getid3_asf::BytestringToGUID(substr($data_object_data, $offset, 16));
410.1294 +                    $offset += 16;
410.1295 +                    
410.1296 +                    $info_asf_data_object['total_data_packets'] = getid3_lib::LittleEndian2Int(substr($data_object_data, $offset, 8));
410.1297 +                    $offset += 8;
410.1298 +                    
410.1299 +                    $info_asf_data_object['reserved']           = getid3_lib::LittleEndian2Int(substr($data_object_data, $offset, 2));
410.1300 +                    $offset += 2;
410.1301 +                    
410.1302 +                    if ($info_asf_data_object['reserved'] != 0x0101) {
410.1303 +                        $getid3->warning('data_object.reserved ('.getid3_lib::PrintHexBytes($info_asf_data_object['reserved']).') does not match expected value of "0x0101"');
410.1304 +                        break;
410.1305 +                    }
410.1306 +
410.1307 +                    // Data Packets                     array of:    variable        //
410.1308 +                    // * Error Correction Flags         BYTE         8               //
410.1309 +                    // * * Error Correction Data Length bits         4               // if Error Correction Length Type == 00, size of Error Correction Data in bytes, else hardcoded: 0000
410.1310 +                    // * * Opaque Data Present          bits         1               //
410.1311 +                    // * * Error Correction Length Type bits         2               // number of bits for size of the error correction data. hardcoded: 00
410.1312 +                    // * * Error Correction Present     bits         1               // If set, use Opaque Data Packet structure, else use Payload structure
410.1313 +                    // * Error Correction Data
410.1314 +
410.1315 +                    $getid3->info['avdataoffset'] = ftell($getid3->fp);
410.1316 +                    fseek($getid3->fp, ($info_asf_data_object['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data
410.1317 +                    $getid3->info['avdataend'] = ftell($getid3->fp);
410.1318 +                    break;
410.1319 +
410.1320 +
410.1321 +                case getid3_asf::Simple_Index_Object:
410.1322 +
410.1323 +                    // Simple Index Object: (optional, recommended, one per video stream)
410.1324 +                    // Field Name                       Field Type   Size (bits)
410.1325 +                    // Object ID                        GUID         128             // GUID for Simple Index object - getid3_asf::Data_Object
410.1326 +                    // Object Size                      QWORD        64              // size of Simple Index object, including 56 bytes of Simple Index Object header
410.1327 +                    // File ID                          GUID         128             // unique identifier. may be zero or identical to File ID field in Data Object and Header Object
410.1328 +                    // Index Entry Time Interval        QWORD        64              // interval between index entries in 100-nanosecond units
410.1329 +                    // Maximum Packet Count             DWORD        32              // maximum packet count for all index entries
410.1330 +                    // Index Entries Count              DWORD        32              // number of Index Entries structures
410.1331 +                    // Index Entries                    array of:    variable        //
410.1332 +                    // * Packet Number                  DWORD        32              // number of the Data Packet associated with this index entry
410.1333 +                    // * Packet Count                   WORD         16              // number of Data Packets to sent at this index entry
410.1334 +
410.1335 +                    // shortcut
410.1336 +                    $info_asf['simple_index_object'] = array ();
410.1337 +                    $info_asf_simple_index_object    = &$info_asf['simple_index_object'];
410.1338 +
410.1339 +                    $info_asf_simple_index_object['objectid_guid'] = $next_object_guidtext;
410.1340 +                    $info_asf_simple_index_object['objectsize']    = $next_object_size;
410.1341 +
410.1342 +                    $simple_index_object_data = $next_object_data_header.fread($getid3->fp, 56 - 24);
410.1343 +                    
410.1344 +                    $info_asf_simple_index_object['fileid_guid'] = getid3_asf::BytestringToGUID(substr($simple_index_object_data, 24, 16));
410.1345 +
410.1346 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_simple_index_object, $simple_index_object_data, 40,
410.1347 +                        array (
410.1348 +                            'index_entry_time_interval' => 8,
410.1349 +                            'maximum_packet_count'      => 4,
410.1350 +                            'index_entries_count'       => 4
410.1351 +                        )
410.1352 +                    );
410.1353 +                    
410.1354 +                    $offset = 56;
410.1355 +
410.1356 +                    $index_entries_data = $simple_index_object_data.fread($getid3->fp, 6 * $info_asf_simple_index_object['index_entries_count']);
410.1357 +                    for ($index_entries_counter = 0; $index_entries_counter < $info_asf_simple_index_object['index_entries_count']; $index_entries_counter++) {
410.1358 +                    
410.1359 +                        $info_asf_simple_index_object['index_entries'][$index_entries_counter]['packet_number'] = getid3_lib::LittleEndian2Int(substr($index_entries_data, $offset, 4));
410.1360 +                        $offset += 4;
410.1361 +                    
410.1362 +                        $info_asf_simple_index_object['index_entries'][$index_entries_counter]['packet_count']  = getid3_lib::LittleEndian2Int(substr($index_entries_data, $offset, 4));
410.1363 +                        $offset += 2;
410.1364 +                    }
410.1365 +                    break;
410.1366 +
410.1367 +
410.1368 +                case getid3_asf::Index_Object:
410.1369 +
410.1370 +                    // 6.2 ASF top-level Index Object (optional but recommended when appropriate, 0 or 1)
410.1371 +                    // Field Name                       Field Type   Size (bits)
410.1372 +                    // Object ID                        GUID         128             // GUID for the Index Object - getid3_asf::Index_Object
410.1373 +                    // Object Size                      QWORD        64              // Specifies the size, in bytes, of the Index Object, including at least 34 bytes of Index Object header
410.1374 +                    // Index Entry Time Interval        DWORD        32              // Specifies the time interval between each index entry in ms.
410.1375 +                    // Index Specifiers Count           WORD         16              // Specifies the number of Index Specifiers structures in this Index Object.
410.1376 +                    // Index Blocks Count               DWORD        32              // Specifies the number of Index Blocks structures in this Index Object.
410.1377 +
410.1378 +                    // Index Entry Time Interval        DWORD        32              // Specifies the time interval between index entries in milliseconds.  This value cannot be 0.
410.1379 +                    // Index Specifiers Count           WORD         16              // Specifies the number of entries in the Index Specifiers list.  Valid values are 1 and greater.
410.1380 +                    // Index Specifiers                 array of:    varies          //
410.1381 +                    // * Stream Number                  WORD         16              // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127.
410.1382 +                    // * Index Type                     WORD         16              // Specifies Index Type values as follows:
410.1383 +                                                                                     //   1 = Nearest Past Data Packet - indexes point to the data packet whose presentation time is closest to the index entry time.
410.1384 +                                                                                     //   2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire object or first fragment of an object.
410.1385 +                                                                                     //   3 = Nearest Past Cleanpoint. - indexes point to the closest data packet containing an entire object (or first fragment of an object) that has the Cleanpoint Flag set.
410.1386 +                                                                                     //   Nearest Past Cleanpoint is the most common type of index.
410.1387 +                    // Index Entry Count                DWORD        32              // Specifies the number of Index Entries in the block.
410.1388 +                    // * Block Positions                QWORD        varies          // Specifies a list of byte offsets of the beginnings of the blocks relative to the beginning of the first Data Packet (i.e., the beginning of the Data Object + 50 bytes). The number of entries in this list is specified by the value of the Index Specifiers Count field. The order of those byte offsets is tied to the order in which Index Specifiers are listed.
410.1389 +                    // * Index Entries                  array of:    varies          //
410.1390 +                    // * * Offsets                      DWORD        varies          // An offset value of 0xffffffff indicates an invalid offset value
410.1391 +
410.1392 +                    // shortcut
410.1393 +                    $info_asf['asf_index_object'] = array ();
410.1394 +                    $info_asf_asf_index_object      = &$info_asf['asf_index_object'];
410.1395 +
410.1396 +                    $asf_index_object_data = $next_object_data_header.fread($getid3->fp, 34 - 24);
410.1397 +
410.1398 +                    $info_asf_asf_index_object['objectid_guid'] = $next_object_guidtext;
410.1399 +                    $info_asf_asf_index_object['objectsize']    = $next_object_size;
410.1400 +
410.1401 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_asf_asf_index_object, $asf_index_object_data, 24, 
410.1402 +                        array (
410.1403 +                            'entry_time_interval'    =>4,
410.1404 +                            'index_specifiers_count' =>2,
410.1405 +                            'index_blocks_count'     =>4
410.1406 +                        )
410.1407 +                    );
410.1408 +
410.1409 +                    $offset = 34;
410.1410 +
410.1411 +                    $asf_index_object_data .= fread($getid3->fp, 4 * $info_asf_asf_index_object['index_specifiers_count']);
410.1412 +                    
410.1413 +                    for ($index_specifiers_counter = 0; $index_specifiers_counter < $info_asf_asf_index_object['index_specifiers_count']; $index_specifiers_counter++) {
410.1414 +                    
410.1415 +                        $index_specifier_stream_number = getid3_lib::LittleEndian2Int(substr($asf_index_object_data, $offset, 2));
410.1416 +                        $offset += 2;
410.1417 +                        
410.1418 +                        $info_asf_asf_index_object['index_specifiers'][$index_specifiers_counter]['stream_number']   = $index_specifier_stream_number;
410.1419 +                        
410.1420 +                        $info_asf_asf_index_object['index_specifiers'][$index_specifiers_counter]['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_index_object_data, $offset, 2));
410.1421 +                        $offset += 2;
410.1422 +                        
410.1423 +                        $info_asf_asf_index_object['index_specifiers'][$index_specifiers_counter]['index_type_text'] = getid3_asf::ASFIndexObjectIndexTypeLookup($info_asf_asf_index_object['index_specifiers'][$index_specifiers_counter]['index_type']);
410.1424 +                    }
410.1425 +
410.1426 +                    $asf_index_object_data .= fread($getid3->fp, 4);
410.1427 +                    $info_asf_asf_index_object['index_entry_count'] = getid3_lib::LittleEndian2Int(substr($asf_index_object_data, $offset, 4));
410.1428 +                    $offset += 4;
410.1429 +
410.1430 +                    $asf_index_object_data .= fread($getid3->fp, 8 * $info_asf_asf_index_object['index_specifiers_count']);
410.1431 +                    
410.1432 +                    for ($index_specifiers_counter = 0; $index_specifiers_counter < $info_asf_asf_index_object['index_specifiers_count']; $index_specifiers_counter++) {
410.1433 +                        $info_asf_asf_index_object['block_positions'][$index_specifiers_counter] = getid3_lib::LittleEndian2Int(substr($asf_index_object_data, $offset, 8));
410.1434 +                        $offset += 8;
410.1435 +                    }
410.1436 +
410.1437 +                    $asf_index_object_data .= fread($getid3->fp, 4 * $info_asf_asf_index_object['index_specifiers_count'] * $info_asf_asf_index_object['index_entry_count']);
410.1438 +                    
410.1439 +                    for ($index_entry_counter = 0; $index_entry_counter < $info_asf_asf_index_object['index_entry_count']; $index_entry_counter++) {
410.1440 +                        for ($index_specifiers_counter = 0; $index_specifiers_counter < $info_asf_asf_index_object['index_specifiers_count']; $index_specifiers_counter++) {
410.1441 +                            $info_asf_asf_index_object['offsets'][$index_specifiers_counter][$index_entry_counter] = getid3_lib::LittleEndian2Int(substr($asf_index_object_data, $offset, 4));
410.1442 +                            $offset += 4;
410.1443 +                        }
410.1444 +                    }
410.1445 +                    break;
410.1446 +
410.1447 +
410.1448 +                default:
410.1449 +                    
410.1450 +                    // Implementations shall ignore any standard or non-standard object that they do not know how to handle.
410.1451 +                    if (getid3_asf::GUIDname($next_object_guidtext)) {
410.1452 +                        $getid3->warning('unhandled GUID "'.getid3_asf::GUIDname($next_object_guidtext).'" {'.$next_object_guidtext.'} in ASF body at offset '.($offset - 16 - 8));
410.1453 +                    } else {
410.1454 +                        $getid3->warning('unknown GUID {'.$next_object_guidtext.'} in ASF body at offset '.(ftell($getid3->fp) - 16 - 8));
410.1455 +                    }
410.1456 +                    fseek($getid3->fp, ($next_object_size - 16 - 8), SEEK_CUR);
410.1457 +                    break;
410.1458 +            }
410.1459 +        }
410.1460 +
410.1461 +        if (isset($info_asf_codec_list_object['codec_entries']) && is_array($info_asf_codec_list_object['codec_entries'])) {
410.1462 +            foreach ($info_asf_codec_list_object['codec_entries'] as $stream_number => $stream_data) {
410.1463 +                switch ($stream_data['information']) {
410.1464 +                    case 'WMV1':
410.1465 +                    case 'WMV2':
410.1466 +                    case 'WMV3':
410.1467 +                    case 'MSS1':
410.1468 +                    case 'MSS2':
410.1469 +                    case 'WMVA':
410.1470 +                    case 'WVC1':
410.1471 +                    case 'WMVP':
410.1472 +                    case 'WVP2': 
410.1473 +                        $info_video['dataformat'] = 'wmv';
410.1474 +                        $getid3->info['mime_type']    = 'video/x-ms-wmv';
410.1475 +                        break;
410.1476 +
410.1477 +                    case 'MP42':
410.1478 +                    case 'MP43':
410.1479 +                    case 'MP4S':
410.1480 +                    case 'mp4s':
410.1481 +                        $info_video['dataformat'] = 'asf';
410.1482 +                        $getid3->info['mime_type']    = 'video/x-ms-asf';
410.1483 +                        break;
410.1484 +
410.1485 +                    default:
410.1486 +                        switch ($stream_data['type_raw']) {
410.1487 +                            case 1:
410.1488 +                                if (strstr($this->TrimConvert($stream_data['name']), 'Windows Media')) {
410.1489 +                                    $info_video['dataformat'] = 'wmv';
410.1490 +                                    if ($getid3->info['mime_type'] == 'video/x-ms-asf') {
410.1491 +                                        $getid3->info['mime_type'] = 'video/x-ms-wmv';
410.1492 +                                    }
410.1493 +                                }
410.1494 +                                break;
410.1495 +
410.1496 +                            case 2:
410.1497 +                                if (strstr($this->TrimConvert($stream_data['name']), 'Windows Media')) {
410.1498 +                                    $info_audio['dataformat'] = 'wma';
410.1499 +                                    if ($getid3->info['mime_type'] == 'video/x-ms-asf') {
410.1500 +                                        $getid3->info['mime_type'] = 'audio/x-ms-wma';
410.1501 +                                    }
410.1502 +                                }
410.1503 +                                break;
410.1504 +
410.1505 +                        }
410.1506 +                        break;
410.1507 +                }
410.1508 +            }
410.1509 +        }
410.1510 +
410.1511 +        switch (@$info_audio['codec']) {
410.1512 +            case 'MPEG Layer-3':
410.1513 +                $info_audio['dataformat'] = 'mp3';
410.1514 +                break;
410.1515 +
410.1516 +            default:
410.1517 +                break;
410.1518 +        }
410.1519 +
410.1520 +        if (isset($info_asf_codec_list_object['codec_entries'])) {
410.1521 +            foreach ($info_asf_codec_list_object['codec_entries'] as $stream_number => $stream_data) {
410.1522 +                switch ($stream_data['type_raw']) {
410.1523 +
410.1524 +                    case 1: // video
410.1525 +                        $info_video['encoder'] = $this->TrimConvert($info_asf_codec_list_object['codec_entries'][$stream_number]['name']);
410.1526 +                        break;
410.1527 +
410.1528 +                    case 2: // audio
410.1529 +                        $info_audio['encoder']         = $this->TrimConvert($info_asf_codec_list_object['codec_entries'][$stream_number]['name']);
410.1530 +                        $info_audio['encoder_options'] = $this->TrimConvert($info_asf_codec_list_object['codec_entries'][0]['description']);
410.1531 +                        $info_audio['codec']           = $info_audio['encoder'];
410.1532 +                        break;
410.1533 +
410.1534 +                    default:
410.1535 +                        $getid3->warning('Unknown streamtype: [codec_list_object][codec_entries]['.$stream_number.'][type_raw] == '.$stream_data['type_raw']);
410.1536 +                        break;
410.1537 +
410.1538 +                }
410.1539 +            }
410.1540 +        }
410.1541 +
410.1542 +        if (isset($getid3->info['audio'])) {
410.1543 +            $info_audio['lossless']           = (isset($info_audio['lossless'])           ? $info_audio['lossless']           : false);
410.1544 +            $info_audio['dataformat']         = (!empty($info_audio['dataformat'])        ? $info_audio['dataformat']         : 'asf');
410.1545 +        }
410.1546 +        
410.1547 +        if (!empty($info_video['dataformat'])) {
410.1548 +            $info_video['lossless']           = (isset($info_audio['lossless'])           ? $info_audio['lossless']           : false);
410.1549 +            $info_video['pixel_aspect_ratio'] = (isset($info_audio['pixel_aspect_ratio']) ? $info_audio['pixel_aspect_ratio'] : (float)1);
410.1550 +            $info_video['dataformat']         = (!empty($info_video['dataformat'])        ? $info_video['dataformat']         : 'asf');
410.1551 +        }
410.1552 +        
410.1553 +        $getid3->info['bitrate'] = @$info_audio['bitrate'] + @$info_video['bitrate'];
410.1554 +              
410.1555 +        if (empty($info_audio)) {
410.1556 +            unset($getid3->info['audio']);
410.1557 +        }
410.1558 +        
410.1559 +        if (empty($info_video)) {
410.1560 +            unset($getid3->info['video']);
410.1561 +        }
410.1562 +        
410.1563 +        return true;
410.1564 +    }
410.1565 +
410.1566 +
410.1567 +  
410.1568 +    // Remove terminator 00 00 and convert UNICODE to Latin-1
410.1569 +    private function TrimConvert($string) {
410.1570 +        
410.1571 +        // remove terminator, only if present (it should be, but...)
410.1572 +        if (substr($string, strlen($string) - 2, 2) == "\x00\x00") {
410.1573 +            $string = substr($string, 0, strlen($string) - 2);
410.1574 +        }
410.1575 +
410.1576 +        // convert
410.1577 +        return trim($this->getid3->iconv('UTF-16LE', 'ISO-8859-1', $string), ' ');
410.1578 +    }
410.1579 +
410.1580 +
410.1581 +
410.1582 +    private function WMpictureTypeLookup($wm_picture_type) {
410.1583 +        
410.1584 +        static $lookup = array (
410.1585 +            0x03 => 'Front Cover',
410.1586 +            0x04 => 'Back Cover',
410.1587 +            0x00 => 'User Defined',
410.1588 +            0x05 => 'Leaflet Page',
410.1589 +            0x06 => 'Media Label',
410.1590 +            0x07 => 'Lead Artist',
410.1591 +            0x08 => 'Artist',
410.1592 +            0x09 => 'Conductor',
410.1593 +            0x0A => 'Band',
410.1594 +            0x0B => 'Composer',
410.1595 +            0x0C => 'Lyricist',
410.1596 +            0x0D => 'Recording Location',
410.1597 +            0x0E => 'During Recording',
410.1598 +            0x0F => 'During Performance',
410.1599 +            0x10 => 'Video Screen Capture',
410.1600 +            0x12 => 'Illustration',
410.1601 +            0x13 => 'Band Logotype',
410.1602 +            0x14 => 'Publisher Logotype'
410.1603 +        );
410.1604 +        
410.1605 +        return isset($lookup[$wm_picture_type]) ? $this->getid3->iconv('ISO-8859-1', 'UTF-16LE', $lookup[$wm_picture_type]) : '';
410.1606 +    }
410.1607 +
410.1608 +
410.1609 +
410.1610 +    public static function ASFCodecListObjectTypeLookup($codec_list_type) {
410.1611 +        
410.1612 +        static $lookup = array (
410.1613 +            0x0001 => 'Video Codec',
410.1614 +            0x0002 => 'Audio Codec',
410.1615 +            0xFFFF => 'Unknown Codec'
410.1616 +        );
410.1617 +
410.1618 +        return (isset($lookup[$codec_list_type]) ? $lookup[$codec_list_type] : 'Invalid Codec Type');
410.1619 +    }
410.1620 +
410.1621 +
410.1622 +
410.1623 +    public static function GUIDname($guid_string) {
410.1624 +        
410.1625 +        static $lookup = array (
410.1626 +            getid3_asf::Extended_Stream_Properties_Object   => 'Extended_Stream_Properties_Object',   
410.1627 +            getid3_asf::Padding_Object                      => 'Padding_Object',                      
410.1628 +            getid3_asf::Payload_Ext_Syst_Pixel_Aspect_Ratio => 'Payload_Ext_Syst_Pixel_Aspect_Ratio', 
410.1629 +            getid3_asf::Script_Command_Object               => 'Script_Command_Object',               
410.1630 +            getid3_asf::No_Error_Correction                 => 'No_Error_Correction',                 
410.1631 +            getid3_asf::Content_Branding_Object             => 'Content_Branding_Object',             
410.1632 +            getid3_asf::Content_Encryption_Object           => 'Content_Encryption_Object',           
410.1633 +            getid3_asf::Digital_Signature_Object            => 'Digital_Signature_Object',            
410.1634 +            getid3_asf::Extended_Content_Encryption_Object  => 'Extended_Content_Encryption_Object',  
410.1635 +            getid3_asf::Simple_Index_Object                 => 'Simple_Index_Object',                 
410.1636 +            getid3_asf::Degradable_JPEG_Media               => 'Degradable_JPEG_Media',               
410.1637 +            getid3_asf::Payload_Extension_System_Timecode   => 'Payload_Extension_System_Timecode',   
410.1638 +            getid3_asf::Binary_Media                        => 'Binary_Media',                        
410.1639 +            getid3_asf::Timecode_Index_Object               => 'Timecode_Index_Object',               
410.1640 +            getid3_asf::Metadata_Library_Object             => 'Metadata_Library_Object',             
410.1641 +            getid3_asf::Reserved_3                          => 'Reserved_3',                          
410.1642 +            getid3_asf::Reserved_4                          => 'Reserved_4',                          
410.1643 +            getid3_asf::Command_Media                       => 'Command_Media',                       
410.1644 +            getid3_asf::Header_Extension_Object             => 'Header_Extension_Object',             
410.1645 +            getid3_asf::Media_Object_Index_Parameters_Obj   => 'Media_Object_Index_Parameters_Obj',   
410.1646 +            getid3_asf::Header_Object                       => 'Header_Object',                       
410.1647 +            getid3_asf::Content_Description_Object          => 'Content_Description_Object',          
410.1648 +            getid3_asf::Error_Correction_Object             => 'Error_Correction_Object',             
410.1649 +            getid3_asf::Data_Object                         => 'Data_Object',                         
410.1650 +            getid3_asf::Web_Stream_Media_Subtype            => 'Web_Stream_Media_Subtype',            
410.1651 +            getid3_asf::Stream_Bitrate_Properties_Object    => 'Stream_Bitrate_Properties_Object',    
410.1652 +            getid3_asf::Language_List_Object                => 'Language_List_Object',                
410.1653 +            getid3_asf::Codec_List_Object                   => 'Codec_List_Object',                   
410.1654 +            getid3_asf::Reserved_2                          => 'Reserved_2',                          
410.1655 +            getid3_asf::File_Properties_Object              => 'File_Properties_Object',              
410.1656 +            getid3_asf::File_Transfer_Media                 => 'File_Transfer_Media',                 
410.1657 +            getid3_asf::Old_RTP_Extension_Data              => 'Old_RTP_Extension_Data',              
410.1658 +            getid3_asf::Advanced_Mutual_Exclusion_Object    => 'Advanced_Mutual_Exclusion_Object',    
410.1659 +            getid3_asf::Bandwidth_Sharing_Object            => 'Bandwidth_Sharing_Object',            
410.1660 +            getid3_asf::Reserved_1                          => 'Reserved_1',                          
410.1661 +            getid3_asf::Bandwidth_Sharing_Exclusive         => 'Bandwidth_Sharing_Exclusive',         
410.1662 +            getid3_asf::Bandwidth_Sharing_Partial           => 'Bandwidth_Sharing_Partial',           
410.1663 +            getid3_asf::JFIF_Media                          => 'JFIF_Media',                          
410.1664 +            getid3_asf::Stream_Properties_Object            => 'Stream_Properties_Object',            
410.1665 +            getid3_asf::Video_Media                         => 'Video_Media',                         
410.1666 +            getid3_asf::Audio_Spread                        => 'Audio_Spread',                        
410.1667 +            getid3_asf::Metadata_Object                     => 'Metadata_Object',                     
410.1668 +            getid3_asf::Payload_Ext_Syst_Sample_Duration    => 'Payload_Ext_Syst_Sample_Duration',    
410.1669 +            getid3_asf::Group_Mutual_Exclusion_Object       => 'Group_Mutual_Exclusion_Object',       
410.1670 +            getid3_asf::Extended_Content_Description_Object => 'Extended_Content_Description_Object', 
410.1671 +            getid3_asf::Stream_Prioritization_Object        => 'Stream_Prioritization_Object',        
410.1672 +            getid3_asf::Payload_Ext_System_Content_Type     => 'Payload_Ext_System_Content_Type',     
410.1673 +            getid3_asf::Old_File_Properties_Object          => 'Old_File_Properties_Object',          
410.1674 +            getid3_asf::Old_ASF_Header_Object               => 'Old_ASF_Header_Object',               
410.1675 +            getid3_asf::Old_ASF_Data_Object                 => 'Old_ASF_Data_Object',                 
410.1676 +            getid3_asf::Index_Object                        => 'Index_Object',                        
410.1677 +            getid3_asf::Old_Stream_Properties_Object        => 'Old_Stream_Properties_Object',        
410.1678 +            getid3_asf::Old_Content_Description_Object      => 'Old_Content_Description_Object',      
410.1679 +            getid3_asf::Old_Script_Command_Object           => 'Old_Script_Command_Object',           
410.1680 +            getid3_asf::Old_Marker_Object                   => 'Old_Marker_Object',                   
410.1681 +            getid3_asf::Old_Component_Download_Object       => 'Old_Component_Download_Object',       
410.1682 +            getid3_asf::Old_Stream_Group_Object             => 'Old_Stream_Group_Object',             
410.1683 +            getid3_asf::Old_Scalable_Object                 => 'Old_Scalable_Object',                 
410.1684 +            getid3_asf::Old_Prioritization_Object           => 'Old_Prioritization_Object',           
410.1685 +            getid3_asf::Bitrate_Mutual_Exclusion_Object     => 'Bitrate_Mutual_Exclusion_Object',     
410.1686 +            getid3_asf::Old_Inter_Media_Dependency_Object   => 'Old_Inter_Media_Dependency_Object',   
410.1687 +            getid3_asf::Old_Rating_Object                   => 'Old_Rating_Object',                   
410.1688 +            getid3_asf::Index_Parameters_Object             => 'Index_Parameters_Object',             
410.1689 +            getid3_asf::Old_Color_Table_Object              => 'Old_Color_Table_Object',              
410.1690 +            getid3_asf::Old_Language_List_Object            => 'Old_Language_List_Object',            
410.1691 +            getid3_asf::Old_Audio_Media                     => 'Old_Audio_Media',                     
410.1692 +            getid3_asf::Old_Video_Media                     => 'Old_Video_Media',                     
410.1693 +            getid3_asf::Old_Image_Media                     => 'Old_Image_Media',                     
410.1694 +            getid3_asf::Old_Timecode_Media                  => 'Old_Timecode_Media',                  
410.1695 +            getid3_asf::Old_Text_Media                      => 'Old_Text_Media',                      
410.1696 +            getid3_asf::Old_MIDI_Media                      => 'Old_MIDI_Media',                      
410.1697 +            getid3_asf::Old_Command_Media                   => 'Old_Command_Media',                   
410.1698 +            getid3_asf::Old_No_Error_Concealment            => 'Old_No_Error_Concealment',            
410.1699 +            getid3_asf::Old_Scrambled_Audio                 => 'Old_Scrambled_Audio',                 
410.1700 +            getid3_asf::Old_No_Color_Table                  => 'Old_No_Color_Table',                  
410.1701 +            getid3_asf::Old_SMPTE_Time                      => 'Old_SMPTE_Time',                      
410.1702 +            getid3_asf::Old_ASCII_Text                      => 'Old_ASCII_Text',                      
410.1703 +            getid3_asf::Old_Unicode_Text                    => 'Old_Unicode_Text',                    
410.1704 +            getid3_asf::Old_HTML_Text                       => 'Old_HTML_Text',                       
410.1705 +            getid3_asf::Old_URL_Command                     => 'Old_URL_Command',                     
410.1706 +            getid3_asf::Old_Filename_Command                => 'Old_Filename_Command',                
410.1707 +            getid3_asf::Old_ACM_Codec                       => 'Old_ACM_Codec',                       
410.1708 +            getid3_asf::Old_VCM_Codec                       => 'Old_VCM_Codec',                       
410.1709 +            getid3_asf::Old_QuickTime_Codec                 => 'Old_QuickTime_Codec',                 
410.1710 +            getid3_asf::Old_DirectShow_Transform_Filter     => 'Old_DirectShow_Transform_Filter',     
410.1711 +            getid3_asf::Old_DirectShow_Rendering_Filter     => 'Old_DirectShow_Rendering_Filter',     
410.1712 +            getid3_asf::Old_No_Enhancement                  => 'Old_No_Enhancement',                  
410.1713 +            getid3_asf::Old_Unknown_Enhancement_Type        => 'Old_Unknown_Enhancement_Type',        
410.1714 +            getid3_asf::Old_Temporal_Enhancement            => 'Old_Temporal_Enhancement',            
410.1715 +            getid3_asf::Old_Spatial_Enhancement             => 'Old_Spatial_Enhancement',             
410.1716 +            getid3_asf::Old_Quality_Enhancement             => 'Old_Quality_Enhancement',             
410.1717 +            getid3_asf::Old_Number_of_Channels_Enhancement  => 'Old_Number_of_Channels_Enhancement',  
410.1718 +            getid3_asf::Old_Frequency_Response_Enhancement  => 'Old_Frequency_Response_Enhancement',  
410.1719 +            getid3_asf::Old_Media_Object                    => 'Old_Media_Object',                    
410.1720 +            getid3_asf::Mutex_Language                      => 'Mutex_Language',                      
410.1721 +            getid3_asf::Mutex_Bitrate                       => 'Mutex_Bitrate',                       
410.1722 +            getid3_asf::Mutex_Unknown                       => 'Mutex_Unknown',                       
410.1723 +            getid3_asf::Old_ASF_Placeholder_Object          => 'Old_ASF_Placeholder_Object',          
410.1724 +            getid3_asf::Old_Data_Unit_Extension_Object      => 'Old_Data_Unit_Extension_Object',      
410.1725 +            getid3_asf::Web_Stream_Format                   => 'Web_Stream_Format',                   
410.1726 +            getid3_asf::Payload_Ext_System_File_Name        => 'Payload_Ext_System_File_Name',        
410.1727 +            getid3_asf::Marker_Object                       => 'Marker_Object',                       
410.1728 +            getid3_asf::Timecode_Index_Parameters_Object    => 'Timecode_Index_Parameters_Object',    
410.1729 +            getid3_asf::Audio_Media                         => 'Audio_Media',                         
410.1730 +            getid3_asf::Media_Object_Index_Object           => 'Media_Object_Index_Object',           
410.1731 +            getid3_asf::Alt_Extended_Content_Encryption_Obj => 'Alt_Extended_Content_Encryption_Obj'  
410.1732 +        );
410.1733 +        
410.1734 +        return @$lookup[$guid_string];
410.1735 +    }
410.1736 +
410.1737 +
410.1738 +
410.1739 +    public static function ASFIndexObjectIndexTypeLookup($id) {
410.1740 +        
410.1741 +        static $lookup = array (
410.1742 +            1 => 'Nearest Past Data Packet',
410.1743 +            2 => 'Nearest Past Media Object',
410.1744 +            3 => 'Nearest Past Cleanpoint'
410.1745 +        );
410.1746 +
410.1747 +        return (isset($lookup[$id]) ? $lookup[$id] : 'invalid');
410.1748 +    }
410.1749 +
410.1750 +
410.1751 +
410.1752 +    public static function GUIDtoBytestring($guid_string) {
410.1753 +        
410.1754 +        // Microsoft defines these 16-byte (128-bit) GUIDs in the strangest way:
410.1755 +        // first 4 bytes are in little-endian order
410.1756 +        // next 2 bytes are appended in little-endian order
410.1757 +        // next 2 bytes are appended in little-endian order
410.1758 +        // next 2 bytes are appended in big-endian order
410.1759 +        // next 6 bytes are appended in big-endian order
410.1760 +
410.1761 +        // AaBbCcDd-EeFf-GgHh-IiJj-KkLlMmNnOoPp is stored as this 16-byte string:
410.1762 +        // $Dd $Cc $Bb $Aa $Ff $Ee $Hh $Gg $Ii $Jj $Kk $Ll $Mm $Nn $Oo $Pp
410.1763 +
410.1764 +        $hex_byte_char_string  = chr(hexdec(substr($guid_string,  6, 2)));
410.1765 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string,  4, 2)));
410.1766 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string,  2, 2)));
410.1767 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string,  0, 2)));
410.1768 +
410.1769 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 11, 2)));
410.1770 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string,  9, 2)));
410.1771 +
410.1772 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 16, 2)));
410.1773 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 14, 2)));
410.1774 +
410.1775 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 19, 2)));
410.1776 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 21, 2)));
410.1777 +
410.1778 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 24, 2)));
410.1779 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 26, 2)));
410.1780 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 28, 2)));
410.1781 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 30, 2)));
410.1782 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 32, 2)));
410.1783 +        $hex_byte_char_string .= chr(hexdec(substr($guid_string, 34, 2)));
410.1784 +
410.1785 +        return $hex_byte_char_string;
410.1786 +    }
410.1787 +
410.1788 +
410.1789 +
410.1790 +    public static function BytestringToGUID($byte_string) {
410.1791 +        
410.1792 +        $guid_string  = str_pad(dechex(ord($byte_string{3})),  2, '0', STR_PAD_LEFT);
410.1793 +        $guid_string .= str_pad(dechex(ord($byte_string{2})),  2, '0', STR_PAD_LEFT);
410.1794 +        $guid_string .= str_pad(dechex(ord($byte_string{1})),  2, '0', STR_PAD_LEFT);
410.1795 +        $guid_string .= str_pad(dechex(ord($byte_string{0})),  2, '0', STR_PAD_LEFT);
410.1796 +        $guid_string .= '-';
410.1797 +        $guid_string .= str_pad(dechex(ord($byte_string{5})),  2, '0', STR_PAD_LEFT);
410.1798 +        $guid_string .= str_pad(dechex(ord($byte_string{4})),  2, '0', STR_PAD_LEFT);
410.1799 +        $guid_string .= '-';
410.1800 +        $guid_string .= str_pad(dechex(ord($byte_string{7})),  2, '0', STR_PAD_LEFT);
410.1801 +        $guid_string .= str_pad(dechex(ord($byte_string{6})),  2, '0', STR_PAD_LEFT);
410.1802 +        $guid_string .= '-';
410.1803 +        $guid_string .= str_pad(dechex(ord($byte_string{8})),  2, '0', STR_PAD_LEFT);
410.1804 +        $guid_string .= str_pad(dechex(ord($byte_string{9})),  2, '0', STR_PAD_LEFT);
410.1805 +        $guid_string .= '-';
410.1806 +        $guid_string .= str_pad(dechex(ord($byte_string{10})), 2, '0', STR_PAD_LEFT);
410.1807 +        $guid_string .= str_pad(dechex(ord($byte_string{11})), 2, '0', STR_PAD_LEFT);
410.1808 +        $guid_string .= str_pad(dechex(ord($byte_string{12})), 2, '0', STR_PAD_LEFT);
410.1809 +        $guid_string .= str_pad(dechex(ord($byte_string{13})), 2, '0', STR_PAD_LEFT);
410.1810 +        $guid_string .= str_pad(dechex(ord($byte_string{14})), 2, '0', STR_PAD_LEFT);
410.1811 +        $guid_string .= str_pad(dechex(ord($byte_string{15})), 2, '0', STR_PAD_LEFT);
410.1812 +
410.1813 +        return strtoupper($guid_string);
410.1814 +    }
410.1815 +
410.1816 +
410.1817 +
410.1818 +    public static function FiletimeToUNIXtime($file_time, $round=true) {
410.1819 +        
410.1820 +        // FILETIME is a 64-bit unsigned integer representing
410.1821 +        // the number of 100-nanosecond intervals since January 1, 1601
410.1822 +        // UNIX timestamp is number of seconds since January 1, 1970
410.1823 +        // 116444736000000000 = 10000000 * 60 * 60 * 24 * 365 * 369 + 89 leap days
410.1824 +        
410.1825 +        $time = ($file_time - 116444736000000000) / 10000000;
410.1826 +        
410.1827 +        if ($round) {
410.1828 +            return intval(round($time));
410.1829 +        }
410.1830 +        
410.1831 +        return $time;
410.1832 +    }
410.1833 +
410.1834 +
410.1835 +
410.1836 +    public static function TrimTerm($string) {
410.1837 +
410.1838 +        // remove terminator, only if present (it should be, but...)
410.1839 +        if (substr($string, -2) == "\x00\x00") {
410.1840 +            $string = substr($string, 0, -2);
410.1841 +        }
410.1842 +        return $string;
410.1843 +    }
410.1844 +
410.1845 +
410.1846 +}
410.1847 +
410.1848 +
410.1849 +?>
410.1850 \ No newline at end of file
   411.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   411.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.flv.php	Mon Feb 22 08:02:39 2010 -0500
   411.3 @@ -0,0 +1,574 @@
   411.4 +<?php
   411.5 +// +----------------------------------------------------------------------+
   411.6 +// | PHP version 5                                                        |
   411.7 +// +----------------------------------------------------------------------+
   411.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   411.9 +// +----------------------------------------------------------------------+
  411.10 +// | This source file is subject to version 2 of the GPL license,         |
  411.11 +// | that is bundled with this package in the file license.txt and is     |
  411.12 +// | available through the world-wide-web at the following url:           |
  411.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  411.14 +// +----------------------------------------------------------------------+
  411.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  411.16 +// +----------------------------------------------------------------------+
  411.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  411.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  411.19 +// +----------------------------------------------------------------------+
  411.20 +// | module.archive.gzip.php                                              |
  411.21 +// | module for analyzing GZIP files                                      |
  411.22 +// | dependencies: NONE                                                   |
  411.23 +// +----------------------------------------------------------------------+
  411.24 +// | FLV module by Seth Kaufman <sethØwhirl-i.gig*com>                    |
  411.25 +// |                                                                      |
  411.26 +// | * version 0.1 (26 June 2005)                                         |
  411.27 +// |                                                                      |
  411.28 +// | minor modifications by James Heinrich <infoØgetid3*org>              |
  411.29 +// | * version 0.1.1 (15 July 2005)                                       |
  411.30 +// |                                                                      |
  411.31 +// | Support for On2 VP6 codec and meta information by                    |
  411.32 +// | Steve Webster <steve.websterØfeaturecreep*com>                       |
  411.33 +// | * version 0.2 (22 February 2006)                                     |
  411.34 +// |                                                                      |
  411.35 +// | Modified to not read entire file into memory                         |
  411.36 +// | by James Heinrich <infoØgetid3*org>                                  |
  411.37 +// | * version 0.3 (15 June 2006)                                         |
  411.38 +// |                                                                      |
  411.39 +// | Modifications by Allan Hansen <ahØartemis*dk>                        |
  411.40 +// | Adapted module for PHP5 and getID3 2.0.0.                            |
  411.41 +// +----------------------------------------------------------------------+
  411.42 +//
  411.43 +// $Id: module.audio-video.flv.php,v 1.7 2006/11/10 11:20:12 ah Exp $
  411.44 +
  411.45 +
  411.46 +
  411.47 +class getid3_flv extends getid3_handler
  411.48 +{
  411.49 +    
  411.50 +    const TAG_AUDIO    =  8;
  411.51 +    const TAG_VIDEO    =  9;
  411.52 +    const TAG_META     = 18;
  411.53 +
  411.54 +    const VIDEO_H263   = 2;
  411.55 +    const VIDEO_SCREEN = 3;
  411.56 +    const VIDEO_VP6    = 4;
  411.57 +
  411.58 +    
  411.59 +	public function Analyze()
  411.60 +	{
  411.61 +	    $info = &$this->getid3->info;
  411.62 +	    
  411.63 +	    $info['flv'] = array ();
  411.64 +	    $info_flv = &$info['flv'];
  411.65 +	    
  411.66 +		fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET);
  411.67 +
  411.68 +		$flv_data_length = $info['avdataend'] - $info['avdataoffset'];
  411.69 +		$flv_header = fread($this->getid3->fp, 5);
  411.70 +
  411.71 +		$info['fileformat'] = 'flv';
  411.72 +		$info_flv['header']['signature'] =                           substr($flv_header, 0, 3);
  411.73 +		$info_flv['header']['version']   = getid3_lib::BigEndian2Int(substr($flv_header, 3, 1));
  411.74 +		$type_flags                      = getid3_lib::BigEndian2Int(substr($flv_header, 4, 1));
  411.75 +
  411.76 +		$info_flv['header']['hasAudio'] = (bool) ($type_flags & 0x04);
  411.77 +		$info_flv['header']['hasVideo'] = (bool) ($type_flags & 0x01);
  411.78 +
  411.79 +		$frame_size_data_length = getid3_lib::BigEndian2Int(fread($this->getid3->fp, 4));
  411.80 +		$flv_header_frame_length = 9;
  411.81 +		if ($frame_size_data_length > $flv_header_frame_length) {
  411.82 +			fseek($this->getid3->fp, $frame_size_data_length - $flv_header_frame_length, SEEK_CUR);
  411.83 +		}
  411.84 +
  411.85 +		$duration = 0;
  411.86 +		while ((ftell($this->getid3->fp) + 1) < $info['avdataend']) {
  411.87 +			
  411.88 +			$this_tag_header = fread($this->getid3->fp, 16);
  411.89 +
  411.90 +			$previous_tag_length = getid3_lib::BigEndian2Int(substr($this_tag_header,  0, 4));
  411.91 +			$tag_type            = getid3_lib::BigEndian2Int(substr($this_tag_header,  4, 1));
  411.92 +			$data_length         = getid3_lib::BigEndian2Int(substr($this_tag_header,  5, 3));
  411.93 +			$timestamp           = getid3_lib::BigEndian2Int(substr($this_tag_header,  8, 3));
  411.94 +			$last_header_byte    = getid3_lib::BigEndian2Int(substr($this_tag_header, 15, 1));
  411.95 +			$next_offset         = ftell($this->getid3->fp) - 1 + $data_length;
  411.96 +
  411.97 +			switch ($tag_type) {
  411.98 +				
  411.99 +				case getid3_flv::TAG_AUDIO:
 411.100 +					if (!isset($info_flv['audio']['audioFormat'])) {
 411.101 +						$info_flv['audio']['audioFormat']     =  $last_header_byte & 0x07;
 411.102 +						$info_flv['audio']['audioRate']       = ($last_header_byte & 0x30) / 0x10;
 411.103 +						$info_flv['audio']['audioSampleSize'] = ($last_header_byte & 0x40) / 0x40;
 411.104 +						$info_flv['audio']['audioType']       = ($last_header_byte & 0x80) / 0x80;
 411.105 +					}
 411.106 +					break;
 411.107 +
 411.108 +
 411.109 +				case getid3_flv::TAG_VIDEO:
 411.110 +					if (!isset($info_flv['video']['videoCodec'])) {
 411.111 +						$info_flv['video']['videoCodec'] = $last_header_byte & 0x07;
 411.112 +
 411.113 +						$flv_video_header = fread($this->getid3->fp, 11);
 411.114 +
 411.115 +						if ($info_flv['video']['videoCodec'] != getid3_flv::VIDEO_VP6) {
 411.116 +
 411.117 +							$picture_size_type = (getid3_lib::BigEndian2Int(substr($flv_video_header, 3, 2))) >> 7;
 411.118 +							$picture_size_type = $picture_size_type & 0x0007;
 411.119 +							$info_flv['header']['videoSizeType'] = $picture_size_type;
 411.120 +							
 411.121 +							switch ($picture_size_type) {
 411.122 +								case 0:
 411.123 +									$picture_size_enc = getid3_lib::BigEndian2Int(substr($flv_video_header, 5, 2));
 411.124 +									$picture_size_enc <<= 1;
 411.125 +									$info['video']['resolution_x'] = ($picture_size_enc & 0xFF00) >> 8;
 411.126 +									$picture_size_enc = getid3_lib::BigEndian2Int(substr($flv_video_header, 6, 2));
 411.127 +									$picture_size_enc <<= 1;
 411.128 +									$info['video']['resolution_y'] = ($picture_size_enc & 0xFF00) >> 8;
 411.129 +									break;
 411.130 +
 411.131 +								case 1:
 411.132 +									$picture_size_enc = getid3_lib::BigEndian2Int(substr($flv_video_header, 5, 4));
 411.133 +									$picture_size_enc <<= 1;
 411.134 +									$info['video']['resolution_x'] = ($picture_size_enc & 0xFFFF0000) >> 16;
 411.135 +
 411.136 +									$picture_size_enc = getid3_lib::BigEndian2Int(substr($flv_video_header, 7, 4));
 411.137 +									$picture_size_enc <<= 1;
 411.138 +									$info['video']['resolution_y'] = ($picture_size_enc & 0xFFFF0000) >> 16;
 411.139 +									break;
 411.140 +
 411.141 +								case 2:
 411.142 +									$info['video']['resolution_x'] = 352;
 411.143 +									$info['video']['resolution_y'] = 288;
 411.144 +									break;
 411.145 +
 411.146 +								case 3:
 411.147 +									$info['video']['resolution_x'] = 176;
 411.148 +									$info['video']['resolution_y'] = 144;
 411.149 +									break;
 411.150 +
 411.151 +								case 4:
 411.152 +									$info['video']['resolution_x'] = 128;
 411.153 +									$info['video']['resolution_y'] = 96;
 411.154 +									break;
 411.155 +
 411.156 +								case 5:
 411.157 +									$info['video']['resolution_x'] = 320;
 411.158 +									$info['video']['resolution_y'] = 240;
 411.159 +									break;
 411.160 +
 411.161 +								case 6:
 411.162 +									$info['video']['resolution_x'] = 160;
 411.163 +									$info['video']['resolution_y'] = 120;
 411.164 +									break;
 411.165 +
 411.166 +								default:
 411.167 +									$info['video']['resolution_x'] = 0;
 411.168 +									$info['video']['resolution_y'] = 0;
 411.169 +									break;
 411.170 +							}
 411.171 +						}
 411.172 +					}
 411.173 +					break;
 411.174 +
 411.175 +
 411.176 +				// Meta tag
 411.177 +				case getid3_flv::TAG_META:
 411.178 +
 411.179 +					fseek($this->getid3->fp, -1, SEEK_CUR);
 411.180 +					$reader = new AMFReader(new AMFStream(fread($this->getid3->fp, $data_length)));
 411.181 +					$event_name = $reader->readData();
 411.182 +					$info['meta'][$event_name] = $reader->readData();
 411.183 +					unset($reader);
 411.184 +
 411.185 +					$info['video']['frame_rate']   = @$info['meta']['onMetaData']['framerate'];
 411.186 +					$info['video']['resolution_x'] = @$info['meta']['onMetaData']['width'];
 411.187 +					$info['video']['resolution_y'] = @$info['meta']['onMetaData']['height'];
 411.188 +					break;
 411.189 +
 411.190 +				default:
 411.191 +					// noop
 411.192 +					break;
 411.193 +			}
 411.194 +
 411.195 +			if ($timestamp > $duration) {
 411.196 +				$duration = $timestamp;
 411.197 +			}
 411.198 +
 411.199 +			fseek($this->getid3->fp, $next_offset, SEEK_SET);
 411.200 +		}
 411.201 +
 411.202 +		if ($info['playtime_seconds'] = $duration / 1000) {
 411.203 +		    $info['bitrate'] = ($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds'];
 411.204 +		}
 411.205 +
 411.206 +		if ($info_flv['header']['hasAudio']) {
 411.207 +			$info['audio']['codec']           = $this->FLVaudioFormat($info_flv['audio']['audioFormat']);
 411.208 +			$info['audio']['sample_rate']     = $this->FLVaudioRate($info_flv['audio']['audioRate']);
 411.209 +			$info['audio']['bits_per_sample'] = $this->FLVaudioBitDepth($info_flv['audio']['audioSampleSize']);
 411.210 +
 411.211 +			$info['audio']['channels']   = $info_flv['audio']['audioType'] + 1; // 0=mono,1=stereo
 411.212 +			$info['audio']['lossless']   = ($info_flv['audio']['audioFormat'] ? false : true); // 0=uncompressed
 411.213 +			$info['audio']['dataformat'] = 'flv';
 411.214 +		}
 411.215 +		if (@$info_flv['header']['hasVideo']) {
 411.216 +			$info['video']['codec']      = $this->FLVvideoCodec($info_flv['video']['videoCodec']);
 411.217 +			$info['video']['dataformat'] = 'flv';
 411.218 +			$info['video']['lossless']   = false;
 411.219 +		}
 411.220 +
 411.221 +		return true;
 411.222 +	}
 411.223 +
 411.224 +
 411.225 +	public static function FLVaudioFormat($id) {
 411.226 +	    
 411.227 +		static $lookup = array(
 411.228 +			0 => 'uncompressed',
 411.229 +			1 => 'ADPCM',
 411.230 +			2 => 'mp3',
 411.231 +			5 => 'Nellymoser 8kHz mono',
 411.232 +			6 => 'Nellymoser',
 411.233 +		);
 411.234 +		return (@$lookup[$id] ? @$lookup[$id] : false);
 411.235 +	}
 411.236 +
 411.237 +
 411.238 +	public static function FLVaudioRate($id) {
 411.239 +	    
 411.240 +		static $lookup = array(
 411.241 +			0 =>  5500,
 411.242 +			1 => 11025,
 411.243 +			2 => 22050,
 411.244 +			3 => 44100,
 411.245 +		);
 411.246 +		return (@$lookup[$id] ? @$lookup[$id] : false);
 411.247 +	}
 411.248 +
 411.249 +
 411.250 +	public static function FLVaudioBitDepth($id) {
 411.251 +	    
 411.252 +		static $lookup = array(
 411.253 +			0 =>  8,
 411.254 +			1 => 16,
 411.255 +		);
 411.256 +		return (@$lookup[$id] ? @$lookup[$id] : false);
 411.257 +	}
 411.258 +
 411.259 +
 411.260 +	public static function FLVvideoCodec($id) {
 411.261 +	    
 411.262 +		static $lookup = array(
 411.263 +			getid3_flv::VIDEO_H263   => 'Sorenson H.263',
 411.264 +			getid3_flv::VIDEO_SCREEN => 'Screen video',
 411.265 +			getid3_flv::VIDEO_VP6    => 'On2 VP6',
 411.266 +		);
 411.267 +		return (@$lookup[$id] ? @$lookup[$id] : false);
 411.268 +	}
 411.269 +}
 411.270 +
 411.271 +
 411.272 +
 411.273 +class AMFStream 
 411.274 +{
 411.275 +	public $bytes;
 411.276 +	public $pos;
 411.277 +
 411.278 +
 411.279 +	public function AMFStream($bytes) {
 411.280 +	    
 411.281 +		$this->bytes = $bytes;
 411.282 +		$this->pos = 0;
 411.283 +	}
 411.284 +
 411.285 +
 411.286 +	public function readByte() {
 411.287 +	    
 411.288 +		return getid3_lib::BigEndian2Int(substr($this->bytes, $this->pos++, 1));
 411.289 +	}
 411.290 +
 411.291 +
 411.292 +	public function readInt() {
 411.293 +	    
 411.294 +		return ($this->readByte() << 8) + $this->readByte();
 411.295 +	}
 411.296 +
 411.297 +
 411.298 +	public function readLong() {
 411.299 +	    
 411.300 +		return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte();
 411.301 +	}
 411.302 +
 411.303 +
 411.304 +	public function readDouble() {
 411.305 +	    
 411.306 +		return getid3_lib::BigEndian2Float($this->read(8));
 411.307 +	}
 411.308 +
 411.309 +
 411.310 +	public function readUTF() {
 411.311 +	    
 411.312 +		$length = $this->readInt();
 411.313 +		return $this->read($length);
 411.314 +	}
 411.315 +
 411.316 +
 411.317 +	public function readLongUTF() {
 411.318 +	    
 411.319 +		$length = $this->readLong();
 411.320 +		return $this->read($length);
 411.321 +	}
 411.322 +
 411.323 +
 411.324 +	public function read($length) {
 411.325 +
 411.326 +		$val = substr($this->bytes, $this->pos, $length);
 411.327 +		$this->pos += $length;
 411.328 +		return $val;
 411.329 +	}
 411.330 +
 411.331 +	
 411.332 +	public function peekByte() {
 411.333 +	    
 411.334 +		$pos = $this->pos;
 411.335 +		$val = $this->readByte();
 411.336 +		$this->pos = $pos;
 411.337 +		return $val;
 411.338 +	}
 411.339 +
 411.340 +
 411.341 +	public function peekInt() {
 411.342 +
 411.343 +		$pos = $this->pos;
 411.344 +		$val = $this->readInt();
 411.345 +		$this->pos = $pos;
 411.346 +		return $val;
 411.347 +	}
 411.348 +
 411.349 +
 411.350 +	public function peekLong() {
 411.351 +	    
 411.352 +		$pos = $this->pos;
 411.353 +		$val = $this->readLong();
 411.354 +		$this->pos = $pos;
 411.355 +		return $val;
 411.356 +	}
 411.357 +
 411.358 +
 411.359 +	public function peekDouble() {  
 411.360 +	    
 411.361 +		$pos = $this->pos;
 411.362 +		$val = $this->readDouble();
 411.363 +		$this->pos = $pos;
 411.364 +		return $val;
 411.365 +	}
 411.366 +
 411.367 +
 411.368 +	public function peekUTF() {
 411.369 +	    
 411.370 +		$pos = $this->pos;
 411.371 +		$val = $this->readUTF();
 411.372 +		$this->pos = $pos;
 411.373 +		return $val;
 411.374 +	}
 411.375 +
 411.376 +
 411.377 +	public function peekLongUTF() {
 411.378 +	    
 411.379 +		$pos = $this->pos;
 411.380 +		$val = $this->readLongUTF();
 411.381 +		$this->pos = $pos;
 411.382 +		return $val;
 411.383 +	}
 411.384 +}
 411.385 +
 411.386 +
 411.387 +
 411.388 +class AMFReader 
 411.389 +{
 411.390 +	public $stream;
 411.391 +
 411.392 +	public function __construct($stream) {
 411.393 +	    
 411.394 +		$this->stream = $stream;
 411.395 +	}
 411.396 +
 411.397 +
 411.398 +	public function readData() {
 411.399 +	    
 411.400 +		$value = null;
 411.401 +
 411.402 +		$type = $this->stream->readByte();
 411.403 +
 411.404 +		switch($type) {
 411.405 +			// Double
 411.406 +			case 0:
 411.407 +				$value = $this->readDouble();
 411.408 +			break;
 411.409 +
 411.410 +			// Boolean
 411.411 +			case 1:
 411.412 +				$value = $this->readBoolean();
 411.413 +				break;
 411.414 +
 411.415 +			// String
 411.416 +			case 2:
 411.417 +				$value = $this->readString();
 411.418 +				break;
 411.419 +
 411.420 +			// Object
 411.421 +			case 3:
 411.422 +				$value = $this->readObject();
 411.423 +				break;
 411.424 +
 411.425 +			// null
 411.426 +			case 6:
 411.427 +				return null;
 411.428 +				break;
 411.429 +
 411.430 +			// Mixed array
 411.431 +			case 8:
 411.432 +				$value = $this->readMixedArray();
 411.433 +				break;
 411.434 +
 411.435 +			// Array
 411.436 +			case 10:
 411.437 +				$value = $this->readArray();
 411.438 +				break;
 411.439 +
 411.440 +			// Date
 411.441 +			case 11:
 411.442 +				$value = $this->readDate();
 411.443 +				break;
 411.444 +
 411.445 +			// Long string
 411.446 +			case 13:
 411.447 +				$value = $this->readLongString();
 411.448 +				break;
 411.449 +
 411.450 +			// XML (handled as string)
 411.451 +			case 15:
 411.452 +				$value = $this->readXML();
 411.453 +				break;
 411.454 +
 411.455 +			// Typed object (handled as object)
 411.456 +			case 16:
 411.457 +				$value = $this->readTypedObject();
 411.458 +				break;
 411.459 +
 411.460 +			// Long string
 411.461 +			default:
 411.462 +				$value = '(unknown or unsupported data type)';
 411.463 +			break;
 411.464 +		}
 411.465 +
 411.466 +		return $value;
 411.467 +	}
 411.468 +
 411.469 +
 411.470 +	public function readDouble() {    
 411.471 +	    
 411.472 +		return $this->stream->readDouble();
 411.473 +	}
 411.474 +
 411.475 +
 411.476 +	public function readBoolean() {
 411.477 +	    
 411.478 +		return $this->stream->readByte() == 1;
 411.479 +	}
 411.480 +           
 411.481 +           
 411.482 +	public function readString() {
 411.483 +	    
 411.484 +		return $this->stream->readUTF();
 411.485 +	}
 411.486 +
 411.487 +
 411.488 +	public function readObject() {
 411.489 +	    
 411.490 +		// Get highest numerical index - ignored
 411.491 +		$highestIndex = $this->stream->readLong();
 411.492 +
 411.493 +		$data = array();
 411.494 +
 411.495 +		while ($key = $this->stream->readUTF()) {
 411.496 +			// Mixed array record ends with empty string (0x00 0x00) and 0x09
 411.497 +			if (($key == '') && ($this->stream->peekByte() == 0x09)) {
 411.498 +				// Consume byte
 411.499 +				$this->stream->readByte();
 411.500 +				break;
 411.501 +			}
 411.502 +
 411.503 +			$data[$key] = $this->readData();
 411.504 +		}
 411.505 +
 411.506 +		return $data;
 411.507 +	}
 411.508 +
 411.509 +
 411.510 +	public function readMixedArray() {
 411.511 +	    
 411.512 +		// Get highest numerical index - ignored
 411.513 +		$highestIndex = $this->stream->readLong();
 411.514 +
 411.515 +		$data = array();
 411.516 +
 411.517 +		while ($key = $this->stream->readUTF()) {
 411.518 +			// Mixed array record ends with empty string (0x00 0x00) and 0x09
 411.519 +			if (($key == '') && ($this->stream->peekByte() == 0x09)) {
 411.520 +				// Consume byte
 411.521 +				$this->stream->readByte();
 411.522 +				break;
 411.523 +			}
 411.524 +
 411.525 +			if (is_numeric($key)) {
 411.526 +				$key = (float) $key;
 411.527 +			}
 411.528 +
 411.529 +			$data[$key] = $this->readData();
 411.530 +		}
 411.531 +
 411.532 +		return $data;
 411.533 +	}
 411.534 +
 411.535 +
 411.536 +	public function readArray() {
 411.537 +	    
 411.538 +		$length = $this->stream->readLong();
 411.539 +
 411.540 +		$data = array();
 411.541 +
 411.542 +		for ($i = 0; $i < count($length); $i++) {
 411.543 +			$data[] = $this->readData();
 411.544 +		}
 411.545 +
 411.546 +		return $data;
 411.547 +	}
 411.548 +
 411.549 +
 411.550 +	public function readDate() {
 411.551 +	    
 411.552 +		$timestamp = $this->stream->readDouble();
 411.553 +		$timezone = $this->stream->readInt();
 411.554 +		return $timestamp;
 411.555 +	}
 411.556 +
 411.557 +
 411.558 +	public function readLongString() {
 411.559 +	    
 411.560 +		return $this->stream->readLongUTF();
 411.561 +	}
 411.562 +
 411.563 +
 411.564 +	public function readXML() {
 411.565 +	    
 411.566 +		return $this->stream->readLongUTF();
 411.567 +	}
 411.568 +
 411.569 +
 411.570 +	public function readTypedObject() {  
 411.571 +	    
 411.572 +		$className = $this->stream->readUTF();
 411.573 +		return $this->readObject();
 411.574 +	}
 411.575 +}
 411.576 +
 411.577 +?>
 411.578 \ No newline at end of file
   412.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   412.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.mpeg.php	Mon Feb 22 08:02:39 2010 -0500
   412.3 @@ -0,0 +1,324 @@
   412.4 +<?php
   412.5 +// +----------------------------------------------------------------------+
   412.6 +// | PHP version 5                                                        |
   412.7 +// +----------------------------------------------------------------------+
   412.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   412.9 +// +----------------------------------------------------------------------+
  412.10 +// | This source file is subject to version 2 of the GPL license,         |
  412.11 +// | that is bundled with this package in the file license.txt and is     |
  412.12 +// | available through the world-wide-web at the following url:           |
  412.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  412.14 +// +----------------------------------------------------------------------+
  412.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  412.16 +// +----------------------------------------------------------------------+
  412.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  412.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  412.19 +// +----------------------------------------------------------------------+
  412.20 +// | module.audio-video.mpeg.php                                          |
  412.21 +// | Module for analyzing MPEG files                                      |
  412.22 +// | dependencies: module.audio.mp3.php                                   |
  412.23 +// +----------------------------------------------------------------------+
  412.24 +//
  412.25 +// $Id: module.audio-video.mpeg.php,v 1.3 2006/11/02 10:48:00 ah Exp $
  412.26 +
  412.27 +        
  412.28 +        
  412.29 +class getid3_mpeg extends getid3_handler
  412.30 +{
  412.31 +
  412.32 +    const VIDEO_PICTURE_START   = "\x00\x00\x01\x00";
  412.33 +    const VIDEO_USER_DATA_START = "\x00\x00\x01\xB2";
  412.34 +    const VIDEO_SEQUENCE_HEADER = "\x00\x00\x01\xB3";
  412.35 +    const VIDEO_SEQUENCE_ERROR  = "\x00\x00\x01\xB4";
  412.36 +    const VIDEO_EXTENSION_START = "\x00\x00\x01\xB5";
  412.37 +    const VIDEO_SEQUENCE_END    = "\x00\x00\x01\xB7";
  412.38 +    const VIDEO_GROUP_START     = "\x00\x00\x01\xB8";
  412.39 +    const AUDIO_START           = "\x00\x00\x01\xC0";
  412.40 +    
  412.41 +
  412.42 +    public function Analyze() {
  412.43 +        
  412.44 +        $getid3 = $this->getid3;
  412.45 +        
  412.46 +        $getid3->info['mpeg']['video']['raw'] = array ();
  412.47 +        $info_mpeg_video     = &$getid3->info['mpeg']['video'];
  412.48 +        $info_mpeg_video_raw = &$info_mpeg_video['raw'];
  412.49 +        
  412.50 +        $getid3->info['video'] = array ();
  412.51 +        $info_video = &$getid3->info['video'];
  412.52 +        
  412.53 +        $getid3->include_module('audio.mp3');
  412.54 +        
  412.55 +        if ($getid3->info['avdataend'] <= $getid3->info['avdataoffset']) {
  412.56 +            throw new getid3_exception('"avdataend" ('.$getid3->info['avdataend'].') is unexpectedly less-than-or-equal-to "avdataoffset" ('.$getid3->info['avdataoffset'].')');
  412.57 +        }
  412.58 +
  412.59 +        $getid3->info['fileformat'] = 'mpeg';
  412.60 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  412.61 +        $mpeg_stream_data        = fread($getid3->fp, min(100000, $getid3->info['avdataend'] - $getid3->info['avdataoffset']));
  412.62 +        $mpeg_stream_data_length = strlen($mpeg_stream_data);
  412.63 +
  412.64 +        $video_chunk_offset = 0;
  412.65 +        while (substr($mpeg_stream_data, $video_chunk_offset++, 4) !== getid3_mpeg::VIDEO_SEQUENCE_HEADER) {
  412.66 +            if ($video_chunk_offset >= $mpeg_stream_data_length) {
  412.67 +                throw new getid3_exception('Could not find start of video block in the first 100,000 bytes (or before end of file) - this might not be an MPEG-video file?');
  412.68 +            }
  412.69 +        }
  412.70 +
  412.71 +        // Start code                       32 bits
  412.72 +        // horizontal frame size            12 bits
  412.73 +        // vertical frame size              12 bits
  412.74 +        // pixel aspect ratio                4 bits
  412.75 +        // frame rate                        4 bits
  412.76 +        // bitrate                          18 bits
  412.77 +        // marker bit                        1 bit
  412.78 +        // VBV buffer size                  10 bits
  412.79 +        // constrained parameter flag        1 bit
  412.80 +        // intra quant. matrix flag          1 bit
  412.81 +        // intra quant. matrix values      512 bits (present if matrix flag == 1)
  412.82 +        // non-intra quant. matrix flag      1 bit
  412.83 +        // non-intra quant. matrix values  512 bits (present if matrix flag == 1)
  412.84 +
  412.85 +        $info_video['dataformat'] = 'mpeg';
  412.86 +
  412.87 +        $video_chunk_offset += (strlen(getid3_mpeg::VIDEO_SEQUENCE_HEADER) - 1);
  412.88 +
  412.89 +        $frame_size_dword = getid3_lib::BigEndian2Int(substr($mpeg_stream_data, $video_chunk_offset, 3));
  412.90 +        $video_chunk_offset += 3;
  412.91 +
  412.92 +        $aspect_ratio_frame_rate_dword = getid3_lib::BigEndian2Int(substr($mpeg_stream_data, $video_chunk_offset, 1));
  412.93 +        $video_chunk_offset += 1;
  412.94 +
  412.95 +        $assorted_information = getid3_lib::BigEndian2Bin(substr($mpeg_stream_data, $video_chunk_offset, 4));
  412.96 +        $video_chunk_offset += 4;
  412.97 +
  412.98 +        $info_mpeg_video_raw['framesize_horizontal']   = ($frame_size_dword & 0xFFF000) >> 12; // 12 bits for horizontal frame size
  412.99 +        $info_mpeg_video_raw['framesize_vertical']     = ($frame_size_dword & 0x000FFF);       // 12 bits for vertical frame size
 412.100 +        $info_mpeg_video_raw['pixel_aspect_ratio']     = ($aspect_ratio_frame_rate_dword & 0xF0) >> 4;
 412.101 +        $info_mpeg_video_raw['frame_rate']             = ($aspect_ratio_frame_rate_dword & 0x0F);
 412.102 +                                                                        
 412.103 +        $info_mpeg_video['framesize_horizontal']          = $info_mpeg_video_raw['framesize_horizontal'];
 412.104 +        $info_mpeg_video['framesize_vertical']            = $info_mpeg_video_raw['framesize_vertical'];
 412.105 +
 412.106 +        $info_mpeg_video['pixel_aspect_ratio']            = $this->MPEGvideoAspectRatioLookup($info_mpeg_video_raw['pixel_aspect_ratio']);
 412.107 +        $info_mpeg_video['pixel_aspect_ratio_text']       = $this->MPEGvideoAspectRatioTextLookup($info_mpeg_video_raw['pixel_aspect_ratio']);
 412.108 +        $info_mpeg_video['frame_rate']                    = $this->MPEGvideoFramerateLookup($info_mpeg_video_raw['frame_rate']);
 412.109 +
 412.110 +        $info_mpeg_video_raw['bitrate']                =       bindec(substr($assorted_information,  0, 18));
 412.111 +        $info_mpeg_video_raw['marker_bit']             = (bool)bindec($assorted_information{18});
 412.112 +        $info_mpeg_video_raw['vbv_buffer_size']        =       bindec(substr($assorted_information, 19, 10));
 412.113 +        $info_mpeg_video_raw['constrained_param_flag'] = (bool)bindec($assorted_information{29});
 412.114 +        $info_mpeg_video_raw['intra_quant_flag']       = (bool)bindec($assorted_information{30});
 412.115 +        
 412.116 +        if ($info_mpeg_video_raw['intra_quant_flag']) {
 412.117 +
 412.118 +            // read 512 bits
 412.119 +            $info_mpeg_video_raw['intra_quant']          = getid3_lib::BigEndian2Bin(substr($mpeg_stream_data, $video_chunk_offset, 64));
 412.120 +            $video_chunk_offset += 64;
 412.121 +
 412.122 +            $info_mpeg_video_raw['non_intra_quant_flag'] = (bool)bindec($info_mpeg_video_raw['intra_quant']{511});
 412.123 +            $info_mpeg_video_raw['intra_quant']          =       bindec($assorted_information{31}).substr(getid3_lib::BigEndian2Bin(substr($mpeg_stream_data, $video_chunk_offset, 64)), 0, 511);
 412.124 +
 412.125 +            if ($info_mpeg_video_raw['non_intra_quant_flag']) {
 412.126 +                $info_mpeg_video_raw['non_intra_quant'] = substr($mpeg_stream_data, $video_chunk_offset, 64);
 412.127 +                $video_chunk_offset += 64;
 412.128 +            }
 412.129 +
 412.130 +        } else {
 412.131 +
 412.132 +            $info_mpeg_video_raw['non_intra_quant_flag'] = (bool)bindec($assorted_information{31});
 412.133 +            if ($info_mpeg_video_raw['non_intra_quant_flag']) {
 412.134 +                $info_mpeg_video_raw['non_intra_quant'] = substr($mpeg_stream_data, $video_chunk_offset, 64);
 412.135 +                $video_chunk_offset += 64;
 412.136 +            }
 412.137 +        }
 412.138 +
 412.139 +        if ($info_mpeg_video_raw['bitrate'] == 0x3FFFF) { // 18 set bits
 412.140 +
 412.141 +            $getid3->warning('This version of getID3() cannot determine average bitrate of VBR MPEG video files');
 412.142 +            $info_mpeg_video['bitrate_mode'] = 'vbr';
 412.143 +
 412.144 +        } else {
 412.145 +
 412.146 +            $info_mpeg_video['bitrate']      = $info_mpeg_video_raw['bitrate'] * 400;
 412.147 +            $info_mpeg_video['bitrate_mode'] = 'cbr';
 412.148 +            $info_video['bitrate']              = $info_mpeg_video['bitrate'];
 412.149 +        }
 412.150 +
 412.151 +        $info_video['resolution_x']       = $info_mpeg_video['framesize_horizontal'];
 412.152 +        $info_video['resolution_y']       = $info_mpeg_video['framesize_vertical'];
 412.153 +        $info_video['frame_rate']         = $info_mpeg_video['frame_rate'];
 412.154 +        $info_video['bitrate_mode']       = $info_mpeg_video['bitrate_mode'];
 412.155 +        $info_video['pixel_aspect_ratio'] = $info_mpeg_video['pixel_aspect_ratio'];
 412.156 +        $info_video['lossless']           = false;
 412.157 +        $info_video['bits_per_sample']    = 24;
 412.158 +
 412.159 +
 412.160 +        //0x000001B3 begins the sequence_header of every MPEG video stream.
 412.161 +        //But in MPEG-2, this header must immediately be followed by an
 412.162 +        //extension_start_code (0x000001B5) with a sequence_extension ID (1).
 412.163 +        //(This extension contains all the additional MPEG-2 stuff.)
 412.164 +        //MPEG-1 doesn't have this extension, so that's a sure way to tell the
 412.165 +        //difference between MPEG-1 and MPEG-2 video streams.
 412.166 +
 412.167 +        $info_video['codec'] = substr($mpeg_stream_data, $video_chunk_offset, 4) == getid3_mpeg::VIDEO_EXTENSION_START ? 'MPEG-2' : 'MPEG-1';
 412.168 +
 412.169 +        $audio_chunk_offset = 0;
 412.170 +        while (true) {
 412.171 +            while (substr($mpeg_stream_data, $audio_chunk_offset++, 4) !== getid3_mpeg::AUDIO_START) {
 412.172 +                if ($audio_chunk_offset >= $mpeg_stream_data_length) {
 412.173 +                    break 2;
 412.174 +                }
 412.175 +            }
 412.176 +
 412.177 +            for ($i = 0; $i <= 7; $i++) {
 412.178 +                // some files have the MPEG-audio header 8 bytes after the end of the $00 $00 $01 $C0 signature, some have it up to 13 bytes (or more?) after
 412.179 +                // I have no idea why or what the difference is, so this is a stupid hack.
 412.180 +                // If anybody has any better idea of what's going on, please let me know - info@getid3.org
 412.181 +
 412.182 +                // make copy of info
 412.183 +                $dummy = $getid3->info;
 412.184 +
 412.185 +                // clone getid3 - better safe than sorry
 412.186 +                $clone = clone $this->getid3;
 412.187 +                
 412.188 +                // check
 412.189 +                $mp3 = new getid3_mp3($clone);
 412.190 +                if ($mp3->decodeMPEGaudioHeader($getid3->fp, ($audio_chunk_offset + 3) + 8 + $i, $dummy, false)) {
 412.191 +
 412.192 +                    $getid3->info = $dummy;
 412.193 +                    $getid3->info['audio']['bitrate_mode'] = 'cbr';
 412.194 +                    $getid3->info['audio']['lossless']     = false;
 412.195 +                    break 2;
 412.196 +                }
 412.197 +                
 412.198 +                // destroy copy
 412.199 +                unset($dummy);
 412.200 +            }
 412.201 +        }
 412.202 +
 412.203 +        // Temporary hack to account for interleaving overhead:
 412.204 +        if (!empty($info_video['bitrate']) && !empty($getid3->info['audio']['bitrate'])) {
 412.205 +            $getid3->info['playtime_seconds'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / ($info_video['bitrate'] + $getid3->info['audio']['bitrate']);
 412.206 +
 412.207 +            // Interleaved MPEG audio/video files have a certain amount of overhead that varies
 412.208 +            // by both video and audio bitrates, and not in any sensible, linear/logarithmic patter
 412.209 +            // Use interpolated lookup tables to approximately guess how much is overhead, because
 412.210 +            // playtime is calculated as filesize / total-bitrate
 412.211 +            $getid3->info['playtime_seconds'] *= $this->MPEGsystemNonOverheadPercentage($info_video['bitrate'], $getid3->info['audio']['bitrate']);
 412.212 +
 412.213 +            //switch ($info_video['bitrate']) {
 412.214 +            //    case('5000000'):
 412.215 +            //        $multiplier = 0.93292642112380355828048824319889;
 412.216 +            //        break;
 412.217 +            //    case('5500000'):
 412.218 +            //        $multiplier = 0.93582895375200989965359777343219;
 412.219 +            //        break;
 412.220 +            //    case('6000000'):
 412.221 +            //        $multiplier = 0.93796247714820932532911373859139;
 412.222 +            //        break;
 412.223 +            //    case('7000000'):
 412.224 +            //        $multiplier = 0.9413264083635103463010117778776;
 412.225 +            //        break;
 412.226 +            //    default:
 412.227 +            //        $multiplier = 1;
 412.228 +            //        break;
 412.229 +            //}
 412.230 +            //$getid3->info['playtime_seconds'] *= $multiplier;
 412.231 +            //$getid3->warning('Interleaved MPEG audio/video playtime may be inaccurate. With current hack should be within a few seconds of accurate. Report to info@getid3.org if off by more than 10 seconds.');
 412.232 +        
 412.233 +            if ($info_video['bitrate'] < 50000) {
 412.234 +                $getid3->warning('Interleaved MPEG audio/video playtime may be slightly inaccurate for video bitrates below 100kbps. Except in extreme low-bitrate situations, error should be less than 1%. Report to info@getid3.org if greater than this.');
 412.235 +            }
 412.236 +        }
 412.237 +
 412.238 +        return true;
 412.239 +    }
 412.240 +
 412.241 +
 412.242 +
 412.243 +    public static function MPEGsystemNonOverheadPercentage($video_bitrate, $audio_bitrate) {
 412.244 +        
 412.245 +        $overhead_percentage = 0;
 412.246 +
 412.247 +        $audio_bitrate = max(min($audio_bitrate / 1000,   384), 32); // limit to range of 32kbps - 384kbps (should be only legal bitrates, but maybe VBR?)
 412.248 +        $video_bitrate = max(min($video_bitrate / 1000, 10000), 10); // limit to range of 10kbps -  10Mbps (beyond that curves flatten anyways, no big loss)
 412.249 +
 412.250 +        //OMBB[audiobitrate]                 = array (   video-10kbps,       video-100kbps,      video-1000kbps,     video-10000kbps)
 412.251 +        static $overhead_multiplier_by_bitrate = array (
 412.252 +             32 => array (0, 0.9676287944368530, 0.9802276264360310, 0.9844916183244460, 0.9852821845179940),
 412.253 +             48 => array (0, 0.9779100089209830, 0.9787770035359320, 0.9846738664076130, 0.9852683013799960),
 412.254 +             56 => array (0, 0.9731249855367600, 0.9776624308938040, 0.9832606361852130, 0.9843922606633340),
 412.255 +             64 => array (0, 0.9755642683275760, 0.9795256705493390, 0.9836573009193170, 0.9851122539404470),
 412.256 +             96 => array (0, 0.9788025247497290, 0.9798553314148700, 0.9822956869792560, 0.9834815119124690),
 412.257 +            128 => array (0, 0.9816940050925480, 0.9821675936072120, 0.9829756927470870, 0.9839763420152050),
 412.258 +            160 => array (0, 0.9825894094561180, 0.9820913399073960, 0.9823907143253970, 0.9832821783651570),
 412.259 +            192 => array (0, 0.9832038474336260, 0.9825731694317960, 0.9821028622712400, 0.9828262076447620),
 412.260 +            224 => array (0, 0.9836516298538770, 0.9824718601823890, 0.9818302180625380, 0.9823735101626480),
 412.261 +            256 => array (0, 0.9845863022094920, 0.9837229411967540, 0.9824521662210830, 0.9828645172100790),
 412.262 +            320 => array (0, 0.9849565280263180, 0.9837683142805110, 0.9822885275960400, 0.9824424382727190),
 412.263 +            384 => array (0, 0.9856094774357600, 0.9844573394432720, 0.9825970399837330, 0.9824673808303890)
 412.264 +        );
 412.265 +
 412.266 +        $bitrate_to_use_min = $bitrate_to_use_max = $previous_bitrate = 32;
 412.267 +
 412.268 +        foreach ($overhead_multiplier_by_bitrate as $key => $value) {
 412.269 +        
 412.270 +            if ($audio_bitrate >= $previous_bitrate) {
 412.271 +                $bitrate_to_use_min = $previous_bitrate;
 412.272 +            }
 412.273 +            if ($audio_bitrate < $key) {
 412.274 +                $bitrate_to_use_max = $key;
 412.275 +                break;
 412.276 +            }
 412.277 +            $previous_bitrate = $key;
 412.278 +        }
 412.279 +        
 412.280 +        $factor_a = ($bitrate_to_use_max - $audio_bitrate) / ($bitrate_to_use_max - $bitrate_to_use_min);
 412.281 +
 412.282 +        $video_bitrate_log10 = log10($video_bitrate);
 412.283 +        $video_factor_min1   = $overhead_multiplier_by_bitrate[$bitrate_to_use_min][floor($video_bitrate_log10)];
 412.284 +        $video_factor_min2   = $overhead_multiplier_by_bitrate[$bitrate_to_use_max][floor($video_bitrate_log10)];
 412.285 +        $video_factor_max1   = $overhead_multiplier_by_bitrate[$bitrate_to_use_min][ceil($video_bitrate_log10)];
 412.286 +        $video_factor_max2   = $overhead_multiplier_by_bitrate[$bitrate_to_use_max][ceil($video_bitrate_log10)];
 412.287 +        $factor_v = $video_bitrate_log10 - floor($video_bitrate_log10);
 412.288 +
 412.289 +        $overhead_percentage  = $video_factor_min1 *      $factor_a  *      $factor_v;
 412.290 +        $overhead_percentage += $video_factor_min2 * (1 - $factor_a) *      $factor_v;
 412.291 +        $overhead_percentage += $video_factor_max1 *      $factor_a  * (1 - $factor_v);
 412.292 +        $overhead_percentage += $video_factor_max2 * (1 - $factor_a) * (1 - $factor_v);
 412.293 +
 412.294 +        return $overhead_percentage;
 412.295 +    }
 412.296 +
 412.297 +
 412.298 +
 412.299 +    public static function MPEGvideoFramerateLookup($raw_frame_rate) {
 412.300 +        
 412.301 +        $lookup = array (0, 23.976, 24, 25, 29.97, 30, 50, 59.94, 60);
 412.302 +        
 412.303 +        return (float)(isset($lookup[$raw_frame_rate]) ? $lookup[$raw_frame_rate] : 0);
 412.304 +    }
 412.305 +
 412.306 +
 412.307 +
 412.308 +    public static function MPEGvideoAspectRatioLookup($raw_aspect_ratio) {
 412.309 +        
 412.310 +        $lookup = array (0, 1, 0.6735, 0.7031, 0.7615, 0.8055, 0.8437, 0.8935, 0.9157, 0.9815, 1.0255, 1.0695, 1.0950, 1.1575, 1.2015, 0);
 412.311 +        
 412.312 +        return (float)(isset($lookup[$raw_aspect_ratio]) ? $lookup[$raw_aspect_ratio] : 0);
 412.313 +    }
 412.314 +
 412.315 +
 412.316 +
 412.317 +    public static function MPEGvideoAspectRatioTextLookup($raw_aspect_ratio) {
 412.318 +        
 412.319 +        $lookup = array ('forbidden', 'square pixels', '0.6735', '16:9, 625 line, PAL', '0.7615', '0.8055', '16:9, 525 line, NTSC', '0.8935', '4:3, 625 line, PAL, CCIR601', '0.9815', '1.0255', '1.0695', '4:3, 525 line, NTSC, CCIR601', '1.1575', '1.2015', 'reserved');
 412.320 +        
 412.321 +        return (isset($lookup[$raw_aspect_ratio]) ? $lookup[$raw_aspect_ratio] : '');
 412.322 +    }
 412.323 +
 412.324 +}
 412.325 +
 412.326 +
 412.327 +?>
 412.328 \ No newline at end of file
   413.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   413.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.nsv.php	Mon Feb 22 08:02:39 2010 -0500
   413.3 @@ -0,0 +1,210 @@
   413.4 +<?php
   413.5 +// +----------------------------------------------------------------------+
   413.6 +// | PHP version 5                                                        |
   413.7 +// +----------------------------------------------------------------------+
   413.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   413.9 +// +----------------------------------------------------------------------+
  413.10 +// | This source file is subject to version 2 of the GPL license,         |
  413.11 +// | that is bundled with this package in the file license.txt and is     |
  413.12 +// | available through the world-wide-web at the following url:           |
  413.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  413.14 +// +----------------------------------------------------------------------+
  413.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  413.16 +// +----------------------------------------------------------------------+
  413.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  413.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  413.19 +// +----------------------------------------------------------------------+
  413.20 +// | module.audio-video.nsv.php                                           |
  413.21 +// | module for analyzing Nullsoft NSV files                              |
  413.22 +// | dependencies: NONE                                                   |
  413.23 +// +----------------------------------------------------------------------+
  413.24 +//
  413.25 +// $Id: module.audio-video.nsv.php,v 1.3 2006/11/02 10:48:00 ah Exp $
  413.26 +
  413.27 +        
  413.28 +        
  413.29 +class getid3_nsv extends getid3_handler
  413.30 +{
  413.31 +
  413.32 +    public function Analyze() {
  413.33 +
  413.34 +        $getid3 = $this->getid3;
  413.35 +
  413.36 +        $getid3->info['fileformat']          = 'nsv';
  413.37 +        $getid3->info['audio']['dataformat'] = 'nsv';
  413.38 +        $getid3->info['video']['dataformat'] = 'nsv';
  413.39 +        $getid3->info['audio']['lossless']   = false;
  413.40 +        $getid3->info['video']['lossless']   = false;
  413.41 +
  413.42 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  413.43 +        $nsv_header = fread($getid3->fp, 4);
  413.44 +
  413.45 +        switch ($nsv_header) {
  413.46 +            
  413.47 +            case 'NSVs':
  413.48 +                $this->getNSVsHeader();
  413.49 +                break;
  413.50 +
  413.51 +            case 'NSVf':
  413.52 +                if ($this->getNSVfHeader()) {
  413.53 +                        $this->getNSVsHeader($getid3->info['nsv']['NSVf']['header_length']);
  413.54 +                }
  413.55 +                break;
  413.56 +
  413.57 +            default:
  413.58 +                throw new getid3_exception('Expecting "NSVs" or "NSVf" at offset '.$getid3->info['avdataoffset'].', found "'.$nsv_header.'"');
  413.59 +                break;
  413.60 +        }
  413.61 +
  413.62 +        if (!isset($getid3->info['nsv']['NSVf'])) {
  413.63 +            $getid3->warning('NSVf header not present - cannot calculate playtime or bitrate');
  413.64 +        }
  413.65 +
  413.66 +        return true;
  413.67 +    }
  413.68 +
  413.69 +
  413.70 +
  413.71 +    private function getNSVsHeader($file_offset = 0) {
  413.72 +        
  413.73 +        $getid3 = $this->getid3;
  413.74 +        
  413.75 +        fseek($getid3->fp, $file_offset, SEEK_SET);
  413.76 +        $nsvs_header = fread($getid3->fp, 28);
  413.77 +        
  413.78 +        $getid3->info['nsv']['NSVs'] = array ();
  413.79 +        $info_nsv_NSVs = &$getid3->info['nsv']['NSVs'];
  413.80 +
  413.81 +        $info_nsv_NSVs['identifier'] = substr($nsvs_header, 0, 4);
  413.82 +        if ($info_nsv_NSVs['identifier'] != 'NSVs') {
  413.83 +            throw new getid3_exception('expected "NSVs" at offset ('.$file_offset.'), found "'.$info_nsv_NSVs['identifier'].'" instead');
  413.84 +        }
  413.85 +        
  413.86 +        $info_nsv_NSVs['offset'] = $file_offset;
  413.87 +        
  413.88 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVs, $nsvs_header, 4,
  413.89 +            array (
  413.90 +                'video_codec'     => -4,    // string
  413.91 +                'audio_codec'     => -4,    // string
  413.92 +                'resolution_x'    => 2,
  413.93 +                'resolution_y'    => 2,
  413.94 +                'framerate_index' => 1,
  413.95 +            )
  413.96 +        );
  413.97 +
  413.98 +        if ($info_nsv_NSVs['audio_codec'] == 'PCM ') {
  413.99 +        
 413.100 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVs, $nsvs_header, 24,
 413.101 +                array (
 413.102 +                    'bits_channel' => 1,
 413.103 +                    'channels'     => 1,
 413.104 +                    'sample_rate'  => 2
 413.105 +                )
 413.106 +            );
 413.107 +            $getid3->info['audio']['sample_rate'] = $info_nsv_NSVs['sample_rate'];
 413.108 +            
 413.109 +        }
 413.110 +
 413.111 +        $getid3->info['video']['resolution_x']       = $info_nsv_NSVs['resolution_x'];
 413.112 +        $getid3->info['video']['resolution_y']       = $info_nsv_NSVs['resolution_y'];
 413.113 +        $info_nsv_NSVs['frame_rate']                 = getid3_nsv::NSVframerateLookup($info_nsv_NSVs['framerate_index']);
 413.114 +        $getid3->info['video']['frame_rate']         = $info_nsv_NSVs['frame_rate'];
 413.115 +        $getid3->info['video']['bits_per_sample']    = 24;
 413.116 +        $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
 413.117 +
 413.118 +        return true;
 413.119 +    }
 413.120 +
 413.121 +
 413.122 +
 413.123 +    private function getNSVfHeader($file_offset = 0, $get_toc_offsets=false) {
 413.124 +        
 413.125 +        $getid3 = $this->getid3;
 413.126 +        
 413.127 +        fseek($getid3->fp, $file_offset, SEEK_SET);
 413.128 +        $nsvf_header = fread($getid3->fp, 28);
 413.129 +        
 413.130 +        $getid3->info['nsv']['NSVf'] = array ();
 413.131 +        $info_nsv_NSVf = &$getid3->info['nsv']['NSVf'];
 413.132 +        
 413.133 +        $info_nsv_NSVf['identifier'] = substr($nsvf_header, 0, 4);
 413.134 +        if ($info_nsv_NSVf['identifier'] != 'NSVf') {
 413.135 +            throw new getid3_exception('expected "NSVf" at offset ('.$file_offset.'), found "'.$info_nsv_NSVf['identifier'].'" instead');
 413.136 +        }
 413.137 +
 413.138 +        $getid3->info['nsv']['NSVs']['offset']        = $file_offset;
 413.139 +
 413.140 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVf, $nsvf_header, 4,
 413.141 +            array (
 413.142 +                'header_length' => 4,
 413.143 +                'file_size'     => 4,
 413.144 +                'playtime_ms'   => 4,
 413.145 +                'meta_size'     => 4,
 413.146 +                'TOC_entries_1' => 4,
 413.147 +                'TOC_entries_2' => 4
 413.148 +            )
 413.149 +        );
 413.150 +                
 413.151 +        if ($info_nsv_NSVf['playtime_ms'] == 0) {
 413.152 +            throw new getid3_exception('Corrupt NSV file: NSVf.playtime_ms == zero');
 413.153 +        }
 413.154 +        
 413.155 +        if ($info_nsv_NSVf['file_size'] > $getid3->info['avdataend']) {
 413.156 +            $getid3->warning('truncated file - NSVf header indicates '.$info_nsv_NSVf['file_size'].' bytes, file actually '.$getid3->info['avdataend'].' bytes');
 413.157 +        }
 413.158 +
 413.159 +        $nsvf_header .= fread($getid3->fp, $info_nsv_NSVf['meta_size'] + (4 * $info_nsv_NSVf['TOC_entries_1']) + (4 * $info_nsv_NSVf['TOC_entries_2']));
 413.160 +        $nsvf_headerlength = strlen($nsvf_header);
 413.161 +        $info_nsv_NSVf['metadata'] = substr($nsvf_header, 28, $info_nsv_NSVf['meta_size']);
 413.162 +
 413.163 +        $offset = 28 + $info_nsv_NSVf['meta_size'];
 413.164 +        if ($get_toc_offsets) {
 413.165 +            $toc_counter = 0;
 413.166 +            while ($toc_counter < $info_nsv_NSVf['TOC_entries_1']) {
 413.167 +                if ($toc_counter < $info_nsv_NSVf['TOC_entries_1']) {
 413.168 +                    $info_nsv_NSVf['TOC_1'][$toc_counter] = getid3_lib::LittleEndian2Int(substr($nsvf_header, $offset, 4));
 413.169 +                    $offset += 4;
 413.170 +                    $toc_counter++;
 413.171 +                }
 413.172 +            }
 413.173 +        }
 413.174 +
 413.175 +        if (trim($info_nsv_NSVf['metadata']) != '') {
 413.176 +            $info_nsv_NSVf['metadata'] = str_replace('`', "\x01", $info_nsv_NSVf['metadata']);
 413.177 +            $comment_pair_array = explode("\x01".' ', $info_nsv_NSVf['metadata']);
 413.178 +            foreach ($comment_pair_array as $comment_pair) {
 413.179 +                if (strstr($comment_pair, '='."\x01")) {
 413.180 +                    list($key, $value) = explode('='."\x01", $comment_pair, 2);
 413.181 +                    $getid3->info['nsv']['comments'][strtolower($key)][] = trim(str_replace("\x01", '', $value));
 413.182 +                }
 413.183 +            }
 413.184 +        }
 413.185 +
 413.186 +        $getid3->info['playtime_seconds'] = $info_nsv_NSVf['playtime_ms'] / 1000;
 413.187 +        $getid3->info['bitrate']          = ($info_nsv_NSVf['file_size'] * 8) / $getid3->info['playtime_seconds'];
 413.188 +
 413.189 +        return true;
 413.190 +    }
 413.191 +
 413.192 +
 413.193 +
 413.194 +    public static function NSVframerateLookup($frame_rate_index) {
 413.195 +        
 413.196 +        if ($frame_rate_index <= 127) {
 413.197 +            return (float)$frame_rate_index;
 413.198 +        }
 413.199 +
 413.200 +        static $lookup = array (
 413.201 +            129 => 29.970,
 413.202 +            131 => 23.976,
 413.203 +            133 => 14.985,
 413.204 +            197 => 59.940,
 413.205 +            199 => 47.952
 413.206 +        );
 413.207 +        return (isset($lookup[$frame_rate_index]) ? $lookup[$frame_rate_index] : false);
 413.208 +    }
 413.209 +
 413.210 +}
 413.211 +
 413.212 +
 413.213 +?>
 413.214 \ No newline at end of file
   414.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   414.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.quicktime.php	Mon Feb 22 08:02:39 2010 -0500
   414.3 @@ -0,0 +1,1529 @@
   414.4 +<?php
   414.5 +// +----------------------------------------------------------------------+
   414.6 +// | PHP version 5                                                        |
   414.7 +// +----------------------------------------------------------------------+
   414.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   414.9 +// +----------------------------------------------------------------------+
  414.10 +// | This source file is subject to version 2 of the GPL license,         |
  414.11 +// | that is bundled with this package in the file license.txt and is     |
  414.12 +// | available through the world-wide-web at the following url:           |
  414.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  414.14 +// +----------------------------------------------------------------------+
  414.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  414.16 +// +----------------------------------------------------------------------+
  414.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  414.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  414.19 +// +----------------------------------------------------------------------+
  414.20 +// | module.audio-video.quicktime.php                                     |
  414.21 +// | Module for analyzing Quicktime, MP3-in-MP4 and Apple Lossless files. |
  414.22 +// | dependencies: module.audio.mp3.php                                   |
  414.23 +// |               zlib support in PHP (optional)                         |
  414.24 +// +----------------------------------------------------------------------+
  414.25 +//
  414.26 +// $Id: module.audio-video.quicktime.php,v 1.7 2006/11/02 16:03:28 ah Exp $
  414.27 +
  414.28 +        
  414.29 +        
  414.30 +class getid3_quicktime extends getid3_handler
  414.31 +{
  414.32 +
  414.33 +    public function Analyze() {
  414.34 +        
  414.35 +        $getid3 = $this->getid3;
  414.36 +
  414.37 +        $info   = &$getid3->info;
  414.38 +        
  414.39 +        $getid3->include_module('audio.mp3');
  414.40 +        
  414.41 +        $info['quicktime'] = array ();
  414.42 +        $info_quicktime = &$info['quicktime'];
  414.43 +
  414.44 +        $info['fileformat'] = 'quicktime';
  414.45 +        $info_quicktime['hinting'] = false;
  414.46 +
  414.47 +        fseek($getid3->fp, $info['avdataoffset'], SEEK_SET);
  414.48 +
  414.49 +        $offset = $atom_counter = 0;
  414.50 +
  414.51 +        while ($offset < $info['avdataend']) {
  414.52 +
  414.53 +            fseek($getid3->fp, $offset, SEEK_SET);
  414.54 +            $atom_header = fread($getid3->fp, 8);
  414.55 +
  414.56 +            $atom_size = getid3_lib::BigEndian2Int(substr($atom_header, 0, 4));
  414.57 +            $atom_name =               substr($atom_header, 4, 4);
  414.58 +            
  414.59 +            $info_quicktime[$atom_name]['name']   = $atom_name;
  414.60 +            $info_quicktime[$atom_name]['size']   = $atom_size;
  414.61 +            $info_quicktime[$atom_name]['offset'] = $offset;
  414.62 +
  414.63 +            if (($offset + $atom_size) > $info['avdataend']) {
  414.64 +                throw new getid3_exception('Atom at offset '.$offset.' claims to go beyond end-of-file (length: '.$atom_size.' bytes)');
  414.65 +            }
  414.66 +
  414.67 +            if ($atom_size == 0) {
  414.68 +                // Furthermore, for historical reasons the list of atoms is optionally
  414.69 +                // terminated by a 32-bit integer set to 0. If you are writing a program
  414.70 +                // to read user data atoms, you should allow for the terminating 0.
  414.71 +                break;
  414.72 +            }
  414.73 +            
  414.74 +            switch ($atom_name) {
  414.75 +            
  414.76 +                case 'mdat': // Media DATa atom
  414.77 +                    // 'mdat' contains the actual data for the audio/video
  414.78 +                    if (($atom_size > 8) && (!isset($info['avdataend_tmp']) || ($info_quicktime[$atom_name]['size'] > ($info['avdataend_tmp'] - $info['avdataoffset'])))) {
  414.79 +
  414.80 +                        $info['avdataoffset'] = $info_quicktime[$atom_name]['offset'] + 8;
  414.81 +                        $old_av_data_end      = $info['avdataend'];
  414.82 +                        $info['avdataend']    = $info_quicktime[$atom_name]['offset'] + $info_quicktime[$atom_name]['size'];
  414.83 +
  414.84 +                        
  414.85 +                        //// MP3
  414.86 +                        
  414.87 +                        if (!$getid3->include_module_optional('audio.mp3')) {
  414.88 +                           $getid3->warning('MP3 skipped because mpeg module is missing.');
  414.89 +                        }
  414.90 +                                                                    
  414.91 +                        else {
  414.92 +                            
  414.93 +                            // Clone getid3 - messing with offsets - better safe than sorry
  414.94 +                            $clone = clone $getid3;
  414.95 +                            
  414.96 +                            if (getid3_mp3::MPEGaudioHeaderValid(getid3_mp3::MPEGaudioHeaderDecode(fread($clone->fp, 4)))) {
  414.97 +                            
  414.98 +                                $mp3 = new getid3_mp3($clone);
  414.99 +                                $mp3->AnalyzeMPEGaudioInfo();
 414.100 +                                
 414.101 +                                // Import from clone and destroy
 414.102 +                                if (isset($clone->info['mpeg']['audio'])) {
 414.103 +                                
 414.104 +                                    $info['mpeg']['audio'] = $clone->info['mpeg']['audio'];
 414.105 +                                
 414.106 +                                    $info['audio']['dataformat']   = 'mp3';
 414.107 +                                    $info['audio']['codec']        = (!empty($info['mpeg']['audio']['encoder']) ? $info['mpeg']['audio']['encoder'] : (!empty($info['mpeg']['audio']['codec']) ? $info['mpeg']['audio']['codec'] : (!empty($info['mpeg']['audio']['LAME']) ? 'LAME' :'mp3')));
 414.108 +                                    $info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
 414.109 +                                    $info['audio']['channels']     = $info['mpeg']['audio']['channels'];
 414.110 +                                    $info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
 414.111 +                                    $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
 414.112 +                                    $info['bitrate']               = $info['audio']['bitrate'];
 414.113 +                                    
 414.114 +                                    $getid3->warning($clone->warnings());
 414.115 +                                    unset($clone);
 414.116 +                                }
 414.117 +                            }
 414.118 +                        }
 414.119 +                        
 414.120 +                        $info['avdataend'] = $old_av_data_end;
 414.121 +                        unset($old_av_data_end);
 414.122 +
 414.123 +                    }
 414.124 +                    break;
 414.125 +                    
 414.126 +
 414.127 +                case 'free': // FREE space atom
 414.128 +                case 'skip': // SKIP atom
 414.129 +                case 'wide': // 64-bit expansion placeholder atom
 414.130 +                    // 'free', 'skip' and 'wide' are just padding, contains no useful data at all
 414.131 +                    break;
 414.132 +
 414.133 +
 414.134 +                default:
 414.135 +                    $atom_hierarchy = array ();
 414.136 +                    $info_quicktime[$atom_name] = $this->QuicktimeParseAtom($atom_name, $atom_size, fread($getid3->fp, $atom_size), $offset, $atom_hierarchy);
 414.137 +                    break;
 414.138 +            }
 414.139 +
 414.140 +            $offset += $atom_size;
 414.141 +            $atom_counter++;
 414.142 +        }
 414.143 +
 414.144 +        if (!empty($info['avdataend_tmp'])) {
 414.145 +            // this value is assigned to a temp value and then erased because
 414.146 +            // otherwise any atoms beyond the 'mdat' atom would not get parsed
 414.147 +            $info['avdataend'] = $info['avdataend_tmp'];
 414.148 +            unset($info['avdataend_tmp']);
 414.149 +        }
 414.150 +
 414.151 +        if (!isset($info['bitrate']) && isset($info['playtime_seconds'])) {
 414.152 +            $info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
 414.153 +        }
 414.154 +        
 414.155 +        if (isset($info['bitrate']) && !isset($info['audio']['bitrate']) && !isset($info_quicktime['video'])) {
 414.156 +            $info['audio']['bitrate'] = $info['bitrate'];
 414.157 +        }
 414.158 +
 414.159 +        if ((@$info['audio']['dataformat'] == 'mp4') && empty($info['video']['resolution_x'])) {
 414.160 +            $info['fileformat'] = 'mp4';
 414.161 +            $info['mime_type']  = 'audio/mp4';
 414.162 +            unset($info['video']['dataformat']);
 414.163 +        }
 414.164 +
 414.165 +        if (!$getid3->option_extra_info) {
 414.166 +            unset($info_quicktime['moov']);
 414.167 +        }
 414.168 +
 414.169 +        if (empty($info['audio']['dataformat']) && !empty($info_quicktime['audio'])) {
 414.170 +            $info['audio']['dataformat'] = 'quicktime';
 414.171 +        }
 414.172 +        
 414.173 +        if (empty($info['video']['dataformat']) && !empty($info_quicktime['video'])) {
 414.174 +            $info['video']['dataformat'] = 'quicktime';
 414.175 +        }
 414.176 +
 414.177 +        return true;
 414.178 +    }
 414.179 +
 414.180 +
 414.181 +
 414.182 +    private function QuicktimeParseAtom($atom_name, $atom_size, $atom_data, $base_offset, &$atom_hierarchy) {
 414.183 +        
 414.184 +        // http://developer.apple.com/techpubs/quicktime/qtdevdocs/APIREF/INDEX/atomalphaindex.htm
 414.185 +        
 414.186 +        $getid3 = $this->getid3;
 414.187 +        
 414.188 +        $info           = &$getid3->info;
 414.189 +        $info_quicktime = &$info['quicktime'];
 414.190 +
 414.191 +        array_push($atom_hierarchy, $atom_name);
 414.192 +        $atom_structure['hierarchy'] = implode(' ', $atom_hierarchy);
 414.193 +        $atom_structure['name']      = $atom_name;
 414.194 +        $atom_structure['size']      = $atom_size;
 414.195 +        $atom_structure['offset']    = $base_offset;
 414.196 +
 414.197 +        switch ($atom_name) {
 414.198 +            case 'moov': // MOVie container atom
 414.199 +            case 'trak': // TRAcK container atom
 414.200 +            case 'clip': // CLIPping container atom
 414.201 +            case 'matt': // track MATTe container atom
 414.202 +            case 'edts': // EDiTS container atom
 414.203 +            case 'tref': // Track REFerence container atom
 414.204 +            case 'mdia': // MeDIA container atom
 414.205 +            case 'minf': // Media INFormation container atom
 414.206 +            case 'dinf': // Data INFormation container atom
 414.207 +            case 'udta': // User DaTA container atom
 414.208 +            case 'stbl': // Sample TaBLe container atom
 414.209 +            case 'cmov': // Compressed MOVie container atom
 414.210 +            case 'rmra': // Reference Movie Record Atom
 414.211 +            case 'rmda': // Reference Movie Descriptor Atom
 414.212 +            case 'gmhd': // Generic Media info HeaDer atom (seen on QTVR)
 414.213 +                $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $base_offset + 8, $atom_hierarchy);
 414.214 +                break;
 414.215 +
 414.216 +
 414.217 +            case '©cpy':
 414.218 +            case '©day':
 414.219 +            case '©dir':
 414.220 +            case '©ed1':
 414.221 +            case '©ed2':
 414.222 +            case '©ed3':
 414.223 +            case '©ed4':
 414.224 +            case '©ed5':
 414.225 +            case '©ed6':
 414.226 +            case '©ed7':
 414.227 +            case '©ed8':
 414.228 +            case '©ed9':
 414.229 +            case '©fmt':
 414.230 +            case '©inf':
 414.231 +            case '©prd':
 414.232 +            case '©prf':
 414.233 +            case '©req':
 414.234 +            case '©src':
 414.235 +            case '©wrt':
 414.236 +            case '©nam':
 414.237 +            case '©cmt':
 414.238 +            case '©wrn':
 414.239 +            case '©hst':
 414.240 +            case '©mak':
 414.241 +            case '©mod':
 414.242 +            case '©PRD':
 414.243 +            case '©swr':
 414.244 +            case '©aut':
 414.245 +            case '©ART':
 414.246 +            case '©trk':
 414.247 +            case '©alb':
 414.248 +            case '©com':
 414.249 +            case '©gen':
 414.250 +            case '©ope':
 414.251 +            case '©url':
 414.252 +            case '©enc':
 414.253 +                $atom_structure['data_length'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 2));
 414.254 +				$atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data,  2, 2));
 414.255 +				$atom_structure['data']        =                           substr($atom_data,  4);
 414.256 +
 414.257 +                $atom_structure['language']    = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
 414.258 +                if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
 414.259 +                    $info['comments']['language'][] = $atom_structure['language'];
 414.260 +                }
 414.261 +                $this->CopyToAppropriateCommentsSection($atom_name, $atom_structure['data']);
 414.262 +                break;
 414.263 +
 414.264 +
 414.265 +            case 'play': // auto-PLAY atom
 414.266 +                $atom_structure['autoplay'] = (bool)getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.267 +
 414.268 +                $info_quicktime['autoplay'] = $atom_structure['autoplay'];
 414.269 +                break;
 414.270 +
 414.271 +
 414.272 +            case 'WLOC': // Window LOCation atom
 414.273 +                $atom_structure['location_x'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 2));
 414.274 +                $atom_structure['location_y'] = getid3_lib::BigEndian2Int(substr($atom_data,  2, 2));
 414.275 +                break;
 414.276 +
 414.277 +
 414.278 +            case 'LOOP': // LOOPing atom
 414.279 +            case 'SelO': // play SELection Only atom
 414.280 +            case 'AllF': // play ALL Frames atom
 414.281 +                $atom_structure['data'] = getid3_lib::BigEndian2Int($atom_data);
 414.282 +                break;
 414.283 +
 414.284 +
 414.285 +            case 'name': //
 414.286 +            case 'MCPS': // Media Cleaner PRo
 414.287 +            case '@PRM': // adobe PReMiere version
 414.288 +            case '@PRQ': // adobe PRemiere Quicktime version
 414.289 +                $atom_structure['data'] = $atom_data;
 414.290 +                break;
 414.291 +
 414.292 +
 414.293 +            case 'cmvd': // Compressed MooV Data atom
 414.294 +                // Code by ubergeekØubergeek*tv based on information from
 414.295 +                // http://developer.apple.com/quicktime/icefloe/dispatch012.html
 414.296 +                $atom_structure['unCompressedSize'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4));
 414.297 +
 414.298 +                $compressed_file_data = substr($atom_data, 4);
 414.299 +                if (!function_exists('gzuncompress'))  {
 414.300 +                    $getid3->warning('PHP does not have zlib support - cannot decompress MOV atom at offset '.$atom_structure['offset']);
 414.301 +                }
 414.302 +                elseif ($uncompressed_header = @gzuncompress($compressed_file_data)) {
 414.303 +                    $atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($uncompressed_header, 0, $atom_hierarchy);
 414.304 +                } else {
 414.305 +                    $getid3->warning('Error decompressing compressed MOV atom at offset '.$atom_structure['offset']);
 414.306 +                }
 414.307 +                break;
 414.308 +
 414.309 +
 414.310 +            case 'dcom': // Data COMpression atom
 414.311 +                $atom_structure['compression_id']   = $atom_data;
 414.312 +                $atom_structure['compression_text'] = getid3_quicktime::QuicktimeDCOMLookup($atom_data);
 414.313 +                break;
 414.314 +
 414.315 +
 414.316 +            case 'rdrf': // Reference movie Data ReFerence atom
 414.317 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.318 +                    array (
 414.319 +                        'version'             => 1, 
 414.320 +                        'flags_raw'           => 3, 
 414.321 +                        'reference_type_name' => -4,
 414.322 +                        'reference_length'    => 4, 
 414.323 +                    )
 414.324 +                );
 414.325 +                
 414.326 +                $atom_structure['flags']['internal_data'] = (bool)($atom_structure['flags_raw'] & 0x000001);
 414.327 +                
 414.328 +                switch ($atom_structure['reference_type_name']) {
 414.329 +                    case 'url ':
 414.330 +                        $atom_structure['url']            = $this->NoNullString(substr($atom_data, 12));
 414.331 +                        break;
 414.332 +
 414.333 +                    case 'alis':
 414.334 +                        $atom_structure['file_alias']     =                     substr($atom_data, 12);
 414.335 +                        break;
 414.336 +
 414.337 +                    case 'rsrc':
 414.338 +                        $atom_structure['resource_alias'] =                     substr($atom_data, 12);
 414.339 +                        break;
 414.340 +
 414.341 +                    default:
 414.342 +                        $atom_structure['data']           =                     substr($atom_data, 12);
 414.343 +                        break;
 414.344 +                }
 414.345 +                break;
 414.346 +
 414.347 +
 414.348 +            case 'rmqu': // Reference Movie QUality atom
 414.349 +                $atom_structure['movie_quality'] = getid3_lib::BigEndian2Int($atom_data);
 414.350 +                break;
 414.351 +
 414.352 +
 414.353 +            case 'rmcs': // Reference Movie Cpu Speed atom
 414.354 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.355 +                    array (
 414.356 +                        'version'          => 1,
 414.357 +                        'flags_raw'        => 3, // hardcoded: 0x0000
 414.358 +                        'cpu_speed_rating' => 2
 414.359 +                    )
 414.360 +                );
 414.361 +                break;
 414.362 +
 414.363 +
 414.364 +            case 'rmvc': // Reference Movie Version Check atom
 414.365 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.366 +                    array (
 414.367 +                        'version'            => 1,
 414.368 +                        'flags_raw'          => 3, // hardcoded: 0x0000
 414.369 +                        'gestalt_selector'   => -4,
 414.370 +                        'gestalt_value_mask' => 4,
 414.371 +                        'gestalt_value'      => 4,
 414.372 +                        'gestalt_check_type' => 2
 414.373 +                    )
 414.374 +                );
 414.375 +                break;
 414.376 +
 414.377 +
 414.378 +            case 'rmcd': // Reference Movie Component check atom
 414.379 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.380 +                    array (
 414.381 +                        'version'                => 1,
 414.382 +                        'flags_raw'              => 3, // hardcoded: 0x0000
 414.383 +                        'component_type'         => -4,
 414.384 +                        'component_subtype'      => -4,
 414.385 +                        'component_manufacturer' => -4,
 414.386 +                        'component_flags_raw'    => 4,
 414.387 +                        'component_flags_mask'   => 4,
 414.388 +                        'component_min_version'  => 4
 414.389 +                    )
 414.390 +                );
 414.391 +                break;
 414.392 +
 414.393 +
 414.394 +            case 'rmdr': // Reference Movie Data Rate atom
 414.395 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.396 +                    array (
 414.397 +                        'version'   => 1,
 414.398 +                        'flags_raw' => 3, // hardcoded: 0x0000
 414.399 +                        'data_rate' => 4
 414.400 +                    )
 414.401 +                );
 414.402 +
 414.403 +                $atom_structure['data_rate_bps'] = $atom_structure['data_rate'] * 10;
 414.404 +                break;
 414.405 +
 414.406 +
 414.407 +            case 'rmla': // Reference Movie Language Atom
 414.408 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.409 +                    array (
 414.410 +                        'version'     => 1,
 414.411 +                        'flags_raw'   => 3, // hardcoded: 0x0000
 414.412 +                        'language_id' => 2
 414.413 +                    )
 414.414 +                );
 414.415 +
 414.416 +                $atom_structure['language']    = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
 414.417 +                if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
 414.418 +                    $info['comments']['language'][] = $atom_structure['language'];
 414.419 +                }
 414.420 +                break;
 414.421 +
 414.422 +
 414.423 +            case 'rmla': // Reference Movie Language Atom
 414.424 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.425 +                    array (
 414.426 +                        'version'   => 1,
 414.427 +                        'flags_raw' => 3, // hardcoded: 0x0000
 414.428 +                        'track_id'  => 2
 414.429 +                    )
 414.430 +                );
 414.431 +                break;
 414.432 +
 414.433 +
 414.434 +            case 'ptv ': // Print To Video - defines a movie's full screen mode
 414.435 +                // http://developer.apple.com/documentation/QuickTime/APIREF/SOURCESIV/at_ptv-_pg.htm
 414.436 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.437 +                    array (
 414.438 +                        'display_size_raw'  => 2,
 414.439 +                        'reserved_1'        => 2, // hardcoded: 0x0000
 414.440 +                        'reserved_2'        => 2, // hardcoded: 0x0000
 414.441 +                        'slide_show_flag'   => 1,
 414.442 +                        'play_on_open_flag' => 1
 414.443 +                    )
 414.444 +                );
 414.445 +
 414.446 +                $atom_structure['flags']['play_on_open'] = (bool)$atom_structure['play_on_open_flag'];
 414.447 +                $atom_structure['flags']['slide_show']   = (bool)$atom_structure['slide_show_flag'];
 414.448 +
 414.449 +                $ptv_lookup[0] = 'normal';
 414.450 +                $ptv_lookup[1] = 'double';
 414.451 +                $ptv_lookup[2] = 'half';
 414.452 +                $ptv_lookup[3] = 'full';
 414.453 +                $ptv_lookup[4] = 'current';
 414.454 +                if (isset($ptv_lookup[$atom_structure['display_size_raw']])) {
 414.455 +                    $atom_structure['display_size'] = $ptv_lookup[$atom_structure['display_size_raw']];
 414.456 +                } else {
 414.457 +                    $getid3->warning('unknown "ptv " display constant ('.$atom_structure['display_size_raw'].')');
 414.458 +                }
 414.459 +                break;
 414.460 +
 414.461 +
 414.462 +            case 'stsd': // Sample Table Sample Description atom
 414.463 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.464 +                    array (
 414.465 +                        'version'        => 1,
 414.466 +                        'flags_raw'      => 3, // hardcoded: 0x0000
 414.467 +                        'number_entries' => 4
 414.468 +                    )
 414.469 +                );
 414.470 +                $stsd_entries_data_offset = 8;
 414.471 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.472 +                    
 414.473 +                    getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['sample_description_table'][$i], $atom_data, $stsd_entries_data_offset, 
 414.474 +                        array (
 414.475 +                            'size'            => 4,
 414.476 +                            'data_format'     => -4,
 414.477 +                            'reserved'        => 6,
 414.478 +                            'reference_index' => 2
 414.479 +                        )
 414.480 +                    );
 414.481 +
 414.482 +                    $atom_structure['sample_description_table'][$i]['data'] = substr($atom_data, 16+$stsd_entries_data_offset, ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2));
 414.483 +                    $stsd_entries_data_offset += 16 + ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2);
 414.484 +
 414.485 +                    getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['sample_description_table'][$i], $atom_structure['sample_description_table'][$i]['data'], 0,
 414.486 +                        array (
 414.487 +                            'encoder_version'  => 2,
 414.488 +                            'encoder_revision' => 2,
 414.489 +                            'encoder_vendor'   => -4
 414.490 +                        )
 414.491 +                    );
 414.492 +
 414.493 +                    switch ($atom_structure['sample_description_table'][$i]['encoder_vendor']) {
 414.494 +
 414.495 +                        case "\x00\x00\x00\x00":
 414.496 +                            // audio atom
 414.497 +                            getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['sample_description_table'][$i], $atom_structure['sample_description_table'][$i]['data'], 8,
 414.498 +                                array (
 414.499 +                                    'audio_channels'       => 2,
 414.500 +                                    'audio_bit_depth'      => 2,
 414.501 +                                    'audio_compression_id' => 2,
 414.502 +                                    'audio_packet_size'    => 2
 414.503 +                                )
 414.504 +                            );
 414.505 +                            
 414.506 +                            $atom_structure['sample_description_table'][$i]['audio_sample_rate'] = getid3_quicktime::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 16, 4));
 414.507 +
 414.508 +                            switch ($atom_structure['sample_description_table'][$i]['data_format']) {
 414.509 +
 414.510 +                                case 'mp4v':
 414.511 +                                    $info['fileformat'] = 'mp4';
 414.512 +                                    throw new getid3_exception('This version of getID3() does not fully support MPEG-4 audio/video streams');
 414.513 +
 414.514 +                                case 'qtvr':
 414.515 +                                    $info['video']['dataformat'] = 'quicktimevr';
 414.516 +                                    break;
 414.517 +
 414.518 +                                case 'mp4a':
 414.519 +                                default:
 414.520 +                                    $info_quicktime['audio']['codec']       = $this->QuicktimeAudioCodecLookup($atom_structure['sample_description_table'][$i]['data_format']);
 414.521 +                                    $info_quicktime['audio']['sample_rate'] = $atom_structure['sample_description_table'][$i]['audio_sample_rate'];
 414.522 +                                    $info_quicktime['audio']['channels']    = $atom_structure['sample_description_table'][$i]['audio_channels'];
 414.523 +                                    $info_quicktime['audio']['bit_depth']   = $atom_structure['sample_description_table'][$i]['audio_bit_depth'];
 414.524 +                                    $info['audio']['codec']                 = $info_quicktime['audio']['codec'];
 414.525 +                                    $info['audio']['sample_rate']           = $info_quicktime['audio']['sample_rate'];
 414.526 +                                    $info['audio']['channels']              = $info_quicktime['audio']['channels'];
 414.527 +                                    $info['audio']['bits_per_sample']       = $info_quicktime['audio']['bit_depth'];
 414.528 +                                    switch ($atom_structure['sample_description_table'][$i]['data_format']) {
 414.529 +                                        case 'raw ': // PCM
 414.530 +                                        case 'alac': // Apple Lossless Audio Codec
 414.531 +                                            $info['audio']['lossless'] = true;
 414.532 +                                            break;
 414.533 +                                        default:
 414.534 +                                            $info['audio']['lossless'] = false;
 414.535 +                                            break;
 414.536 +                                    }
 414.537 +                                    break;
 414.538 +                            }
 414.539 +                            break;
 414.540 +
 414.541 +                        default:
 414.542 +                            switch ($atom_structure['sample_description_table'][$i]['data_format']) {
 414.543 +                                case 'mp4s':
 414.544 +                                    $info['fileformat'] = 'mp4';
 414.545 +                                    break;
 414.546 +
 414.547 +                                default:
 414.548 +                                    // video atom
 414.549 +                                    getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['sample_description_table'][$i], $atom_structure['sample_description_table'][$i]['data'], 8,
 414.550 +                                        array (
 414.551 +                                            'video_temporal_quality' => 4,
 414.552 +                                            'video_spatial_quality'  => 4,
 414.553 +                                            'video_frame_width'      => 2,
 414.554 +                                            'video_frame_height'     => 2
 414.555 +                                        )
 414.556 +                                    );
 414.557 +                                    $atom_structure['sample_description_table'][$i]['video_resolution_x']      = getid3_quicktime::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 20,  4));
 414.558 +                                    $atom_structure['sample_description_table'][$i]['video_resolution_y']      = getid3_quicktime::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24,  4));
 414.559 +                                    getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['sample_description_table'][$i], $atom_structure['sample_description_table'][$i]['data'], 28,
 414.560 +                                        array (                                        
 414.561 +                                            'video_data_size'        => 4,
 414.562 +                                            'video_frame_count'      => 2,
 414.563 +                                            'video_encoder_name_len' => 1
 414.564 +                                        )
 414.565 +                                    );
 414.566 +                                    $atom_structure['sample_description_table'][$i]['video_encoder_name']      = substr($atom_structure['sample_description_table'][$i]['data'], 35, $atom_structure['sample_description_table'][$i]['video_encoder_name_len']);
 414.567 +                                    $atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 66,  2));
 414.568 +                                    $atom_structure['sample_description_table'][$i]['video_color_table_id']    = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 68,  2));
 414.569 +
 414.570 +                                    $atom_structure['sample_description_table'][$i]['video_pixel_color_type']  = (($atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] > 32) ? 'grayscale' : 'color');
 414.571 +                                    $atom_structure['sample_description_table'][$i]['video_pixel_color_name']  = $this->QuicktimeColorNameLookup($atom_structure['sample_description_table'][$i]['video_pixel_color_depth']);
 414.572 +
 414.573 +                                    if ($atom_structure['sample_description_table'][$i]['video_pixel_color_name'] != 'invalid') {
 414.574 +                                        $info_quicktime['video']['codec_fourcc']        = $atom_structure['sample_description_table'][$i]['data_format'];
 414.575 +                                        $info_quicktime['video']['codec_fourcc_lookup'] = $this->QuicktimeVideoCodecLookup($atom_structure['sample_description_table'][$i]['data_format']);
 414.576 +                                        $info_quicktime['video']['codec']               = $atom_structure['sample_description_table'][$i]['video_encoder_name'];
 414.577 +                                        $info_quicktime['video']['color_depth']         = $atom_structure['sample_description_table'][$i]['video_pixel_color_depth'];
 414.578 +                                        $info_quicktime['video']['color_depth_name']    = $atom_structure['sample_description_table'][$i]['video_pixel_color_name'];
 414.579 +
 414.580 +                                        $info['video']['codec']           = $info_quicktime['video']['codec'];
 414.581 +                                        $info['video']['bits_per_sample'] = $info_quicktime['video']['color_depth'];
 414.582 +                                    }
 414.583 +                                    $info['video']['lossless']           = false;
 414.584 +                                    $info['video']['pixel_aspect_ratio'] = (float)1;
 414.585 +                                    break;
 414.586 +                            }
 414.587 +                            break;
 414.588 +                    }
 414.589 +                    switch (strtolower($atom_structure['sample_description_table'][$i]['data_format'])) {
 414.590 +                        case 'mp4a':
 414.591 +                            $info['audio']['dataformat'] = $info_quicktime['audio']['codec'] = 'mp4';
 414.592 +                            break;
 414.593 +
 414.594 +                        case '3ivx':
 414.595 +                        case '3iv1':
 414.596 +                        case '3iv2':
 414.597 +                            $info['video']['dataformat'] = '3ivx';
 414.598 +                            break;
 414.599 +
 414.600 +                        case 'xvid':
 414.601 +                            $info['video']['dataformat'] = 'xvid';
 414.602 +                            break;
 414.603 +
 414.604 +                        case 'mp4v':
 414.605 +                            $info['video']['dataformat'] = 'mpeg4';
 414.606 +                            break;
 414.607 +
 414.608 +                        case 'divx':
 414.609 +                        case 'div1':
 414.610 +                        case 'div2':
 414.611 +                        case 'div3':
 414.612 +                        case 'div4':
 414.613 +                        case 'div5':
 414.614 +                        case 'div6':
 414.615 +                            //$TDIVXileInfo['video']['dataformat'] = 'divx';
 414.616 +                            break;
 414.617 +
 414.618 +                        default:
 414.619 +                            // do nothing
 414.620 +                            break;
 414.621 +                    }
 414.622 +                    unset($atom_structure['sample_description_table'][$i]['data']);
 414.623 +                }
 414.624 +                break;
 414.625 +
 414.626 +
 414.627 +            case 'stts': // Sample Table Time-to-Sample atom
 414.628 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.629 +                    array (
 414.630 +                        'version'        => 1,
 414.631 +                        'flags_raw'      => 3, // hardcoded: 0x0000
 414.632 +                        'number_entries' => 4
 414.633 +                    )
 414.634 +                );
 414.635 +                
 414.636 +                $stts_entries_data_offset = 8;
 414.637 +                $frame_rate_calculator_array = array ();
 414.638 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.639 +                    
 414.640 +                    $atom_structure['time_to_sample_table'][$i]['sample_count']    = getid3_lib::BigEndian2Int(substr($atom_data, $stts_entries_data_offset, 4));
 414.641 +                    $stts_entries_data_offset += 4;
 414.642 +                    
 414.643 +                    $atom_structure['time_to_sample_table'][$i]['sample_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, $stts_entries_data_offset, 4));
 414.644 +                    $stts_entries_data_offset += 4;
 414.645 +
 414.646 +                    if (!empty($info_quicktime['time_scale']) && (@$atoms_structure['time_to_sample_table'][$i]['sample_duration'] > 0)) {                        
 414.647 +
 414.648 +                        $stts_new_framerate = $info_quicktime['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration'];
 414.649 +                        if ($stts_new_framerate <= 60) {
 414.650 +                            // some atoms have durations of "1" giving a very large framerate, which probably is not right
 414.651 +                            $info['video']['frame_rate'] = max(@$info['video']['frame_rate'], $stts_new_framerate);
 414.652 +                        }
 414.653 +                    }
 414.654 +                    //@$frame_rate_calculator_array[($info_quicktime['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration'])] += $atom_structure['time_to_sample_table'][$i]['sample_count'];
 414.655 +                }
 414.656 +                /*
 414.657 +                $stts_frames_total  = 0;
 414.658 +                $stts_seconds_total = 0;
 414.659 +                foreach ($frame_rate_calculator_array as $frames_per_second => $frame_count) {
 414.660 +                    if (($frames_per_second > 60) || ($frames_per_second < 1)) {
 414.661 +                        // not video FPS information, probably audio information
 414.662 +                        $stts_frames_total  = 0;
 414.663 +                        $stts_seconds_total = 0;
 414.664 +                        break;
 414.665 +                    }
 414.666 +                    $stts_frames_total  += $frame_count;
 414.667 +                    $stts_seconds_total += $frame_count / $frames_per_second;
 414.668 +                }
 414.669 +                if (($stts_frames_total > 0) && ($stts_seconds_total > 0)) {
 414.670 +                    if (($stts_frames_total / $stts_seconds_total) > @$info['video']['frame_rate']) {
 414.671 +                        $info['video']['frame_rate'] = $stts_frames_total / $stts_seconds_total;
 414.672 +                    }
 414.673 +                }
 414.674 +                */
 414.675 +                break;
 414.676 +
 414.677 +
 414.678 +            case 'stss': // Sample Table Sync Sample (key frames) atom
 414.679 +                /*
 414.680 +                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.681 +                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
 414.682 +                $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
 414.683 +                $stss_entries_data_offset = 8;
 414.684 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.685 +                    $atom_structure['time_to_sample_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stss_entries_data_offset, 4));
 414.686 +                    $stss_entries_data_offset += 4;
 414.687 +                }
 414.688 +                */
 414.689 +                break;
 414.690 +
 414.691 +
 414.692 +            case 'stsc': // Sample Table Sample-to-Chunk atom
 414.693 +                /*
 414.694 +                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.695 +                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
 414.696 +                $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
 414.697 +                $stsc_entries_data_offset = 8;
 414.698 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.699 +                    $atom_structure['sample_to_chunk_table'][$i]['first_chunk']        = getid3_lib::BigEndian2Int(substr($atom_data, $stsc_entries_data_offset, 4));
 414.700 +                    $stsc_entries_data_offset += 4;
 414.701 +                    $atom_structure['sample_to_chunk_table'][$i]['samples_per_chunk']  = getid3_lib::BigEndian2Int(substr($atom_data, $stsc_entries_data_offset, 4));
 414.702 +                    $stsc_entries_data_offset += 4;
 414.703 +                    $atom_structure['sample_to_chunk_table'][$i]['sample_description'] = getid3_lib::BigEndian2Int(substr($atom_data, $stsc_entries_data_offset, 4));
 414.704 +                    $stsc_entries_data_offset += 4;
 414.705 +                }
 414.706 +                */
 414.707 +                break;
 414.708 +
 414.709 +
 414.710 +            case 'stsz': // Sample Table SiZe atom
 414.711 +                /*
 414.712 +                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.713 +                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
 414.714 +                $atom_structure['sample_size']    = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
 414.715 +                $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
 414.716 +                $stsz_entries_data_offset = 12;
 414.717 +                if ($atom_structure['sample_size'] == 0) {
 414.718 +                    for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.719 +                        $atom_structure['sample_size_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stsz_entries_data_offset, 4));
 414.720 +                        $stsz_entries_data_offset += 4;
 414.721 +                    }
 414.722 +                }
 414.723 +                */
 414.724 +                break;
 414.725 +
 414.726 +
 414.727 +            case 'stco': // Sample Table Chunk Offset atom
 414.728 +                /*
 414.729 +                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.730 +                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
 414.731 +                $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
 414.732 +                $stco_entries_data_offset = 8;
 414.733 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.734 +                    $atom_structure['chunk_offset_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stco_entries_data_offset, 4));
 414.735 +                    $stco_entries_data_offset += 4;
 414.736 +                }
 414.737 +                */
 414.738 +                break;
 414.739 +
 414.740 +
 414.741 +            case 'dref': // Data REFerence atom
 414.742 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.743 +                    array (
 414.744 +                        'version'        => 1,
 414.745 +                        'flags_raw'      => 3, // hardcoded: 0x0000
 414.746 +                        'number_entries' => 4
 414.747 +                    )
 414.748 +                );
 414.749 +                
 414.750 +                $dref_data_offset = 8;
 414.751 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
 414.752 +                  
 414.753 +                    getid3_lib::ReadSequence('BigEndian2Int', $atom_structure['data_references'][$i], $atom_data, $dref_data_offset, 
 414.754 +                        array (
 414.755 +                            'size'      => 4,
 414.756 +                            'type'      => -4,
 414.757 +                            'version'   => 1,
 414.758 +                            'flags_raw' => 3  // hardcoded: 0x0000
 414.759 +                        )
 414.760 +                    );
 414.761 +                    $dref_data_offset += 12;
 414.762 +                  
 414.763 +                    $atom_structure['data_references'][$i]['data'] = substr($atom_data, $dref_data_offset, ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3));
 414.764 +                    $dref_data_offset += ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3);
 414.765 +
 414.766 +                    $atom_structure['data_references'][$i]['flags']['self_reference'] = (bool)($atom_structure['data_references'][$i]['flags_raw'] & 0x001);
 414.767 +                }
 414.768 +                break;
 414.769 +
 414.770 +
 414.771 +            case 'gmin': // base Media INformation atom
 414.772 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.773 +                    array (
 414.774 +                        'version'       => 1,
 414.775 +                        'flags_raw'     => 3, // hardcoded: 0x0000
 414.776 +                        'graphics_mode' => 2,
 414.777 +                        'opcolor_red'   => 2,
 414.778 +                        'opcolor_green' => 2,
 414.779 +                        'opcolor_blue'  => 2,
 414.780 +                        'balance'       => 2,
 414.781 +                        'reserved'      => 2
 414.782 +                    )
 414.783 +                );
 414.784 +                break;
 414.785 +
 414.786 +
 414.787 +            case 'smhd': // Sound Media information HeaDer atom
 414.788 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.789 +                    array (
 414.790 +                        'version'   => 1,
 414.791 +                        'flags_raw' => 3, // hardcoded: 0x0000
 414.792 +                        'balance'   => 2,
 414.793 +                        'reserved'  => 2
 414.794 +                    )
 414.795 +                );
 414.796 +                break;
 414.797 +
 414.798 +
 414.799 +            case 'vmhd': // Video Media information HeaDer atom
 414.800 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.801 +                    array (
 414.802 +                        'version'       => 1,
 414.803 +                        'flags_raw'     => 3,
 414.804 +                        'graphics_mode' => 2,
 414.805 +                        'opcolor_red'   => 2,
 414.806 +                        'opcolor_green' => 2,
 414.807 +                        'opcolor_blue'  => 2
 414.808 +                    )
 414.809 +                );
 414.810 +                $atom_structure['flags']['no_lean_ahead'] = (bool)($atom_structure['flags_raw'] & 0x001);
 414.811 +                break;
 414.812 +
 414.813 +
 414.814 +            case 'hdlr': // HanDLeR reference atom
 414.815 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.816 +                    array (
 414.817 +                        'version'                => 1,
 414.818 +                        'flags_raw'              => 3, // hardcoded: 0x0000
 414.819 +                        'component_type'         => -4,
 414.820 +                        'component_subtype'      => -4,
 414.821 +                        'component_manufacturer' => -4,
 414.822 +                        'component_flags_raw'    => 4,
 414.823 +                        'component_flags_mask'   => 4
 414.824 +                    )
 414.825 +                );
 414.826 +
 414.827 +                $atom_structure['component_name'] = substr(substr($atom_data, 24), 1);       /// Pascal2String
 414.828 +
 414.829 +                if (($atom_structure['component_subtype'] == 'STpn') && ($atom_structure['component_manufacturer'] == 'zzzz')) {
 414.830 +                    $info['video']['dataformat'] = 'quicktimevr';
 414.831 +                }
 414.832 +                break;
 414.833 +
 414.834 +
 414.835 +            case 'mdhd': // MeDia HeaDer atom
 414.836 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.837 +                    array (
 414.838 +                        'version'       => 1,
 414.839 +                        'flags_raw'     => 3, // hardcoded: 0x0000
 414.840 +                        'creation_time' => 4,
 414.841 +                        'modify_time'   => 4,
 414.842 +                        'time_scale'    => 4,
 414.843 +                        'duration'      => 4,
 414.844 +                        'language_id'   => 2,
 414.845 +                        'quality'       => 2
 414.846 +                    )
 414.847 +                );
 414.848 +
 414.849 +                if ($atom_structure['time_scale'] == 0) {
 414.850 +                    throw new getid3_exception('Corrupt Quicktime file: mdhd.time_scale == zero');
 414.851 +                }
 414.852 +                $info_quicktime['time_scale'] = max(@$info['quicktime']['time_scale'], $atom_structure['time_scale']);
 414.853 +                
 414.854 +                $atom_structure['creation_time_unix'] = (int)($atom_structure['creation_time'] - 2082844800); // DateMac2Unix()
 414.855 +                $atom_structure['modify_time_unix']   = (int)($atom_structure['modify_time']   - 2082844800); // DateMac2Unix()
 414.856 +                $atom_structure['playtime_seconds']   = $atom_structure['duration'] / $atom_structure['time_scale'];
 414.857 +                $atom_structure['language']           = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
 414.858 +                if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
 414.859 +                    $info['comments']['language'][] = $atom_structure['language'];
 414.860 +                }
 414.861 +                break;
 414.862 +
 414.863 +
 414.864 +            case 'pnot': // Preview atom
 414.865 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.866 +                    array (
 414.867 +                        'modification_date' => 4,   // "standard Macintosh format"
 414.868 +                        'version_number'    => 2,   // hardcoded: 0x00
 414.869 +                        'atom_type'         => -4,  // usually: 'PICT'
 414.870 +                        'atom_index'        => 2    // usually: 0x01
 414.871 +                    )
 414.872 +                );
 414.873 +                $atom_structure['modification_date_unix'] = (int)($atom_structure['modification_date'] - 2082844800); // DateMac2Unix()
 414.874 +                break;
 414.875 +
 414.876 +
 414.877 +            case 'crgn': // Clipping ReGioN atom
 414.878 +                $atom_structure['region_size']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 2)); // The Region size, Region boundary box,
 414.879 +                $atom_structure['boundary_box']  = getid3_lib::BigEndian2Int(substr($atom_data,  2, 8)); // and Clipping region data fields
 414.880 +                $atom_structure['clipping_data'] =                           substr($atom_data, 10);           // constitute a QuickDraw region.
 414.881 +                break;
 414.882 +
 414.883 +
 414.884 +            case 'load': // track LOAD settings atom
 414.885 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.886 +                    array (
 414.887 +                        'preload_start_time' => 4,
 414.888 +                        'preload_duration'   => 4,
 414.889 +                        'preload_flags_raw'  => 4,
 414.890 +                        'default_hints_raw'  => 4
 414.891 +                    )
 414.892 +                );
 414.893 +
 414.894 +                $atom_structure['default_hints']['double_buffer'] = (bool)($atom_structure['default_hints_raw'] & 0x0020);
 414.895 +                $atom_structure['default_hints']['high_quality']  = (bool)($atom_structure['default_hints_raw'] & 0x0100);
 414.896 +                break;
 414.897 +
 414.898 +
 414.899 +            case 'tmcd': // TiMe CoDe atom
 414.900 +            case 'chap': // CHAPter list atom
 414.901 +            case 'sync': // SYNChronization atom
 414.902 +            case 'scpt': // tranSCriPT atom
 414.903 +            case 'ssrc': // non-primary SouRCe atom
 414.904 +                for ($i = 0; $i < (strlen($atom_data) % 4); $i++) {
 414.905 +                    $atom_structure['track_id'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $i * 4, 4));
 414.906 +                }
 414.907 +                break;
 414.908 +
 414.909 +
 414.910 +            case 'elst': // Edit LiST atom
 414.911 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.912 +                    array (
 414.913 +                        'version'        => 1,
 414.914 +                        'flags_raw'      => 3, // hardcoded: 0x0000
 414.915 +                        'number_entries' => 4
 414.916 +                    )
 414.917 +                );    
 414.918 +                        
 414.919 +                for ($i = 0; $i < $atom_structure['number_entries']; $i++ ) {
 414.920 +                    $atom_structure['edit_list'][$i]['track_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 0, 4));
 414.921 +                    $atom_structure['edit_list'][$i]['media_time']     = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 4, 4));
 414.922 +                    $atom_structure['edit_list'][$i]['media_rate']     = getid3_quicktime::FixedPoint16_16(substr($atom_data, 8 + ($i * 12) + 8, 4));
 414.923 +                }
 414.924 +                break;
 414.925 +
 414.926 +
 414.927 +            case 'kmat': // compressed MATte atom
 414.928 +                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
 414.929 +                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
 414.930 +                $atom_structure['matte_data_raw'] =                           substr($atom_data,  4);
 414.931 +                break;
 414.932 +
 414.933 +
 414.934 +            case 'ctab': // Color TABle atom
 414.935 +                $atom_structure['color_table_seed']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4)); // hardcoded: 0x00000000
 414.936 +                $atom_structure['color_table_flags']  = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2)); // hardcoded: 0x8000
 414.937 +                $atom_structure['color_table_size']   = getid3_lib::BigEndian2Int(substr($atom_data,  6, 2)) + 1;
 414.938 +                for ($colortableentry = 0; $colortableentry < $atom_structure['color_table_size']; $colortableentry++) {
 414.939 +                    $atom_structure['color_table'][$colortableentry]['alpha'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 0, 2));
 414.940 +                    $atom_structure['color_table'][$colortableentry]['red']   = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 2, 2));
 414.941 +                    $atom_structure['color_table'][$colortableentry]['green'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 4, 2));
 414.942 +                    $atom_structure['color_table'][$colortableentry]['blue']  = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 6, 2));
 414.943 +                }
 414.944 +                break;
 414.945 +
 414.946 +
 414.947 +            case 'mvhd': // MoVie HeaDer atom
 414.948 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.949 +                    array (
 414.950 +                        'version'       => 1,
 414.951 +                        'flags_raw'     => 3,
 414.952 +                        'creation_time' => 4,
 414.953 +                        'modify_time'   => 4,
 414.954 +                        'time_scale'    => 4,
 414.955 +                        'duration'      => 4
 414.956 +                    )
 414.957 +                );
 414.958 +
 414.959 +                $atom_structure['preferred_rate']     = getid3_quicktime::FixedPoint16_16(substr($atom_data, 20, 4));
 414.960 +                $atom_structure['preferred_volume']   =   getid3_quicktime::FixedPoint8_8(substr($atom_data, 24, 2));
 414.961 +                $atom_structure['reserved']           =                                   substr($atom_data, 26, 10);
 414.962 +                $atom_structure['matrix_a']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 36, 4));
 414.963 +                $atom_structure['matrix_b']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 40, 4));
 414.964 +                $atom_structure['matrix_u']           =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 44, 4));
 414.965 +                $atom_structure['matrix_c']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 48, 4));
 414.966 +                $atom_structure['matrix_d']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 52, 4));
 414.967 +                $atom_structure['matrix_v']           =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 56, 4));
 414.968 +                $atom_structure['matrix_x']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 60, 4));
 414.969 +                $atom_structure['matrix_y']           = getid3_quicktime::FixedPoint16_16(substr($atom_data, 64, 4));
 414.970 +                $atom_structure['matrix_w']           =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 68, 4));
 414.971 +                
 414.972 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 72, 
 414.973 +                    array (
 414.974 +                        'preview_time'       => 4,
 414.975 +                        'preview_duration'   => 4,
 414.976 +                        'poster_time'        => 4,
 414.977 +                        'selection_time'     => 4,
 414.978 +                        'selection_duration' => 4,
 414.979 +                        'current_time'       => 4,
 414.980 +                        'next_track_id'      => 4
 414.981 +                    )
 414.982 +                );
 414.983 +
 414.984 +                if ($atom_structure['time_scale'] == 0) {
 414.985 +                    throw new getid3_exception('Corrupt Quicktime file: mvhd.time_scale == zero');
 414.986 +                }
 414.987 +                
 414.988 +                $atom_structure['creation_time_unix']        = (int)($atom_structure['creation_time'] - 2082844800); // DateMac2Unix()
 414.989 +                $atom_structure['modify_time_unix']          = (int)($atom_structure['modify_time']   - 2082844800); // DateMac2Unix()
 414.990 +                $info_quicktime['time_scale'] = max(@$info['quicktime']['time_scale'], $atom_structure['time_scale']);
 414.991 +                $info_quicktime['display_scale'] = $atom_structure['matrix_a'];
 414.992 +                $info['playtime_seconds']           = $atom_structure['duration'] / $atom_structure['time_scale'];
 414.993 +                break;
 414.994 +
 414.995 +
 414.996 +            case 'tkhd': // TracK HeaDer atom
 414.997 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
 414.998 +                    array (
 414.999 +                        'version'         => 1,
414.1000 +                        'flags_raw'       => 3,
414.1001 +                        'creation_time'   => 4,
414.1002 +                        'modify_time'     => 4,
414.1003 +                        'trackid'         => 4,
414.1004 +                        'reserved1'       => 4,
414.1005 +                        'duration'        => 4,
414.1006 +                        'reserved2'       => 8,
414.1007 +                        'layer'           => 2,
414.1008 +                        'alternate_group' => 2
414.1009 +                    )
414.1010 +                );
414.1011 +                
414.1012 +                $atom_structure['volume']              =   getid3_quicktime::FixedPoint8_8(substr($atom_data, 36, 2));
414.1013 +                $atom_structure['reserved3']           =         getid3_lib::BigEndian2Int(substr($atom_data, 38, 2));
414.1014 +                $atom_structure['matrix_a']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 40, 4));
414.1015 +                $atom_structure['matrix_b']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 44, 4));
414.1016 +                $atom_structure['matrix_u']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 48, 4));
414.1017 +                $atom_structure['matrix_c']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 52, 4));
414.1018 +                $atom_structure['matrix_v']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 56, 4));
414.1019 +                $atom_structure['matrix_d']            = getid3_quicktime::FixedPoint16_16(substr($atom_data, 60, 4));
414.1020 +                $atom_structure['matrix_x']            =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 64, 4));
414.1021 +                $atom_structure['matrix_y']            =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 68, 4));
414.1022 +                $atom_structure['matrix_w']            =  getid3_quicktime::FixedPoint2_30(substr($atom_data, 72, 4));
414.1023 +                $atom_structure['width']               = getid3_quicktime::FixedPoint16_16(substr($atom_data, 76, 4));
414.1024 +                $atom_structure['height']              = getid3_quicktime::FixedPoint16_16(substr($atom_data, 80, 4));
414.1025 +
414.1026 +                $atom_structure['flags']['enabled']    = (bool)($atom_structure['flags_raw'] & 0x0001);
414.1027 +                $atom_structure['flags']['in_movie']   = (bool)($atom_structure['flags_raw'] & 0x0002);
414.1028 +                $atom_structure['flags']['in_preview'] = (bool)($atom_structure['flags_raw'] & 0x0004);
414.1029 +                $atom_structure['flags']['in_poster']  = (bool)($atom_structure['flags_raw'] & 0x0008);
414.1030 +                $atom_structure['creation_time_unix']  = (int)($atom_structure['creation_time'] - 2082844800); // DateMac2Unix()
414.1031 +                $atom_structure['modify_time_unix']    = (int)($atom_structure['modify_time']   - 2082844800); // DateMac2Unix()
414.1032 +
414.1033 +                if (!isset($info['video']['resolution_x']) || !isset($info['video']['resolution_y'])) {
414.1034 +                    $info['video']['resolution_x'] = $atom_structure['width'];
414.1035 +                    $info['video']['resolution_y'] = $atom_structure['height'];
414.1036 +                }
414.1037 +                
414.1038 +                if ($atom_structure['flags']['enabled'] == 1) {
414.1039 +                    $info['video']['resolution_x'] = max($info['video']['resolution_x'], $atom_structure['width']);
414.1040 +                    $info['video']['resolution_y'] = max($info['video']['resolution_y'], $atom_structure['height']);
414.1041 +                }
414.1042 +                
414.1043 +                if (!empty($info['video']['resolution_x']) && !empty($info['video']['resolution_y'])) {
414.1044 +                    $info_quicktime['video']['resolution_x'] = $info['video']['resolution_x'];
414.1045 +                    $info_quicktime['video']['resolution_y'] = $info['video']['resolution_y'];
414.1046 +                } else {
414.1047 +                    unset($info['video']['resolution_x']);
414.1048 +                    unset($info['video']['resolution_y']);
414.1049 +                    unset($info_quicktime['video']);
414.1050 +                }
414.1051 +                break;
414.1052 +
414.1053 +
414.1054 +            case 'meta': // METAdata atom
414.1055 +                // http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt
414.1056 +                $next_tag_position = strpos($atom_data, '©');
414.1057 +                while ($next_tag_position < strlen($atom_data)) {
414.1058 +                    $meta_item_size = getid3_lib::BigEndian2Int(substr($atom_data, $next_tag_position - 4, 4)) - 4;
414.1059 +                    if ($meta_item_size == -4) {
414.1060 +                        break;
414.1061 +                    }
414.1062 +                    $meta_item_raw  = substr($atom_data, $next_tag_position, $meta_item_size);
414.1063 +                    $meta_item_key  = substr($meta_item_raw, 0, 4);
414.1064 +                    $meta_item_data = substr($meta_item_raw, 20);
414.1065 +                    $next_tag_position += $meta_item_size + 4;
414.1066 +
414.1067 +                    $this->CopyToAppropriateCommentsSection($meta_item_key, $meta_item_data);
414.1068 +                }
414.1069 +                break;
414.1070 +
414.1071 +            case 'ftyp': // FileTYPe (?) atom (for MP4 it seems)
414.1072 +                getid3_lib::ReadSequence('BigEndian2Int', $atom_structure, $atom_data, 0, 
414.1073 +                    array (
414.1074 +                        'signature' => -4,
414.1075 +                        'unknown_1' => 4,
414.1076 +                        'fourcc'    => -4,
414.1077 +                    )
414.1078 +                );
414.1079 +                break;
414.1080 +
414.1081 +            case 'mdat': // Media DATa atom
414.1082 +            case 'free': // FREE space atom
414.1083 +            case 'skip': // SKIP atom
414.1084 +            case 'wide': // 64-bit expansion placeholder atom
414.1085 +                // 'mdat' data is too big to deal with, contains no useful metadata
414.1086 +                // 'free', 'skip' and 'wide' are just padding, contains no useful data at all
414.1087 +
414.1088 +                // When writing QuickTime files, it is sometimes necessary to update an atom's size.
414.1089 +                // It is impossible to update a 32-bit atom to a 64-bit atom since the 32-bit atom
414.1090 +                // is only 8 bytes in size, and the 64-bit atom requires 16 bytes. Therefore, QuickTime
414.1091 +                // puts an 8-byte placeholder atom before any atoms it may have to update the size of.
414.1092 +                // In this way, if the atom needs to be converted from a 32-bit to a 64-bit atom, the
414.1093 +                // placeholder atom can be overwritten to obtain the necessary 8 extra bytes.
414.1094 +                // The placeholder atom has a type of kWideAtomPlaceholderType ( 'wide' ).
414.1095 +                break;
414.1096 +
414.1097 +
414.1098 +            case 'nsav': // NoSAVe atom
414.1099 +                // http://developer.apple.com/technotes/tn/tn2038.html
414.1100 +                $atom_structure['data'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4));
414.1101 +                break;
414.1102 +
414.1103 +            case 'ctyp': // Controller TYPe atom (seen on QTVR)
414.1104 +                // http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt
414.1105 +                // some controller names are:
414.1106 +                //   0x00 + 'std' for linear movie
414.1107 +                //   'none' for no controls
414.1108 +                $atom_structure['ctyp'] = substr($atom_data, 0, 4);
414.1109 +                switch ($atom_structure['ctyp']) {
414.1110 +                    case 'qtvr':
414.1111 +                        $info['video']['dataformat'] = 'quicktimevr';
414.1112 +                        break;
414.1113 +                }
414.1114 +                break;
414.1115 +
414.1116 +            case 'pano': // PANOrama track (seen on QTVR)
414.1117 +                $atom_structure['pano'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4));
414.1118 +                break;
414.1119 +                
414.1120 +             case 'hint': // HINT track
414.1121 +             case 'hinf': //
414.1122 +             case 'hinv': //
414.1123 +             case 'hnti': //
414.1124 +                     $info['quicktime']['hinting'] = true;
414.1125 +                     break;
414.1126 +
414.1127 +            case 'imgt': // IMaGe Track reference (kQTVRImageTrackRefType) (seen on QTVR)
414.1128 +                for ($i = 0; $i < ($atom_structure['size'] - 8); $i += 4) {
414.1129 +                    $atom_structure['imgt'][] = getid3_lib::BigEndian2Int(substr($atom_data, $i, 4));
414.1130 +                }
414.1131 +                break;
414.1132 +
414.1133 +            case 'FXTC': // Something to do with Adobe After Effects (?)
414.1134 +            case 'PrmA':
414.1135 +            case 'code':
414.1136 +            case 'FIEL': // this is NOT "fiel" (Field Ordering) as describe here: http://developer.apple.com/documentation/QuickTime/QTFF/QTFFChap3/chapter_4_section_2.html
414.1137 +                // Observed-but-not-handled atom types are just listed here
414.1138 +                // to prevent warnings being generated
414.1139 +                $atom_structure['data'] = $atom_data;
414.1140 +                break;
414.1141 +
414.1142 +            default:
414.1143 +                $getid3->warning('Unknown QuickTime atom type: "'.$atom_name.'" at offset '.$base_offset);
414.1144 +                $atom_structure['data'] = $atom_data;
414.1145 +                break;
414.1146 +        }
414.1147 +        array_pop($atom_hierarchy);
414.1148 +        return $atom_structure;
414.1149 +    }
414.1150 +
414.1151 +
414.1152 +
414.1153 +    private function QuicktimeParseContainerAtom($atom_data, $base_offset, &$atom_hierarchy) {
414.1154 +        
414.1155 +        if ((strlen($atom_data) == 4) && (getid3_lib::BigEndian2Int($atom_data) == 0x00000000)) {
414.1156 +            return false;
414.1157 +        }
414.1158 +        
414.1159 +        $atom_structure = false;
414.1160 +        $subatom_offset = 0;
414.1161 +        
414.1162 +        while ($subatom_offset < strlen($atom_data)) {
414.1163 +         
414.1164 +            $subatom_size = getid3_lib::BigEndian2Int(substr($atom_data, $subatom_offset + 0, 4));
414.1165 +            $subatom_name =                           substr($atom_data, $subatom_offset + 4, 4);
414.1166 +            $subatom_data =                           substr($atom_data, $subatom_offset + 8, $subatom_size - 8);
414.1167 +            
414.1168 +            if ($subatom_size == 0) {
414.1169 +                // Furthermore, for historical reasons the list of atoms is optionally
414.1170 +                // terminated by a 32-bit integer set to 0. If you are writing a program
414.1171 +                // to read user data atoms, you should allow for the terminating 0.
414.1172 +                return $atom_structure;
414.1173 +            }
414.1174 +
414.1175 +            $atom_structure[] = $this->QuicktimeParseAtom($subatom_name, $subatom_size, $subatom_data, $base_offset + $subatom_offset, $atom_hierarchy);
414.1176 +
414.1177 +            $subatom_offset += $subatom_size;
414.1178 +        }
414.1179 +        return $atom_structure;
414.1180 +    }
414.1181 +    
414.1182 +    
414.1183 +    
414.1184 +    private function CopyToAppropriateCommentsSection($key_name, $data) {
414.1185 +
414.1186 +        // http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
414.1187 +
414.1188 +        static $translator = array (
414.1189 +            '©cpy' => 'copyright',
414.1190 +            '©day' => 'creation_date',
414.1191 +            '©dir' => 'director',
414.1192 +            '©ed1' => 'edit1',
414.1193 +            '©ed2' => 'edit2',
414.1194 +            '©ed3' => 'edit3',
414.1195 +            '©ed4' => 'edit4',
414.1196 +            '©ed5' => 'edit5',
414.1197 +            '©ed6' => 'edit6',
414.1198 +            '©ed7' => 'edit7',
414.1199 +            '©ed8' => 'edit8',
414.1200 +            '©ed9' => 'edit9',
414.1201 +            '©fmt' => 'format',
414.1202 +            '©inf' => 'information',
414.1203 +            '©prd' => 'producer',
414.1204 +            '©prf' => 'performers',
414.1205 +            '©req' => 'system_requirements',
414.1206 +            '©src' => 'source_credit',
414.1207 +            '©wrt' => 'writer',
414.1208 +            '©nam' => 'title',
414.1209 +            '©cmt' => 'comment',
414.1210 +            '©wrn' => 'warning',
414.1211 +            '©hst' => 'host_computer',
414.1212 +            '©mak' => 'make',
414.1213 +            '©mod' => 'model',
414.1214 +            '©PRD' => 'product',
414.1215 +            '©swr' => 'software',
414.1216 +            '©aut' => 'author',
414.1217 +            '©ART' => 'artist',
414.1218 +            '©trk' => 'track',
414.1219 +            '©alb' => 'album',
414.1220 +            '©com' => 'comment',
414.1221 +            '©gen' => 'genre',
414.1222 +            '©ope' => 'composer',
414.1223 +            '©url' => 'url',
414.1224 +            '©enc' => 'encoder'
414.1225 +        );
414.1226 +
414.1227 +        if (isset($translator[$key_name])) {
414.1228 +            $this->getid3->info['quicktime']['comments'][$translator[$key_name]][] = $data;
414.1229 +        }
414.1230 +
414.1231 +        return true;
414.1232 +    }
414.1233 +
414.1234 +
414.1235 +
414.1236 +    public static function QuicktimeLanguageLookup($language_id) {
414.1237 +
414.1238 +        static $lookup = array (
414.1239 +            0   => 'English',
414.1240 +            1   => 'French',
414.1241 +            2   => 'German',
414.1242 +            3   => 'Italian',
414.1243 +            4   => 'Dutch',
414.1244 +            5   => 'Swedish',
414.1245 +            6   => 'Spanish',
414.1246 +            7   => 'Danish',
414.1247 +            8   => 'Portuguese',
414.1248 +            9   => 'Norwegian',
414.1249 +            10  => 'Hebrew',
414.1250 +            11  => 'Japanese',
414.1251 +            12  => 'Arabic',
414.1252 +            13  => 'Finnish',
414.1253 +            14  => 'Greek',
414.1254 +            15  => 'Icelandic',
414.1255 +            16  => 'Maltese',
414.1256 +            17  => 'Turkish',
414.1257 +            18  => 'Croatian',
414.1258 +            19  => 'Chinese (Traditional)',
414.1259 +            20  => 'Urdu',
414.1260 +            21  => 'Hindi',
414.1261 +            22  => 'Thai',
414.1262 +            23  => 'Korean',
414.1263 +            24  => 'Lithuanian',
414.1264 +            25  => 'Polish',
414.1265 +            26  => 'Hungarian',
414.1266 +            27  => 'Estonian',
414.1267 +            28  => 'Lettish',
414.1268 +            28  => 'Latvian',
414.1269 +            29  => 'Saamisk',
414.1270 +            29  => 'Lappish',
414.1271 +            30  => 'Faeroese',
414.1272 +            31  => 'Farsi',
414.1273 +            31  => 'Persian',
414.1274 +            32  => 'Russian',
414.1275 +            33  => 'Chinese (Simplified)',
414.1276 +            34  => 'Flemish',
414.1277 +            35  => 'Irish',
414.1278 +            36  => 'Albanian',
414.1279 +            37  => 'Romanian',
414.1280 +            38  => 'Czech',
414.1281 +            39  => 'Slovak',
414.1282 +            40  => 'Slovenian',
414.1283 +            41  => 'Yiddish',
414.1284 +            42  => 'Serbian',
414.1285 +            43  => 'Macedonian',
414.1286 +            44  => 'Bulgarian',
414.1287 +            45  => 'Ukrainian',
414.1288 +            46  => 'Byelorussian',
414.1289 +            47  => 'Uzbek',
414.1290 +            48  => 'Kazakh',
414.1291 +            49  => 'Azerbaijani',
414.1292 +            50  => 'AzerbaijanAr',
414.1293 +            51  => 'Armenian',
414.1294 +            52  => 'Georgian',
414.1295 +            53  => 'Moldavian',
414.1296 +            54  => 'Kirghiz',
414.1297 +            55  => 'Tajiki',
414.1298 +            56  => 'Turkmen',
414.1299 +            57  => 'Mongolian',
414.1300 +            58  => 'MongolianCyr',
414.1301 +            59  => 'Pashto',
414.1302 +            60  => 'Kurdish',
414.1303 +            61  => 'Kashmiri',
414.1304 +            62  => 'Sindhi',
414.1305 +            63  => 'Tibetan',
414.1306 +            64  => 'Nepali',
414.1307 +            65  => 'Sanskrit',
414.1308 +            66  => 'Marathi',
414.1309 +            67  => 'Bengali',
414.1310 +            68  => 'Assamese',
414.1311 +            69  => 'Gujarati',
414.1312 +            70  => 'Punjabi',
414.1313 +            71  => 'Oriya',
414.1314 +            72  => 'Malayalam',
414.1315 +            73  => 'Kannada',
414.1316 +            74  => 'Tamil',
414.1317 +            75  => 'Telugu',
414.1318 +            76  => 'Sinhalese',
414.1319 +            77  => 'Burmese',
414.1320 +            78  => 'Khmer',
414.1321 +            79  => 'Lao',
414.1322 +            80  => 'Vietnamese',
414.1323 +            81  => 'Indonesian',
414.1324 +            82  => 'Tagalog',
414.1325 +            83  => 'MalayRoman',
414.1326 +            84  => 'MalayArabic',
414.1327 +            85  => 'Amharic',
414.1328 +            86  => 'Tigrinya',
414.1329 +            87  => 'Galla',
414.1330 +            87  => 'Oromo',
414.1331 +            88  => 'Somali',
414.1332 +            89  => 'Swahili',
414.1333 +            90  => 'Ruanda',
414.1334 +            91  => 'Rundi',
414.1335 +            92  => 'Chewa',
414.1336 +            93  => 'Malagasy',
414.1337 +            94  => 'Esperanto',
414.1338 +            128 => 'Welsh',
414.1339 +            129 => 'Basque',
414.1340 +            130 => 'Catalan',
414.1341 +            131 => 'Latin',
414.1342 +            132 => 'Quechua',
414.1343 +            133 => 'Guarani',
414.1344 +            134 => 'Aymara',
414.1345 +            135 => 'Tatar',
414.1346 +            136 => 'Uighur',
414.1347 +            137 => 'Dzongkha',
414.1348 +            138 => 'JavaneseRom'
414.1349 +        );
414.1350 +        
414.1351 +        return (isset($lookup[$language_id]) ? $lookup[$language_id] : 'invalid');
414.1352 +    }
414.1353 +
414.1354 +
414.1355 +
414.1356 +    public static function QuicktimeVideoCodecLookup($codec_id) {
414.1357 +
414.1358 +        static $lookup = array (
414.1359 +            '3IVX' => '3ivx MPEG-4',
414.1360 +            '3IV1' => '3ivx MPEG-4 v1',
414.1361 +            '3IV2' => '3ivx MPEG-4 v2',
414.1362 +            'avr ' => 'AVR-JPEG',
414.1363 +            'base' => 'Base',
414.1364 +            'WRLE' => 'BMP',
414.1365 +            'cvid' => 'Cinepak',
414.1366 +            'clou' => 'Cloud',
414.1367 +            'cmyk' => 'CMYK',
414.1368 +            'yuv2' => 'ComponentVideo',
414.1369 +            'yuvu' => 'ComponentVideoSigned',
414.1370 +            'yuvs' => 'ComponentVideoUnsigned',
414.1371 +            'dvc ' => 'DVC-NTSC',
414.1372 +            'dvcp' => 'DVC-PAL',
414.1373 +            'dvpn' => 'DVCPro-NTSC',
414.1374 +            'dvpp' => 'DVCPro-PAL',
414.1375 +            'fire' => 'Fire',
414.1376 +            'flic' => 'FLC',
414.1377 +            'b48r' => '48RGB',
414.1378 +            'gif ' => 'GIF',
414.1379 +            'smc ' => 'Graphics',
414.1380 +            'h261' => 'H261',
414.1381 +            'h263' => 'H263',
414.1382 +            'IV41' => 'Indeo4',
414.1383 +            'jpeg' => 'JPEG',
414.1384 +            'PNTG' => 'MacPaint',
414.1385 +            'msvc' => 'Microsoft Video1',
414.1386 +            'mjpa' => 'Motion JPEG-A',
414.1387 +            'mjpb' => 'Motion JPEG-B',
414.1388 +            'myuv' => 'MPEG YUV420',
414.1389 +            'dmb1' => 'OpenDML JPEG',
414.1390 +            'kpcd' => 'PhotoCD',
414.1391 +            '8BPS' => 'Planar RGB',
414.1392 +            'png ' => 'PNG',
414.1393 +            'qdrw' => 'QuickDraw',
414.1394 +            'qdgx' => 'QuickDrawGX',
414.1395 +            'raw ' => 'RAW',
414.1396 +            '.SGI' => 'SGI',
414.1397 +            'b16g' => '16Gray',
414.1398 +            'b64a' => '64ARGB',
414.1399 +            'SVQ1' => 'Sorenson Video 1',
414.1400 +            'SVQ1' => 'Sorenson Video 3',
414.1401 +            'syv9' => 'Sorenson YUV9',
414.1402 +            'tga ' => 'Targa',
414.1403 +            'b32a' => '32AlphaGray',
414.1404 +            'tiff' => 'TIFF',
414.1405 +            'path' => 'Vector',
414.1406 +            'rpza' => 'Video',
414.1407 +            'ripl' => 'WaterRipple',
414.1408 +            'WRAW' => 'Windows RAW',
414.1409 +            'y420' => 'YUV420'
414.1410 +        );
414.1411 +        
414.1412 +        return (isset($lookup[$codec_id]) ? $lookup[$codec_id] : '');
414.1413 +    }
414.1414 +
414.1415 +
414.1416 +
414.1417 +    public static function QuicktimeAudioCodecLookup($codec_id) {
414.1418 +
414.1419 +        static $lookup = array (
414.1420 +            '.mp3'          => 'Fraunhofer MPEG Layer-III alias',
414.1421 +            'aac '          => 'ISO/IEC 14496-3 AAC',
414.1422 +            'agsm'          => 'Apple GSM 10:1',
414.1423 +            'alac'          => 'Apple Lossless Audio Codec',
414.1424 +            'alaw'          => 'A-law 2:1',
414.1425 +            'conv'          => 'Sample Format',
414.1426 +            'dvca'          => 'DV',
414.1427 +            'dvi '          => 'DV 4:1',
414.1428 +            'eqal'          => 'Frequency Equalizer',
414.1429 +            'fl32'          => '32-bit Floating Point',
414.1430 +            'fl64'          => '64-bit Floating Point',
414.1431 +            'ima4'          => 'Interactive Multimedia Association 4:1',
414.1432 +            'in24'          => '24-bit Integer',
414.1433 +            'in32'          => '32-bit Integer',
414.1434 +            'lpc '          => 'LPC 23:1',
414.1435 +            'MAC3'          => 'Macintosh Audio Compression/Expansion (MACE) 3:1',
414.1436 +            'MAC6'          => 'Macintosh Audio Compression/Expansion (MACE) 6:1',
414.1437 +            'mixb'          => '8-bit Mixer',
414.1438 +            'mixw'          => '16-bit Mixer',
414.1439 +            'mp4a'          => 'ISO/IEC 14496-3 AAC',
414.1440 +            "MS'\x00\x02"   => 'Microsoft ADPCM',
414.1441 +            "MS'\x00\x11"   => 'DV IMA',
414.1442 +            "MS\x00\x55"    => 'Fraunhofer MPEG Layer III',
414.1443 +            'NONE'          => 'No Encoding',
414.1444 +            'Qclp'          => 'Qualcomm PureVoice',
414.1445 +            'QDM2'          => 'QDesign Music 2',
414.1446 +            'QDMC'          => 'QDesign Music 1',
414.1447 +            'ratb'          => '8-bit Rate',
414.1448 +            'ratw'          => '16-bit Rate',
414.1449 +            'raw '          => 'raw PCM',
414.1450 +            'sour'          => 'Sound Source',
414.1451 +            'sowt'          => 'signed/two\'s complement (Little Endian)',
414.1452 +            'str1'          => 'Iomega MPEG layer II',
414.1453 +            'str2'          => 'Iomega MPEG *layer II',
414.1454 +            'str3'          => 'Iomega MPEG **layer II',
414.1455 +            'str4'          => 'Iomega MPEG ***layer II',
414.1456 +            'twos'          => 'signed/two\'s complement (Big Endian)',
414.1457 +            'ulaw'          => 'mu-law 2:1',
414.1458 +        );
414.1459 +        
414.1460 +        return (isset($lookup[$codec_id]) ? $lookup[$codec_id] : '');
414.1461 +    }
414.1462 +
414.1463 +
414.1464 +
414.1465 +    public static function QuicktimeDCOMLookup($compression_id) {
414.1466 +
414.1467 +        static $lookup = array (
414.1468 +            'zlib' => 'ZLib Deflate',
414.1469 +            'adec' => 'Apple Compression'
414.1470 +        );
414.1471 +
414.1472 +        return (isset($lookup[$compression_id]) ? $lookup[$compression_id] : '');
414.1473 +    }
414.1474 +
414.1475 +
414.1476 +
414.1477 +    public static function QuicktimeColorNameLookup($color_depth_id) {
414.1478 +  
414.1479 +        static $lookup = array (
414.1480 +            1  => '2-color (monochrome)',
414.1481 +            2  => '4-color',
414.1482 +            4  => '16-color',
414.1483 +            8  => '256-color',
414.1484 +            16 => 'thousands (16-bit color)',
414.1485 +            24 => 'millions (24-bit color)',
414.1486 +            32 => 'millions+ (32-bit color)',
414.1487 +            33 => 'black & white',
414.1488 +            34 => '4-gray',
414.1489 +            36 => '16-gray',
414.1490 +            40 => '256-gray',
414.1491 +        );
414.1492 +        
414.1493 +        return (isset($lookup[$color_depth_id]) ? $lookup[$color_depth_id] : 'invalid');
414.1494 +    }
414.1495 +
414.1496 +
414.1497 +
414.1498 +    public static function NoNullString($null_terminated_string) {
414.1499 +
414.1500 +        // remove the single null terminator on null terminated strings
414.1501 +        if (substr($null_terminated_string, strlen($null_terminated_string) - 1, 1) === "\x00") {
414.1502 +            return substr($null_terminated_string, 0, strlen($null_terminated_string) - 1);
414.1503 +        }
414.1504 +        
414.1505 +        return $null_terminated_string;
414.1506 +    }
414.1507 +    
414.1508 +    
414.1509 +    
414.1510 +    public static function FixedPoint8_8($raw_data) {
414.1511 +
414.1512 +        return getid3_lib::BigEndian2Int($raw_data{0}) + (float)(getid3_lib::BigEndian2Int($raw_data{1}) / 256);
414.1513 +    }
414.1514 +
414.1515 +
414.1516 +
414.1517 +    public static function FixedPoint16_16($raw_data) {
414.1518 +        
414.1519 +        return getid3_lib::BigEndian2Int(substr($raw_data, 0, 2)) + (float)(getid3_lib::BigEndian2Int(substr($raw_data, 2, 2)) / 65536);
414.1520 +    }
414.1521 +
414.1522 +
414.1523 +
414.1524 +    public static function FixedPoint2_30($raw_data) {
414.1525 +        
414.1526 +        $binary_string = getid3_lib::BigEndian2Bin($raw_data);
414.1527 +        return bindec(substr($binary_string, 0, 2)) + (float)(bindec(substr($binary_string, 2, 30)) / 1073741824);
414.1528 +    }
414.1529 +
414.1530 +}
414.1531 +
414.1532 +?>
414.1533 \ No newline at end of file
   415.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   415.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.real.php	Mon Feb 22 08:02:39 2010 -0500
   415.3 @@ -0,0 +1,591 @@
   415.4 +<?php
   415.5 +// +----------------------------------------------------------------------+
   415.6 +// | PHP version 5                                                        |
   415.7 +// +----------------------------------------------------------------------+
   415.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   415.9 +// +----------------------------------------------------------------------+
  415.10 +// | This source file is subject to version 2 of the GPL license,         |
  415.11 +// | that is bundled with this package in the file license.txt and is     |
  415.12 +// | available through the world-wide-web at the following url:           |
  415.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  415.14 +// +----------------------------------------------------------------------+
  415.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  415.16 +// +----------------------------------------------------------------------+
  415.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  415.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  415.19 +// +----------------------------------------------------------------------+
  415.20 +// | module.audio-video.real.php                                          |
  415.21 +// | Module for analyzing Real Audio/Video files                          |
  415.22 +// | dependencies: module.audio-video.riff.php                            |
  415.23 +// +----------------------------------------------------------------------+
  415.24 +//
  415.25 +// $Id: module.audio-video.real.php,v 1.4 2006/11/02 10:48:00 ah Exp $
  415.26 +
  415.27 +        
  415.28 +        
  415.29 +class getid3_real extends getid3_handler
  415.30 +{
  415.31 +
  415.32 +    public function Analyze() {
  415.33 +        
  415.34 +        $getid3 = $this->getid3;
  415.35 +        
  415.36 +        $getid3->include_module('audio-video.riff');
  415.37 +
  415.38 +        $getid3->info['fileformat']       = 'real';
  415.39 +        $getid3->info['bitrate']          = 0;
  415.40 +        $getid3->info['playtime_seconds'] = 0;
  415.41 +
  415.42 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  415.43 +        $chunk_counter = 0;
  415.44 +
  415.45 +        while (ftell($getid3->fp) < $getid3->info['avdataend']) {
  415.46 +            
  415.47 +            $chunk_data = fread($getid3->fp, 8);
  415.48 +            $chunk_name =                           substr($chunk_data, 0, 4);
  415.49 +            $chunk_size = getid3_lib::BigEndian2Int(substr($chunk_data, 4, 4));
  415.50 +
  415.51 +            if ($chunk_name == '.ra'."\xFD") {
  415.52 +                $chunk_data .= fread($getid3->fp, $chunk_size - 8);
  415.53 +                
  415.54 +                if ($this->ParseOldRAheader(substr($chunk_data, 0, 128), $getid3->info['real']['old_ra_header'])) {
  415.55 +                
  415.56 +                    $getid3->info['audio']['dataformat']      = 'real';
  415.57 +                    $getid3->info['audio']['lossless']        = false;
  415.58 +                    $getid3->info['audio']['sample_rate']     = $getid3->info['real']['old_ra_header']['sample_rate'];
  415.59 +                    $getid3->info['audio']['bits_per_sample'] = $getid3->info['real']['old_ra_header']['bits_per_sample'];
  415.60 +                    $getid3->info['audio']['channels']        = $getid3->info['real']['old_ra_header']['channels'];
  415.61 +
  415.62 +                    $getid3->info['playtime_seconds']         = 60 * ($getid3->info['real']['old_ra_header']['audio_bytes'] / $getid3->info['real']['old_ra_header']['bytes_per_minute']);
  415.63 +                    $getid3->info['audio']['bitrate']         =  8 * ($getid3->info['real']['old_ra_header']['audio_bytes'] / $getid3->info['playtime_seconds']);
  415.64 +                    $getid3->info['audio']['codec']           = $this->RealAudioCodecFourCClookup($getid3->info['real']['old_ra_header']['fourcc'], $getid3->info['audio']['bitrate']);
  415.65 +
  415.66 +                    foreach ($getid3->info['real']['old_ra_header']['comments'] as $key => $value_array) {
  415.67 +                
  415.68 +                        if (strlen(trim($value_array[0])) > 0) {
  415.69 +                            $getid3->info['real']['comments'][$key][] = trim($value_array[0]);
  415.70 +                        }
  415.71 +                    }
  415.72 +                    return true;
  415.73 +                }
  415.74 +                
  415.75 +                throw new getid3_exception('There was a problem parsing this RealAudio file. Please submit it for analysis to http://www.getid3.org/upload/ or info@getid3.org');
  415.76 +            }
  415.77 +
  415.78 +            $getid3->info['real']['chunks'][$chunk_counter] = array ();
  415.79 +            $info_real_chunks_current_chunk = &$getid3->info['real']['chunks'][$chunk_counter];
  415.80 +
  415.81 +            $info_real_chunks_current_chunk['name']   = $chunk_name;
  415.82 +            $info_real_chunks_current_chunk['offset'] = ftell($getid3->fp) - 8;
  415.83 +            $info_real_chunks_current_chunk['length'] = $chunk_size;
  415.84 +            
  415.85 +            if (($info_real_chunks_current_chunk['offset'] + $info_real_chunks_current_chunk['length']) > $getid3->info['avdataend']) {
  415.86 +                $getid3->warning('Chunk "'.$info_real_chunks_current_chunk['name'].'" at offset '.$info_real_chunks_current_chunk['offset'].' claims to be '.$info_real_chunks_current_chunk['length'].' bytes long, which is beyond end of file');
  415.87 +                return false;
  415.88 +            }
  415.89 +
  415.90 +            if ($chunk_size > (getid3::FREAD_BUFFER_SIZE + 8)) {
  415.91 +                $chunk_data .= fread($getid3->fp, getid3::FREAD_BUFFER_SIZE - 8);
  415.92 +                fseek($getid3->fp, $info_real_chunks_current_chunk['offset'] + $chunk_size, SEEK_SET);
  415.93 +
  415.94 +            } elseif(($chunk_size - 8) > 0) {
  415.95 +                $chunk_data .= fread($getid3->fp, $chunk_size - 8);
  415.96 +            }
  415.97 +            $offset = 8;
  415.98 +
  415.99 +            switch ($chunk_name) {
 415.100 +
 415.101 +                case '.RMF': // RealMedia File Header
 415.102 +
 415.103 +                    $info_real_chunks_current_chunk['object_version'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.104 +                    $offset += 2;
 415.105 +
 415.106 +                    switch ($info_real_chunks_current_chunk['object_version']) {
 415.107 +
 415.108 +                        case 0:
 415.109 +                            $info_real_chunks_current_chunk['file_version']  = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 4));
 415.110 +                            $offset += 4;
 415.111 +
 415.112 +                            $info_real_chunks_current_chunk['headers_count'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 4));
 415.113 +                            $offset += 4;
 415.114 +                            break;
 415.115 +
 415.116 +                        default:
 415.117 +                            //$getid3->warning('Expected .RMF-object_version to be "0", actual value is "'.$info_real_chunks_current_chunk['object_version'].'" (should not be a problem)';
 415.118 +                            break;
 415.119 +
 415.120 +                    }
 415.121 +                    break;
 415.122 +
 415.123 +
 415.124 +                case 'PROP': // Properties Header
 415.125 +
 415.126 +                    $info_real_chunks_current_chunk['object_version']      = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.127 +                    $offset += 2;
 415.128 +
 415.129 +                    if ($info_real_chunks_current_chunk['object_version'] == 0) {
 415.130 +                        
 415.131 +                        getid3_lib::ReadSequence('BigEndian2Int', $info_real_chunks_current_chunk, $chunk_data, $offset,
 415.132 +                            array (
 415.133 +                                'max_bit_rate'    => 4,
 415.134 +                                'avg_bit_rate'    => 4,
 415.135 +                                'max_packet_size' => 4,
 415.136 +                                'avg_packet_size' => 4,
 415.137 +                                'num_packets'     => 4,
 415.138 +                                'duration'        => 4,
 415.139 +                                'preroll'         => 4,
 415.140 +                                'index_offset'    => 4,
 415.141 +                                'data_offset'     => 4,
 415.142 +                                'num_streams'     => 2,
 415.143 +                                'flags_raw'       => 2
 415.144 +                            )
 415.145 +                        );
 415.146 +                        $offset += 40;
 415.147 +
 415.148 +                        $getid3->info['playtime_seconds'] = $info_real_chunks_current_chunk['duration'] / 1000;
 415.149 +                        if ($info_real_chunks_current_chunk['duration'] > 0) {
 415.150 +                            $getid3->info['bitrate'] += $info_real_chunks_current_chunk['avg_bit_rate'];
 415.151 +                        }
 415.152 +                        
 415.153 +                        $info_real_chunks_current_chunk['flags']['save_enabled']   = (bool)($info_real_chunks_current_chunk['flags_raw'] & 0x0001);
 415.154 +                        $info_real_chunks_current_chunk['flags']['perfect_play']   = (bool)($info_real_chunks_current_chunk['flags_raw'] & 0x0002);
 415.155 +                        $info_real_chunks_current_chunk['flags']['live_broadcast'] = (bool)($info_real_chunks_current_chunk['flags_raw'] & 0x0004);
 415.156 +                    }
 415.157 +                    break;
 415.158 +
 415.159 +
 415.160 +                case 'MDPR': // Media Properties Header
 415.161 +
 415.162 +                    $info_real_chunks_current_chunk['object_version']         = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.163 +                    $offset += 2;
 415.164 +
 415.165 +                    if ($info_real_chunks_current_chunk['object_version'] == 0) {
 415.166 +
 415.167 +                        getid3_lib::ReadSequence('BigEndian2Int', $info_real_chunks_current_chunk, $chunk_data, $offset,
 415.168 +                            array (
 415.169 +                                'stream_number'    => 2,
 415.170 +                                'max_bit_rate'     => 4,
 415.171 +                                'avg_bit_rate'     => 4,
 415.172 +                                'max_packet_size'  => 4,
 415.173 +                                'avg_packet_size'  => 4,
 415.174 +                                'start_time'       => 4,
 415.175 +                                'preroll'          => 4,
 415.176 +                                'duration'         => 4,
 415.177 +                                'stream_name_size' => 1
 415.178 +                            )
 415.179 +                        );
 415.180 +                        $offset += 31;
 415.181 +                        
 415.182 +                        $info_real_chunks_current_chunk['stream_name']        = substr($chunk_data, $offset, $info_real_chunks_current_chunk['stream_name_size']);
 415.183 +                        $offset += $info_real_chunks_current_chunk['stream_name_size'];
 415.184 +                        
 415.185 +                        $info_real_chunks_current_chunk['mime_type_size']     = getid3_lib::BigEndian2Int($chunk_data{$offset++});
 415.186 +                        
 415.187 +                        $info_real_chunks_current_chunk['mime_type']          = substr($chunk_data, $offset, $info_real_chunks_current_chunk['mime_type_size']);
 415.188 +                        $offset += $info_real_chunks_current_chunk['mime_type_size'];
 415.189 +                        
 415.190 +                        $info_real_chunks_current_chunk['type_specific_len']  = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 4));
 415.191 +                        $offset += 4;
 415.192 +                        
 415.193 +                        $info_real_chunks_current_chunk['type_specific_data'] = substr($chunk_data, $offset, $info_real_chunks_current_chunk['type_specific_len']);
 415.194 +                        $offset += $info_real_chunks_current_chunk['type_specific_len'];
 415.195 +
 415.196 +                        $info_real_chunks_current_chunk_typespecificdata = &$info_real_chunks_current_chunk['type_specific_data'];
 415.197 +
 415.198 +                        switch ($info_real_chunks_current_chunk['mime_type']) {
 415.199 +                          
 415.200 +                            case 'video/x-pn-realvideo':
 415.201 +                            case 'video/x-pn-multirate-realvideo':
 415.202 +                                // http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html
 415.203 +
 415.204 +                                $info_real_chunks_current_chunk['video_info'] = array ();
 415.205 +                                $info_real_chunks_current_chunk_video_info    = &$info_real_chunks_current_chunk['video_info'];
 415.206 +
 415.207 +                                getid3_lib::ReadSequence('BigEndian2Int', $info_real_chunks_current_chunk_video_info, $info_real_chunks_current_chunk_typespecificdata, 0,
 415.208 +                                    array (
 415.209 +                                        'dwSize'            => 4,
 415.210 +                                        'fourcc1'           => -4,
 415.211 +                                        'fourcc2'           => -4,
 415.212 +                                        'width'             => 2,
 415.213 +                                        'height'            => 2,
 415.214 +                                        'bits_per_sample'   => 2,
 415.215 +                                        'IGNORE-unknown1'   => 2,
 415.216 +                                        'IGNORE-unknown2'   => 2,
 415.217 +                                        'frames_per_second' => 2,
 415.218 +                                        'IGNORE-unknown3'   => 2,
 415.219 +                                        'IGNORE-unknown4'   => 2,
 415.220 +                                        'IGNORE-unknown5'   => 2,
 415.221 +                                        'IGNORE-unknown6'   => 2,
 415.222 +                                        'IGNORE-unknown7'   => 2,
 415.223 +                                        'IGNORE-unknown8'   => 2,
 415.224 +                                        'IGNORE-unknown9'   => 2
 415.225 +                                    )
 415.226 +                                );
 415.227 +
 415.228 +                                $info_real_chunks_current_chunk_video_info['codec'] = getid3_riff::RIFFfourccLookup($info_real_chunks_current_chunk_video_info['fourcc2']);
 415.229 +
 415.230 +                                $getid3->info['video']['resolution_x']    =        $info_real_chunks_current_chunk_video_info['width'];
 415.231 +                                $getid3->info['video']['resolution_y']    =        $info_real_chunks_current_chunk_video_info['height'];
 415.232 +                                $getid3->info['video']['frame_rate']      = (float)$info_real_chunks_current_chunk_video_info['frames_per_second'];
 415.233 +                                $getid3->info['video']['codec']           =        $info_real_chunks_current_chunk_video_info['codec'];
 415.234 +                                $getid3->info['video']['bits_per_sample'] =        $info_real_chunks_current_chunk_video_info['bits_per_sample'];
 415.235 +                                break;
 415.236 +
 415.237 +
 415.238 +                            case 'audio/x-pn-realaudio':
 415.239 +                            case 'audio/x-pn-multirate-realaudio':
 415.240 +
 415.241 +                                $this->ParseOldRAheader($info_real_chunks_current_chunk_typespecificdata, $info_real_chunks_current_chunk['parsed_audio_data']);
 415.242 +
 415.243 +                                $getid3->info['audio']['sample_rate']     = $info_real_chunks_current_chunk['parsed_audio_data']['sample_rate'];
 415.244 +                                $getid3->info['audio']['bits_per_sample'] = $info_real_chunks_current_chunk['parsed_audio_data']['bits_per_sample'];
 415.245 +                                $getid3->info['audio']['channels']        = $info_real_chunks_current_chunk['parsed_audio_data']['channels'];
 415.246 +
 415.247 +                                if (!empty($getid3->info['audio']['dataformat'])) {
 415.248 +                                    foreach ($getid3->info['audio'] as $key => $value) {
 415.249 +                                        if ($key != 'streams') {
 415.250 +                                            $getid3->info['audio']['streams'][$info_real_chunks_current_chunk['stream_number']][$key] = $value;
 415.251 +                                        }
 415.252 +                                    }
 415.253 +                                }
 415.254 +                                break;
 415.255 +
 415.256 +
 415.257 +                            case 'logical-fileinfo':
 415.258 +
 415.259 +                                $info_real_chunks_current_chunk['logical_fileinfo']['logical_fileinfo_length'] = getid3_lib::BigEndian2Int(substr($info_real_chunks_current_chunk_typespecificdata, 0, 4));
 415.260 +                                // $info_real_chunks_current_chunk['logical_fileinfo']['IGNORE-unknown1']             = getid3_lib::BigEndian2Int(substr($info_real_chunks_current_chunk_typespecificdata, 4, 4));
 415.261 +                                $info_real_chunks_current_chunk['logical_fileinfo']['num_tags']                = getid3_lib::BigEndian2Int(substr($info_real_chunks_current_chunk_typespecificdata, 8, 4));
 415.262 +                                // $info_real_chunks_current_chunk['logical_fileinfo']['IGNORE-unknown2']             = getid3_lib::BigEndian2Int(substr($info_real_chunks_current_chunk_typespecificdata, 12, 4));
 415.263 +                                break;
 415.264 +
 415.265 +                        }
 415.266 +
 415.267 +
 415.268 +                        if (empty($getid3->info['playtime_seconds'])) {
 415.269 +                            $getid3->info['playtime_seconds'] = max($getid3->info['playtime_seconds'], ($info_real_chunks_current_chunk['duration'] + $info_real_chunks_current_chunk['start_time']) / 1000);
 415.270 +                        }
 415.271 +                        
 415.272 +                        if ($info_real_chunks_current_chunk['duration'] > 0) {
 415.273 +                        
 415.274 +                            switch ($info_real_chunks_current_chunk['mime_type']) {
 415.275 +                        
 415.276 +                                case 'audio/x-pn-realaudio':
 415.277 +                                case 'audio/x-pn-multirate-realaudio':
 415.278 +                                    
 415.279 +                                    $getid3->info['audio']['bitrate']    = (isset($getid3->info['audio']['bitrate']) ? $getid3->info['audio']['bitrate'] : 0) + $info_real_chunks_current_chunk['avg_bit_rate'];
 415.280 +                                    $getid3->info['audio']['codec']      = $this->RealAudioCodecFourCClookup($info_real_chunks_current_chunk['parsed_audio_data']['fourcc'], $getid3->info['audio']['bitrate']);
 415.281 +                                    $getid3->info['audio']['dataformat'] = 'real';
 415.282 +                                    $getid3->info['audio']['lossless']   = false;
 415.283 +                                    break;
 415.284 +
 415.285 +
 415.286 +                                case 'video/x-pn-realvideo':
 415.287 +                                case 'video/x-pn-multirate-realvideo':
 415.288 +
 415.289 +                                    $getid3->info['video']['bitrate']            = (isset($getid3->info['video']['bitrate']) ? $getid3->info['video']['bitrate'] : 0) + $info_real_chunks_current_chunk['avg_bit_rate'];
 415.290 +                                    $getid3->info['video']['bitrate_mode']       = 'cbr';
 415.291 +                                    $getid3->info['video']['dataformat']         = 'real';
 415.292 +                                    $getid3->info['video']['lossless']           = false;
 415.293 +                                    $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
 415.294 +                                    break;
 415.295 +
 415.296 +
 415.297 +                                case 'audio/x-ralf-mpeg4-generic':
 415.298 +
 415.299 +                                    $getid3->info['audio']['bitrate']    = (isset($getid3->info['audio']['bitrate']) ? $getid3->info['audio']['bitrate'] : 0) + $info_real_chunks_current_chunk['avg_bit_rate'];
 415.300 +                                    $getid3->info['audio']['codec']      = 'RealAudio Lossless';
 415.301 +                                    $getid3->info['audio']['dataformat'] = 'real';
 415.302 +                                    $getid3->info['audio']['lossless']   = true;
 415.303 +                                    break;
 415.304 +                                    
 415.305 +                            }
 415.306 +                            
 415.307 +                            $getid3->info['bitrate'] = (isset($getid3->info['video']['bitrate']) ? $getid3->info['video']['bitrate'] : 0) + (isset($getid3->info['audio']['bitrate']) ? $getid3->info['audio']['bitrate'] : 0);
 415.308 +                        }
 415.309 +                    }
 415.310 +                    break;
 415.311 +
 415.312 +
 415.313 +                case 'CONT': // Content Description Header (text comments)
 415.314 +
 415.315 +                    $info_real_chunks_current_chunk['object_version'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.316 +                    $offset += 2;
 415.317 +
 415.318 +                    if ($info_real_chunks_current_chunk['object_version'] == 0) {
 415.319 +
 415.320 +                        $info_real_chunks_current_chunk['title_len'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.321 +                        $offset += 2;
 415.322 +
 415.323 +                        $info_real_chunks_current_chunk['title'] = (string) substr($chunk_data, $offset, $info_real_chunks_current_chunk['title_len']);
 415.324 +                        $offset += $info_real_chunks_current_chunk['title_len'];
 415.325 +
 415.326 +                        $info_real_chunks_current_chunk['artist_len'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.327 +                        $offset += 2;
 415.328 +
 415.329 +                        $info_real_chunks_current_chunk['artist'] = (string) substr($chunk_data, $offset, $info_real_chunks_current_chunk['artist_len']);
 415.330 +                        $offset += $info_real_chunks_current_chunk['artist_len'];
 415.331 +
 415.332 +                        $info_real_chunks_current_chunk['copyright_len'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.333 +                        $offset += 2;
 415.334 +
 415.335 +                        $info_real_chunks_current_chunk['copyright'] = (string) substr($chunk_data, $offset, $info_real_chunks_current_chunk['copyright_len']);
 415.336 +                        $offset += $info_real_chunks_current_chunk['copyright_len'];
 415.337 +
 415.338 +                        $info_real_chunks_current_chunk['comment_len'] = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.339 +                        $offset += 2;
 415.340 +
 415.341 +                        $info_real_chunks_current_chunk['comment'] = (string) substr($chunk_data, $offset, $info_real_chunks_current_chunk['comment_len']);
 415.342 +                        $offset += $info_real_chunks_current_chunk['comment_len'];
 415.343 +
 415.344 +                        foreach (array ('title'=>'title', 'artist'=>'artist', 'copyright'=>'copyright', 'comment'=>'comment') as $key => $val) {
 415.345 +                            if ($info_real_chunks_current_chunk[$key]) {
 415.346 +                                $getid3->info['real']['comments'][$val][] = trim($info_real_chunks_current_chunk[$key]);
 415.347 +                            }
 415.348 +                        }
 415.349 +                    }
 415.350 +                    break;
 415.351 +
 415.352 +
 415.353 +                case 'DATA': // Data Chunk Header
 415.354 +
 415.355 +                    // do nothing
 415.356 +                    break;
 415.357 +
 415.358 +
 415.359 +                case 'INDX': // Index Section Header
 415.360 +
 415.361 +                    $info_real_chunks_current_chunk['object_version']        = getid3_lib::BigEndian2Int(substr($chunk_data, $offset, 2));
 415.362 +                    $offset += 2;
 415.363 +
 415.364 +                    if ($info_real_chunks_current_chunk['object_version'] == 0) {
 415.365 +
 415.366 +                        getid3_lib::ReadSequence('BigEndian2Int', $info_real_chunks_current_chunk, $chunk_data, $offset, 
 415.367 +                            array (
 415.368 +                                'num_indices'       => 4,
 415.369 +                                'stream_number'     => 2,
 415.370 +                                'next_index_header' => 4
 415.371 +                            )
 415.372 +                        );
 415.373 +                        $offset += 10;
 415.374 +
 415.375 +                        if ($info_real_chunks_current_chunk['next_index_header'] == 0) {
 415.376 +                            // last index chunk found, ignore rest of file
 415.377 +                            break 2;
 415.378 +                        } else {
 415.379 +                            // non-last index chunk, seek to next index chunk (skipping actual index data)
 415.380 +                            fseek($getid3->fp, $info_real_chunks_current_chunk['next_index_header'], SEEK_SET);
 415.381 +                        }
 415.382 +                    }
 415.383 +                    break;
 415.384 +
 415.385 +
 415.386 +                default:
 415.387 +                    $getid3->warning('Unhandled RealMedia chunk "'.$chunk_name.'" at offset '.$info_real_chunks_current_chunk['offset']);
 415.388 +                    break;
 415.389 +            }
 415.390 +            $chunk_counter++;
 415.391 +        }
 415.392 +
 415.393 +        if (!empty($getid3->info['audio']['streams'])) {
 415.394 +            
 415.395 +            $getid3->info['audio']['bitrate'] = 0;
 415.396 +            
 415.397 +            foreach ($getid3->info['audio']['streams'] as $key => $value_array) {
 415.398 +                $getid3->info['audio']['bitrate'] += $value_array['bitrate'];
 415.399 +            }
 415.400 +        }
 415.401 +
 415.402 +        return true;
 415.403 +    }
 415.404 +
 415.405 +
 415.406 +
 415.407 +    public static function ParseOldRAheader($old_ra_header_data, &$parsed_array) {
 415.408 +
 415.409 +        // http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html
 415.410 +
 415.411 +        $parsed_array = array ();
 415.412 +        $parsed_array['magic'] = substr($old_ra_header_data, 0, 4);
 415.413 +        
 415.414 +        if ($parsed_array['magic'] != '.ra'."\xFD") {
 415.415 +            return false;
 415.416 +        }
 415.417 +        
 415.418 +        $parsed_array['version1'] = getid3_lib::BigEndian2Int(substr($old_ra_header_data,  4, 2));
 415.419 +
 415.420 +        if ($parsed_array['version1'] < 3) {
 415.421 +
 415.422 +            return false;
 415.423 +        } 
 415.424 +
 415.425 +        if ($parsed_array['version1'] == 3) {
 415.426 +
 415.427 +            $parsed_array['fourcc1']          = '.ra3';
 415.428 +            $parsed_array['bits_per_sample']  = 16;   // hard-coded for old versions?
 415.429 +            $parsed_array['sample_rate']      = 8000; // hard-coded for old versions?
 415.430 +
 415.431 +            getid3_lib::ReadSequence('BigEndian2Int', $parsed_array, $old_ra_header_data, 6,
 415.432 +                array (
 415.433 +                    'header_size'      => 2,
 415.434 +                    'channels'         => 2, // always 1 (?)
 415.435 +                    'IGNORE-unknown1'  => 2,
 415.436 +                    'IGNORE-unknown2'  => 2,
 415.437 +                    'IGNORE-unknown3'  => 2,
 415.438 +                    'bytes_per_minute' => 2,
 415.439 +                    'audio_bytes'      => 4,
 415.440 +                )
 415.441 +            );
 415.442 +            
 415.443 +            $parsed_array['comments_raw'] = substr($old_ra_header_data, 22, $parsed_array['header_size'] - 22 + 1); // not including null terminator
 415.444 +
 415.445 +            $comment_offset = 0;
 415.446 +            
 415.447 +            foreach (array ('title', 'artist', 'copyright') as $name) {
 415.448 +                $comment_length = getid3_lib::BigEndian2Int($parsed_array['comments_raw']{$comment_offset++});
 415.449 +                $parsed_array['comments'][$name][]= substr($parsed_array['comments_raw'], $comment_offset, $comment_length);
 415.450 +                $comment_offset += $comment_length;
 415.451 +            }
 415.452 +    
 415.453 +            $comment_offset++; // final null terminator (?)
 415.454 +            $comment_offset++; // fourcc length (?) should be 4
 415.455 +            
 415.456 +            $parsed_array['fourcc'] = substr($old_ra_header_data, 23 + $comment_offset, 4);
 415.457 +
 415.458 +
 415.459 +        } elseif ($parsed_array['version1'] <= 5) {
 415.460 +
 415.461 +            getid3_lib::ReadSequence('BigEndian2Int', $parsed_array, $old_ra_header_data, 6,
 415.462 +                array (
 415.463 +                    'IGNORE-unknown1'  => 2,
 415.464 +                    'fourcc1'          => -4,
 415.465 +                    'file_size'        => 4,
 415.466 +                    'version2'         => 2,
 415.467 +                    'header_size'      => 4,
 415.468 +                    'codec_flavor_id'  => 2,
 415.469 +                    'coded_frame_size' => 4,
 415.470 +                    'audio_bytes'      => 4,
 415.471 +                    'bytes_per_minute' => 4,
 415.472 +                    'IGNORE-unknown5'  => 4,
 415.473 +                    'sub_packet_h'     => 2,
 415.474 +                    'frame_size'       => 2,
 415.475 +                    'sub_packet_size'  => 2,
 415.476 +                    'IGNORE-unknown6'  => 2
 415.477 +                )
 415.478 +            );
 415.479 +
 415.480 +            switch ($parsed_array['version1']) {
 415.481 +
 415.482 +                case 4:
 415.483 +             
 415.484 +                    getid3_lib::ReadSequence('BigEndian2Int', $parsed_array, $old_ra_header_data, 48,
 415.485 +                        array (
 415.486 +                            'sample_rate'      => 2,
 415.487 +                            'IGNORE-unknown8'  => 2,
 415.488 +                            'bits_per_sample'  => 2,
 415.489 +                            'channels'         => 2,
 415.490 +                            'length_fourcc2'   => 1,
 415.491 +                            'fourcc2'          => -4,
 415.492 +                            'length_fourcc3'   => 1,
 415.493 +                            'fourcc3'          => -4,
 415.494 +                            'IGNORE-unknown9'  => 1,
 415.495 +                            'IGNORE-unknown10' => 2,
 415.496 +                        )
 415.497 +                    );
 415.498 +
 415.499 +                    $parsed_array['comments_raw'] = substr($old_ra_header_data, 69, $parsed_array['header_size'] - 69 + 16);
 415.500 +
 415.501 +                    $comment_offset = 0;
 415.502 +                    
 415.503 +                    foreach (array ('title', 'artist', 'copyright') as $name) {
 415.504 +                        $comment_length = getid3_lib::BigEndian2Int($parsed_array['comments_raw']{$comment_offset++});
 415.505 +                        $parsed_array['comments'][$name][]= substr($parsed_array['comments_raw'], $comment_offset, $comment_length);
 415.506 +                        $comment_offset += $comment_length;
 415.507 +                    }
 415.508 +                    break;
 415.509 +
 415.510 +
 415.511 +                case 5:
 415.512 +                
 415.513 +                getid3_lib::ReadSequence('BigEndian2Int', $parsed_array, $old_ra_header_data, 48,
 415.514 +                        array (
 415.515 +                            'sample_rate'      => 4,
 415.516 +                            'sample_rate2'     => 4,
 415.517 +                            'bits_per_sample'  => 4,
 415.518 +                            'channels'         => 2,
 415.519 +                            'genr'             => -4,
 415.520 +                            'fourcc3'          => -4,
 415.521 +                        )
 415.522 +                    );
 415.523 +                    $parsed_array['comments'] = array ();
 415.524 +                    break;
 415.525 +                    
 415.526 +            }
 415.527 +            
 415.528 +            $parsed_array['fourcc'] = $parsed_array['fourcc3'];
 415.529 +
 415.530 +        }
 415.531 +
 415.532 +        foreach ($parsed_array['comments'] as $key => $value) {
 415.533 +            
 415.534 +            if ($parsed_array['comments'][$key][0] === false) {
 415.535 +                $parsed_array['comments'][$key][0] = '';
 415.536 +            }
 415.537 +        }
 415.538 +
 415.539 +        return true;
 415.540 +    }
 415.541 +
 415.542 +
 415.543 +
 415.544 +    public static function RealAudioCodecFourCClookup($fourcc, $bitrate) {
 415.545 +
 415.546 +        // http://www.its.msstate.edu/net/real/reports/config/tags.stats             
 415.547 +        // http://www.freelists.org/archives/matroska-devel/06-2003/fullthread18.html
 415.548 +        
 415.549 +        static $lookup;
 415.550 +        
 415.551 +        if (empty($lookup)) {
 415.552 +            $lookup['14_4'][8000]  = 'RealAudio v2 (14.4kbps)';
 415.553 +            $lookup['14.4'][8000]  = 'RealAudio v2 (14.4kbps)';
 415.554 +            $lookup['lpcJ'][8000]  = 'RealAudio v2 (14.4kbps)';
 415.555 +            $lookup['28_8'][15200] = 'RealAudio v2 (28.8kbps)';
 415.556 +            $lookup['28.8'][15200] = 'RealAudio v2 (28.8kbps)';
 415.557 +            $lookup['sipr'][4933]  = 'RealAudio v4 (5kbps Voice)';
 415.558 +            $lookup['sipr'][6444]  = 'RealAudio v4 (6.5kbps Voice)';
 415.559 +            $lookup['sipr'][8444]  = 'RealAudio v4 (8.5kbps Voice)';
 415.560 +            $lookup['sipr'][16000] = 'RealAudio v4 (16kbps Wideband)';
 415.561 +            $lookup['dnet'][8000]  = 'RealAudio v3 (8kbps Music)';
 415.562 +            $lookup['dnet'][16000] = 'RealAudio v3 (16kbps Music Low Response)';
 415.563 +            $lookup['dnet'][15963] = 'RealAudio v3 (16kbps Music Mid/High Response)';
 415.564 +            $lookup['dnet'][20000] = 'RealAudio v3 (20kbps Music Stereo)';
 415.565 +            $lookup['dnet'][32000] = 'RealAudio v3 (32kbps Music Mono)';
 415.566 +            $lookup['dnet'][31951] = 'RealAudio v3 (32kbps Music Stereo)';
 415.567 +            $lookup['dnet'][39965] = 'RealAudio v3 (40kbps Music Mono)';
 415.568 +            $lookup['dnet'][40000] = 'RealAudio v3 (40kbps Music Stereo)';
 415.569 +            $lookup['dnet'][79947] = 'RealAudio v3 (80kbps Music Mono)';
 415.570 +            $lookup['dnet'][80000] = 'RealAudio v3 (80kbps Music Stereo)';
 415.571 +
 415.572 +            $lookup['dnet'][0] = 'RealAudio v3';
 415.573 +            $lookup['sipr'][0] = 'RealAudio v4';
 415.574 +            $lookup['cook'][0] = 'RealAudio G2';
 415.575 +            $lookup['atrc'][0] = 'RealAudio 8';
 415.576 +        }
 415.577 +        
 415.578 +        $round_bitrate = intval(round($bitrate));
 415.579 +        
 415.580 +        if (isset($lookup[$fourcc][$round_bitrate])) {
 415.581 +            return $lookup[$fourcc][$round_bitrate];
 415.582 +        }
 415.583 +            
 415.584 +        if (isset($lookup[$fourcc][0])) {
 415.585 +            return $lookup[$fourcc][0];
 415.586 +        }
 415.587 +        
 415.588 +        return $fourcc;
 415.589 +    }
 415.590 +
 415.591 +}
 415.592 +
 415.593 +
 415.594 +?>
 415.595 \ No newline at end of file
   416.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   416.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.riff.php	Mon Feb 22 08:02:39 2010 -0500
   416.3 @@ -0,0 +1,2319 @@
   416.4 +<?php
   416.5 +// +----------------------------------------------------------------------+
   416.6 +// | PHP version 5                                                        |
   416.7 +// +----------------------------------------------------------------------+
   416.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   416.9 +// +----------------------------------------------------------------------+
  416.10 +// | This source file is subject to version 2 of the GPL license,         |
  416.11 +// | that is bundled with this package in the file license.txt and is     |
  416.12 +// | available through the world-wide-web at the following url:           |
  416.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  416.14 +// +----------------------------------------------------------------------+
  416.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  416.16 +// +----------------------------------------------------------------------+
  416.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  416.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  416.19 +// +----------------------------------------------------------------------+
  416.20 +// | module.audio-video.riff.php                                          |
  416.21 +// | module for analyzing RIFF files:                                     |
  416.22 +// |    Wave, AVI, AIFF/AIFC, (MP3,AC3)/RIFF, Wavpack3, 8SVX              |
  416.23 +// | dependencies: module.audio.mp3.php (optional)                        |
  416.24 +// |               module.audio.ac3.php (optional)                        |
  416.25 +// |               module.audio.dts.php (optional)                        |
  416.26 +// |               module.audio-video.mpeg.php (optional)                 |
  416.27 +// +----------------------------------------------------------------------+
  416.28 +//
  416.29 +// $Id: module.audio-video.riff.php,v 1.10 2006/12/03 20:13:17 ah Exp $
  416.30 +
  416.31 +        
  416.32 +        
  416.33 +class getid3_riff extends getid3_handler
  416.34 +{
  416.35 +
  416.36 +    private $endian_function = 'LittleEndian2Int';
  416.37 +
  416.38 +
  416.39 +    public function Analyze() {
  416.40 +        
  416.41 +        $getid3 = $this->getid3;
  416.42 +
  416.43 +        $getid3->info['riff']['raw'] = array ();
  416.44 +        $info_riff             = &$getid3->info['riff'];
  416.45 +        $info_riff_raw         = &$info_riff['raw'];
  416.46 +        $info_audio            = &$getid3->info['audio'];
  416.47 +        $info_video            = &$getid3->info['video'];
  416.48 +        $info_avdataoffset     = &$getid3->info['avdataoffset'];
  416.49 +        $info_avdataend        = &$getid3->info['avdataend'];
  416.50 +        $info_audio_dataformat = &$info_audio['dataformat'];
  416.51 +        $info_riff_audio       = &$info_riff['audio'];
  416.52 +        $info_riff_video       = &$info_riff['video'];
  416.53 +
  416.54 +        $original['avdataend'] = $info_avdataend;
  416.55 +
  416.56 +        $this->fseek($info_avdataoffset, SEEK_SET);
  416.57 +        $riff_header   = $this->fread(12);
  416.58 +        
  416.59 +        $riff_sub_type = substr($riff_header, 8, 4);
  416.60 +        
  416.61 +        switch (substr($riff_header, 0, 4)) {
  416.62 +        
  416.63 +            case 'FORM':
  416.64 +                $getid3->info['fileformat'] = 'aiff';
  416.65 +                $this->endian_function      = 'BigEndian2Int';
  416.66 +                $riff_header_size           = getid3_lib::BigEndian2Int(substr($riff_header, 4, 4));
  416.67 +                $info_riff[$riff_sub_type]  = $this->ParseRIFF($info_avdataoffset + 12, $info_avdataoffset + $riff_header_size);
  416.68 +                $info_riff['header_size']   = $riff_header_size;
  416.69 +                break;
  416.70 +
  416.71 +
  416.72 +            case 'RIFF':
  416.73 +            case 'SDSS':  // SDSS is identical to RIFF, just renamed. Used by SmartSound QuickTracks (www.smartsound.com)
  416.74 +            case 'RMP3':  // RMP3 is identical to RIFF, just renamed. Used by [unknown program] when creating RIFF-MP3s
  416.75 +
  416.76 +                if ($riff_sub_type == 'RMP3') {
  416.77 +                    $riff_sub_type = 'WAVE';
  416.78 +                }
  416.79 +
  416.80 +                $getid3->info['fileformat'] = 'riff';
  416.81 +                $this->endian_function      = 'LittleEndian2Int';
  416.82 +                $riff_header_size           = getid3_lib::LittleEndian2Int(substr($riff_header, 4, 4));
  416.83 +                $info_riff[$riff_sub_type]  = $this->ParseRIFF($info_avdataoffset + 12, $info_avdataoffset + $riff_header_size);
  416.84 +                $info_riff['header_size']   = $riff_header_size;
  416.85 +                if ($riff_sub_type == 'WAVE') {
  416.86 +                    $info_riff_wave = &$info_riff['WAVE'];
  416.87 +                }
  416.88 +                break;
  416.89 +
  416.90 +
  416.91 +            default:
  416.92 +                throw new getid3_exception('Cannot parse RIFF (this is maybe not a RIFF / WAV / AVI file?) - expecting "FORM|RIFF|SDSS|RMP3" found "'.$riff_sub_type.'" instead');
  416.93 +        }
  416.94 +        
  416.95 +        $endian_function = $this->endian_function;
  416.96 +
  416.97 +        $stream_index = 0;
  416.98 +        switch ($riff_sub_type) {
  416.99 +
 416.100 +            case 'WAVE':
 416.101 +                
 416.102 +                if (empty($info_audio['bitrate_mode'])) {
 416.103 +                    $info_audio['bitrate_mode'] = 'cbr';
 416.104 +                }
 416.105 +                
 416.106 +                if (empty($info_audio_dataformat)) {
 416.107 +                    $info_audio_dataformat = 'wav';
 416.108 +                }
 416.109 +
 416.110 +                if (isset($info_riff_wave['data'][0]['offset'])) {
 416.111 +                    $info_avdataoffset = $info_riff_wave['data'][0]['offset'] + 8;
 416.112 +                    $info_avdataend    = $info_avdataoffset + $info_riff_wave['data'][0]['size'];
 416.113 +                }
 416.114 +                
 416.115 +                if (isset($info_riff_wave['fmt '][0]['data'])) {
 416.116 +                    
 416.117 +                    $info_riff_audio[$stream_index] = getid3_riff::RIFFparseWAVEFORMATex($info_riff_wave['fmt '][0]['data']);
 416.118 +                    $info_audio['wformattag'] = $info_riff_audio[$stream_index]['raw']['wFormatTag'];
 416.119 +                    $info_riff_raw['fmt '] = $info_riff_audio[$stream_index]['raw'];
 416.120 +                    unset($info_riff_audio[$stream_index]['raw']);
 416.121 +                    $info_audio['streams'][$stream_index] = $info_riff_audio[$stream_index];
 416.122 +
 416.123 +                    $info_audio = getid3_riff::array_merge_noclobber($info_audio, $info_riff_audio[$stream_index]);
 416.124 +                    if (substr($info_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') {
 416.125 +                        $getid3->warning('Audio codec = '.$info_audio['codec']);
 416.126 +                    }
 416.127 +                    $info_audio['bitrate'] = $info_riff_audio[$stream_index]['bitrate'];
 416.128 +
 416.129 +                    $getid3->info['playtime_seconds'] = (float)((($info_avdataend - $info_avdataoffset) * 8) / $info_audio['bitrate']);
 416.130 +                    
 416.131 +                    $info_audio['lossless'] = false;
 416.132 +
 416.133 +                    if (isset($info_riff_wave['data'][0]['offset']) && isset($info_riff_raw['fmt ']['wFormatTag'])) {
 416.134 +                        
 416.135 +                        switch ($info_riff_raw['fmt ']['wFormatTag']) {
 416.136 +
 416.137 +                            case 0x0001:  // PCM
 416.138 +                                $info_audio['lossless'] = true;
 416.139 +                                break;
 416.140 +
 416.141 +                            case 0x2000:  // AC-3
 416.142 +                                $info_audio_dataformat = 'ac3';
 416.143 +                                break;
 416.144 +
 416.145 +                            default:
 416.146 +                                // do nothing
 416.147 +                                break;
 416.148 +
 416.149 +                        }
 416.150 +                    }
 416.151 +                    
 416.152 +                    $info_audio['streams'][$stream_index]['wformattag']   = $info_audio['wformattag'];
 416.153 +                    $info_audio['streams'][$stream_index]['bitrate_mode'] = $info_audio['bitrate_mode'];
 416.154 +                    $info_audio['streams'][$stream_index]['lossless']     = $info_audio['lossless'];
 416.155 +                    $info_audio['streams'][$stream_index]['dataformat']   = $info_audio_dataformat;
 416.156 +                }
 416.157 +
 416.158 +
 416.159 +                if (isset($info_riff_wave['rgad'][0]['data'])) {
 416.160 +
 416.161 +                    // shortcuts
 416.162 +                    $rgadData = &$info_riff_wave['rgad'][0]['data'];
 416.163 +                    $info_riff_raw['rgad']    = array ('track'=>array(), 'album'=>array());
 416.164 +                    $info_riff_raw_rgad       = &$info_riff_raw['rgad'];
 416.165 +                    $info_riff_raw_rgad_track = &$info_riff_raw_rgad['track'];
 416.166 +                    $info_riff_raw_rgad_album = &$info_riff_raw_rgad['album'];
 416.167 +
 416.168 +                    $info_riff_raw_rgad['fPeakAmplitude']      = getid3_riff::BigEndian2Float(strrev(substr($rgadData, 0, 4)));   // LittleEndian2Float()
 416.169 +                    $info_riff_raw_rgad['nRadioRgAdjust']      = getid3_lib::$endian_function(substr($rgadData, 4, 2));
 416.170 +                    $info_riff_raw_rgad['nAudiophileRgAdjust'] = getid3_lib::$endian_function(substr($rgadData, 6, 2));
 416.171 +
 416.172 +                    $n_track_rg_adjust_bit_string              = str_pad(decbin($info_riff_raw_rgad['nRadioRgAdjust']),      16, '0', STR_PAD_LEFT);
 416.173 +                    $n_album_rg_adjust_bit_string              = str_pad(decbin($info_riff_raw_rgad['nAudiophileRgAdjust']), 16, '0', STR_PAD_LEFT);
 416.174 +                    
 416.175 +                    $info_riff_raw_rgad_track['name']          = bindec(substr($n_track_rg_adjust_bit_string, 0, 3));
 416.176 +                    $info_riff_raw_rgad_track['originator']    = bindec(substr($n_track_rg_adjust_bit_string, 3, 3));
 416.177 +                    $info_riff_raw_rgad_track['signbit']       = bindec($n_track_rg_adjust_bit_string[6]);
 416.178 +                    $info_riff_raw_rgad_track['adjustment']    = bindec(substr($n_track_rg_adjust_bit_string, 7, 9));
 416.179 +                    $info_riff_raw_rgad_album['name']          = bindec(substr($n_album_rg_adjust_bit_string, 0, 3));
 416.180 +                    $info_riff_raw_rgad_album['originator']    = bindec(substr($n_album_rg_adjust_bit_string, 3, 3));
 416.181 +                    $info_riff_raw_rgad_album['signbit']       = bindec($n_album_rg_adjust_bit_string[6]);
 416.182 +                    $info_riff_raw_rgad_album['adjustment']    = bindec(substr($n_album_rg_adjust_bit_string, 7, 9));
 416.183 +
 416.184 +                    $info_riff['rgad']['peakamplitude'] = $info_riff_raw_rgad['fPeakAmplitude'];
 416.185 +                    if (($info_riff_raw_rgad_track['name'] != 0) && ($info_riff_raw_rgad_track['originator'] != 0)) {
 416.186 +                        $info_riff['rgad']['track']['name']       = getid3_lib_replaygain::NameLookup($info_riff_raw_rgad_track['name']);
 416.187 +                        $info_riff['rgad']['track']['originator'] = getid3_lib_replaygain::OriginatorLookup($info_riff_raw_rgad_track['originator']);
 416.188 +                        $info_riff['rgad']['track']['adjustment'] = getid3_lib_replaygain::AdjustmentLookup($info_riff_raw_rgad_track['adjustment'], $info_riff_raw_rgad_track['signbit']);
 416.189 +                    }
 416.190 +                    
 416.191 +                    if (($info_riff_raw_rgad_album['name'] != 0) && ($info_riff_raw_rgad_album['originator'] != 0)) {
 416.192 +                        $info_riff['rgad']['album']['name']       = getid3_lib_replaygain::NameLookup($info_riff_raw_rgad_album['name']);
 416.193 +                        $info_riff['rgad']['album']['originator'] = getid3_lib_replaygain::OriginatorLookup($info_riff_raw_rgad_album['originator']);
 416.194 +                        $info_riff['rgad']['album']['adjustment'] = getid3_lib_replaygain::AdjustmentLookup($info_riff_raw_rgad_album['adjustment'], $info_riff_raw_rgad_album['signbit']);
 416.195 +                    }
 416.196 +                }
 416.197 +
 416.198 +                if (isset($info_riff_wave['fact'][0]['data'])) {
 416.199 +                    
 416.200 +                    $info_riff_raw['fact']['NumberOfSamples'] = getid3_lib::$endian_function(substr($info_riff_wave['fact'][0]['data'], 0, 4));
 416.201 +
 416.202 +                    // This should be a good way of calculating exact playtime, but some sample files have had incorrect number of samples, so cannot use this method
 416.203 +                    // if (!empty($info_riff_raw['fmt ']['nSamplesPerSec'])) {
 416.204 +                    //     $getid3->info['playtime_seconds'] = (float)$info_riff_raw['fact']['NumberOfSamples'] / $info_riff_raw['fmt ']['nSamplesPerSec'];
 416.205 +                    // }
 416.206 +                }
 416.207 +                
 416.208 +                
 416.209 +                if (!empty($info_riff_raw['fmt ']['nAvgBytesPerSec'])) {
 416.210 +                    $info_audio['bitrate'] = (int)$info_riff_raw['fmt ']['nAvgBytesPerSec'] * 8;
 416.211 +                }
 416.212 +
 416.213 +                if (isset($info_riff_wave['bext'][0]['data'])) {
 416.214 +                
 416.215 +                    $info_riff_wave_bext_0 = &$info_riff_wave['bext'][0];
 416.216 +
 416.217 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_riff_wave_bext_0, $info_riff_wave_bext_0['data'], 0,
 416.218 +                        array (
 416.219 +                            'title'          => -256,
 416.220 +                            'author'         => -32,
 416.221 +                            'reference'      => -32,
 416.222 +                            'origin_date'    => -10,
 416.223 +                            'origin_time'    => -8,
 416.224 +                            'time_reference' => 8,
 416.225 +                            'bwf_version'    => 1,
 416.226 +                            'reserved'       => 254
 416.227 +                        )
 416.228 +                    );
 416.229 +                    
 416.230 +                    foreach (array ('title', 'author', 'reference') as $key) {
 416.231 +                        $info_riff_wave_bext_0[$key] = trim($info_riff_wave_bext_0[$key]);
 416.232 +                    }
 416.233 +                            
 416.234 +                    $info_riff_wave_bext_0['coding_history'] = explode("\r\n", trim(substr($info_riff_wave_bext_0['data'], 601)));
 416.235 +
 416.236 +                    $info_riff_wave_bext_0['origin_date_unix'] = gmmktime(substr($info_riff_wave_bext_0['origin_time'], 0, 2),
 416.237 +                                                                          substr($info_riff_wave_bext_0['origin_time'], 3, 2),
 416.238 +                                                                          substr($info_riff_wave_bext_0['origin_time'], 6, 2),
 416.239 +                                                                          substr($info_riff_wave_bext_0['origin_date'], 5, 2),
 416.240 +                                                                          substr($info_riff_wave_bext_0['origin_date'], 8, 2),
 416.241 +                                                                          substr($info_riff_wave_bext_0['origin_date'], 0, 4));
 416.242 +
 416.243 +                    $info_riff['comments']['author'][] = $info_riff_wave_bext_0['author'];
 416.244 +                    $info_riff['comments']['title'][]  = $info_riff_wave_bext_0['title'];
 416.245 +                }
 416.246 +
 416.247 +                if (isset($info_riff_wave['MEXT'][0]['data'])) {
 416.248 +                    
 416.249 +                    $info_riff_wave_mext_0 = &$info_riff_wave['MEXT'][0];
 416.250 +
 416.251 +                    $info_riff_wave_mext_0['raw']['sound_information']      = getid3_lib::LittleEndian2Int(substr($info_riff_wave_mext_0['data'], 0, 2));
 416.252 +                    $info_riff_wave_mext_0['flags']['homogenous']           = (bool)($info_riff_wave_mext_0['raw']['sound_information'] & 0x0001);
 416.253 +                    if ($info_riff_wave_mext_0['flags']['homogenous']) {
 416.254 +                        $info_riff_wave_mext_0['flags']['padding']          = ($info_riff_wave_mext_0['raw']['sound_information'] & 0x0002) ? false : true;
 416.255 +                        $info_riff_wave_mext_0['flags']['22_or_44']         = (bool)($info_riff_wave_mext_0['raw']['sound_information'] & 0x0004);
 416.256 +                        $info_riff_wave_mext_0['flags']['free_format']      = (bool)($info_riff_wave_mext_0['raw']['sound_information'] & 0x0008);
 416.257 +
 416.258 +                        $info_riff_wave_mext_0['nominal_frame_size']        = getid3_lib::LittleEndian2Int(substr($info_riff_wave_mext_0['data'], 2, 2));
 416.259 +                    }
 416.260 +                    $info_riff_wave_mext_0['anciliary_data_length']         = getid3_lib::LittleEndian2Int(substr($info_riff_wave_mext_0['data'], 6, 2));
 416.261 +                    $info_riff_wave_mext_0['raw']['anciliary_data_def']     = getid3_lib::LittleEndian2Int(substr($info_riff_wave_mext_0['data'], 8, 2));
 416.262 +                    $info_riff_wave_mext_0['flags']['anciliary_data_left']  = (bool)($info_riff_wave_mext_0['raw']['anciliary_data_def'] & 0x0001);
 416.263 +                    $info_riff_wave_mext_0['flags']['anciliary_data_free']  = (bool)($info_riff_wave_mext_0['raw']['anciliary_data_def'] & 0x0002);
 416.264 +                    $info_riff_wave_mext_0['flags']['anciliary_data_right'] = (bool)($info_riff_wave_mext_0['raw']['anciliary_data_def'] & 0x0004);
 416.265 +                }
 416.266 +
 416.267 +                if (isset($info_riff_wave['cart'][0]['data'])) {
 416.268 +                    
 416.269 +                    $info_riff_wave_cart_0 = &$info_riff_wave['cart'][0];
 416.270 +
 416.271 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_riff_wave_cart_0, $info_riff_wave_cart_0['data'], 0,
 416.272 +                        array (
 416.273 +                            'version'              => -4,
 416.274 +                            'title'                => -64,
 416.275 +                            'artist'               => -64,
 416.276 +                            'cut_id'               => -64,
 416.277 +                            'client_id'            => -64,
 416.278 +                            'category'             => -64,
 416.279 +                            'classification'       => -64,
 416.280 +                            'out_cue'              => -64,
 416.281 +                            'start_date'           => -10,
 416.282 +                            'start_time'           => -8,
 416.283 +                            'end_date'             => -10,
 416.284 +                            'end_time'             => -8,
 416.285 +                            'producer_app_id'      => -64,
 416.286 +                            'producer_app_version' => -64,
 416.287 +                            'user_defined_text'    => -64,
 416.288 +                        )
 416.289 +                    );
 416.290 +                    
 416.291 +                    foreach (array ('artist', 'cut_id', 'client_id', 'category', 'classification', 'out_cue', 'start_date', 'start_time', 'end_date', 'end_time', 'producer_app_id', 'producer_app_version', 'user_defined_text') as $key) {
 416.292 +                        $info_riff_wave_cart_0[$key] = trim($info_riff_wave_cart_0[$key]);
 416.293 +                    }
 416.294 +                                    
 416.295 +                    $info_riff_wave_cart_0['zero_db_reference'] = getid3_lib::LittleEndian2Int(substr($info_riff_wave_cart_0['data'], 680, 4), true);
 416.296 +                                    
 416.297 +                    for ($i = 0; $i < 8; $i++) {
 416.298 +                        $info_riff_wave_cart_0['post_time'][$i]['usage_fourcc'] =                              substr($info_riff_wave_cart_0['data'], 684 + ($i * 8), 4);
 416.299 +                        $info_riff_wave_cart_0['post_time'][$i]['timer_value']  = getid3_lib::LittleEndian2Int(substr($info_riff_wave_cart_0['data'], 684 + ($i * 8) + 4, 4));
 416.300 +                    }               
 416.301 +                    $info_riff_wave_cart_0['url']              =                 trim(substr($info_riff_wave_cart_0['data'],  748, 1024));
 416.302 +                    $info_riff_wave_cart_0['tag_text']         = explode("\r\n", trim(substr($info_riff_wave_cart_0['data'], 1772)));
 416.303 +                                    
 416.304 +                    $info_riff['comments']['artist'][] = $info_riff_wave_cart_0['artist'];
 416.305 +                    $info_riff['comments']['title'][]  = $info_riff_wave_cart_0['title'];
 416.306 +                }                   
 416.307 +
 416.308 +                if (!isset($info_audio['bitrate']) && isset($info_riff_audio[$stream_index]['bitrate'])) {
 416.309 +                    $info_audio['bitrate'] = $info_riff_audio[$stream_index]['bitrate'];
 416.310 +                    $getid3->info['playtime_seconds'] = (float)((($info_avdataend - $info_avdataoffset) * 8) / $info_audio['bitrate']);
 416.311 +                }
 416.312 +
 416.313 +                if (@$getid3->info['wavpack']) {
 416.314 +                    
 416.315 +                    if (!$this->data_string_flag)  {
 416.316 +                     
 416.317 +                        $info_audio_dataformat      = 'wavpack';
 416.318 +                        $info_audio['bitrate_mode'] = 'vbr';
 416.319 +                        $info_audio['encoder']      = 'WavPack v'.$getid3->info['wavpack']['version'];
 416.320 +    
 416.321 +                        // Reset to the way it was - RIFF parsing will have messed this up
 416.322 +                        $info_avdataend        = $original['avdataend'];
 416.323 +                        $info_audio['bitrate'] = (($info_avdataend - $info_avdataoffset) * 8) / $getid3->info['playtime_seconds'];
 416.324 +    
 416.325 +                        $this->fseek($info_avdataoffset - 44, SEEK_SET);
 416.326 +                        $riff_data = $this->fread(44);
 416.327 +                        $orignal_riff_header_size = getid3_lib::LittleEndian2Int(substr($riff_data,  4, 4)) +  8;
 416.328 +                        $orignal_riff_data_size   = getid3_lib::LittleEndian2Int(substr($riff_data, 40, 4)) + 44;
 416.329 +    
 416.330 +                        if ($orignal_riff_header_size > $orignal_riff_data_size) {
 416.331 +                            $info_avdataend -= ($orignal_riff_header_size - $orignal_riff_data_size);
 416.332 +                            $this->fseek($info_avdataend, SEEK_SET);
 416.333 +                            $riff_data .= $this->fread($orignal_riff_header_size - $orignal_riff_data_size);
 416.334 +                        }
 416.335 +    
 416.336 +                        // move the data chunk after all other chunks (if any)
 416.337 +                        // so that the RIFF parser doesn't see EOF when trying
 416.338 +                        // to skip over the data chunk
 416.339 +                        $riff_data = substr($riff_data, 0, 36).substr($riff_data, 44).substr($riff_data, 36, 8);
 416.340 +
 416.341 +                        // Save audio info key
 416.342 +                        $saved_info_audio = $info_audio;
 416.343 +
 416.344 +                        // Analyze riff_data 
 416.345 +                        $this->AnalyzeString($riff_data);
 416.346 +                        
 416.347 +                        // Restore info key
 416.348 +                        $info_audio = $saved_info_audio;
 416.349 +                    }
 416.350 +                }
 416.351 +
 416.352 +                if (isset($info_riff_raw['fmt ']['wFormatTag'])) {
 416.353 +                    
 416.354 +                    switch ($info_riff_raw['fmt ']['wFormatTag']) {
 416.355 +                    
 416.356 +                        case 0x08AE: // ClearJump LiteWave
 416.357 +                            $info_audio['bitrate_mode'] = 'vbr';
 416.358 +                            $info_audio_dataformat      = 'litewave';
 416.359 +
 416.360 +                            //typedef struct tagSLwFormat {
 416.361 +                            //  WORD    m_wCompFormat;     // low byte defines compression method, high byte is compression flags
 416.362 +                            //  DWORD   m_dwScale;         // scale factor for lossy compression
 416.363 +                            //  DWORD   m_dwBlockSize;     // number of samples in encoded blocks
 416.364 +                            //  WORD    m_wQuality;        // alias for the scale factor
 416.365 +                            //  WORD    m_wMarkDistance;   // distance between marks in bytes
 416.366 +                            //  WORD    m_wReserved;
 416.367 +                            //
 416.368 +                            //  //following paramters are ignored if CF_FILESRC is not set
 416.369 +                            //  DWORD   m_dwOrgSize;       // original file size in bytes
 416.370 +                            //  WORD    m_bFactExists;     // indicates if 'fact' chunk exists in the original file
 416.371 +                            //  DWORD   m_dwRiffChunkSize; // riff chunk size in the original file
 416.372 +                            //
 416.373 +                            //  PCMWAVEFORMAT m_OrgWf;     // original wave format
 416.374 +                            // }SLwFormat, *PSLwFormat;
 416.375 +
 416.376 +                            $info_riff['litewave']['raw'] = array ();
 416.377 +                            $info_riff_litewave           = &$info_riff['litewave'];
 416.378 +                            $info_riff_litewave_raw       = &$info_riff_litewave['raw'];
 416.379 +
 416.380 +                            getid3_lib::ReadSequence('LittleEndian2Int', $info_riff_litewave_raw, $info_riff_wave['fmt '][0]['data'], 18,
 416.381 +                                array (
 416.382 +                                    'compression_method' => 1,
 416.383 +                                    'compression_flags'  => 1,
 416.384 +                                    'm_dwScale'          => 4,
 416.385 +                                    'm_dwBlockSize'      => 4,
 416.386 +                                    'm_wQuality'         => 2,
 416.387 +                                    'm_wMarkDistance'    => 2,
 416.388 +                                    'm_wReserved'        => 2,
 416.389 +                                    'm_dwOrgSize'        => 4,
 416.390 +                                    'm_bFactExists'      => 2,
 416.391 +                                    'm_dwRiffChunkSize'  => 4
 416.392 +                                )
 416.393 +                            );
 416.394 +
 416.395 +                            //$info_riff_litewave['quality_factor'] = intval(round((2000 - $info_riff_litewave_raw['m_dwScale']) / 20));
 416.396 +                            $info_riff_litewave['quality_factor'] = $info_riff_litewave_raw['m_wQuality'];
 416.397 +
 416.398 +                            $info_riff_litewave['flags']['raw_source']    = ($info_riff_litewave_raw['compression_flags'] & 0x01) ? false : true;
 416.399 +                            $info_riff_litewave['flags']['vbr_blocksize'] = ($info_riff_litewave_raw['compression_flags'] & 0x02) ? false : true;
 416.400 +                            $info_riff_litewave['flags']['seekpoints']    = (bool)($info_riff_litewave_raw['compression_flags'] & 0x04);
 416.401 +
 416.402 +                            $info_audio['lossless']        = (($info_riff_litewave_raw['m_wQuality'] == 100) ? true : false);
 416.403 +                            $info_audio['encoder_options'] = '-q'.$info_riff_litewave['quality_factor'];
 416.404 +                            break;
 416.405 +                    }
 416.406 +                }
 416.407 +
 416.408 +                if ($info_avdataend > $getid3->info['filesize']) {
 416.409 +
 416.410 +                    switch (@$info_audio_dataformat) {
 416.411 +
 416.412 +                        case 'wavpack': // WavPack
 416.413 +                        case 'lpac':    // LPAC
 416.414 +                        case 'ofr':     // OptimFROG
 416.415 +                        case 'ofs':     // OptimFROG DualStream
 416.416 +                            // lossless compressed audio formats that keep original RIFF headers - skip warning
 416.417 +                            break;
 416.418 +
 416.419 +
 416.420 +                        case 'litewave':
 416.421 +
 416.422 +                            if (($info_avdataend - $getid3->info['filesize']) == 1) {
 416.423 +                                // LiteWave appears to incorrectly *not* pad actual output file
 416.424 +                                // to nearest WORD boundary so may appear to be short by one
 416.425 +                                // byte, in which case - skip warning
 416.426 +                            } else {
 416.427 +                                // Short by more than one byte, throw warning
 416.428 +                                $getid3->warning('Probably truncated file - expecting '.$info_riff[$riff_sub_type]['data'][0]['size'].' bytes of data, only found '.($getid3->info['filesize'] - $info_avdataoffset).' (short by '.($info_riff[$riff_sub_type]['data'][0]['size'] - ($getid3->info['filesize'] - $info_avdataoffset)).' bytes)');
 416.429 +                            }
 416.430 +                            break;
 416.431 +
 416.432 +
 416.433 +                        default:
 416.434 +
 416.435 +                            if ((($info_avdataend - $getid3->info['filesize']) == 1) && (($info_riff[$riff_sub_type]['data'][0]['size'] % 2) == 0) && ((($getid3->info['filesize'] - $info_avdataoffset) % 2) == 1)) {
 416.436 +                                // output file appears to be incorrectly *not* padded to nearest WORD boundary
 416.437 +                                // Output less severe warning
 416.438 +                                $getid3->warning('File should probably be padded to nearest WORD boundary, but it is not (expecting '.$info_riff[$riff_sub_type]['data'][0]['size'].' bytes of data, only found '.($getid3->info['filesize'] - $info_avdataoffset).' therefore short by '.($info_riff[$riff_sub_type]['data'][0]['size'] - ($getid3->info['filesize'] - $info_avdataoffset)).' bytes)');
 416.439 +                                $info_avdataend = $getid3->info['filesize'];
 416.440 +                                break;
 416.441 +                                
 416.442 +                            }
 416.443 +                            // Short by more than one byte, throw warning
 416.444 +                            $getid3->warning('Probably truncated file - expecting '.$info_riff[$riff_sub_type]['data'][0]['size'].' bytes of data, only found '.($getid3->info['filesize'] - $info_avdataoffset).' (short by '.($info_riff[$riff_sub_type]['data'][0]['size'] - ($getid3->info['filesize'] - $info_avdataoffset)).' bytes)');
 416.445 +                            $info_avdataend = $getid3->info['filesize'];
 416.446 +                            break;
 416.447 +                    }
 416.448 +                }
 416.449 +                
 416.450 +                if (!empty($getid3->info['mpeg']['audio']['LAME']['audio_bytes'])) {
 416.451 +                    if ((($info_avdataend - $info_avdataoffset) - $getid3->info['mpeg']['audio']['LAME']['audio_bytes']) == 1) {
 416.452 +                        $info_avdataend--;
 416.453 +                        $getid3->warning('Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored');
 416.454 +                    }
 416.455 +                }
 416.456 +                
 416.457 +                if (@$info_audio_dataformat == 'ac3') {
 416.458 +                    unset($info_audio['bits_per_sample']);
 416.459 +                    if (!empty($getid3->info['ac3']['bitrate']) && ($getid3->info['ac3']['bitrate'] != $info_audio['bitrate'])) {
 416.460 +                        $info_audio['bitrate'] = $getid3->info['ac3']['bitrate'];
 416.461 +                    }
 416.462 +                }
 416.463 +                break;
 416.464 +
 416.465 +
 416.466 +            case 'AVI ':
 416.467 +                $info_video['bitrate_mode'] = 'vbr'; // maybe not, but probably
 416.468 +                $info_video['dataformat']   = 'avi';
 416.469 +                $getid3->info['mime_type']  = 'video/avi';
 416.470 +
 416.471 +                if (isset($info_riff[$riff_sub_type]['movi']['offset'])) {
 416.472 +                    $info_avdataoffset = $info_riff[$riff_sub_type]['movi']['offset'] + 8;
 416.473 +                    $info_avdataend    = $info_avdataoffset + $info_riff[$riff_sub_type]['movi']['size'];
 416.474 +                    if ($info_avdataend > $getid3->info['filesize']) {
 416.475 +                        $getid3->warning('Probably truncated file - expecting '.$info_riff[$riff_sub_type]['movi']['size'].' bytes of data, only found '.($getid3->info['filesize'] - $info_avdataoffset).' (short by '.($info_riff[$riff_sub_type]['movi']['size'] - ($getid3->info['filesize'] - $info_avdataoffset)).' bytes)');
 416.476 +                        $info_avdataend = $getid3->info['filesize'];
 416.477 +                    }
 416.478 +                }
 416.479 +
 416.480 +                if (isset($info_riff['AVI ']['hdrl']['avih'][$stream_index]['data'])) {
 416.481 +                    $avihData = $info_riff['AVI ']['hdrl']['avih'][$stream_index]['data'];
 416.482 +
 416.483 +                    $info_riff_raw['avih'] = array ();
 416.484 +                    $info_riff_raw_avih = &$info_riff_raw['avih'];
 416.485 +            
 416.486 +                    getid3_lib::ReadSequence($this->endian_function, $info_riff_raw_avih, $avihData, 0, 
 416.487 +                        array (
 416.488 +                            'dwMicroSecPerFrame'    => 4, // frame display rate (or 0L)
 416.489 +                            'dwMaxBytesPerSec'      => 4, // max. transfer rate
 416.490 +                            'dwPaddingGranularity'  => 4, // pad to multiples of this size; normally 2K.
 416.491 +                            'dwFlags'               => 4, // the ever-present flags
 416.492 +                            'dwTotalFrames'         => 4, // # frames in file
 416.493 +                            'dwInitialFrames'       => 4,
 416.494 +                            'dwStreams'             => 4,
 416.495 +                            'dwSuggestedBufferSize' => 4,
 416.496 +                            'dwWidth'               => 4,
 416.497 +                            'dwHeight'              => 4,
 416.498 +                            'dwScale'               => 4,
 416.499 +                            'dwRate'                => 4,
 416.500 +                            'dwStart'               => 4,
 416.501 +                            'dwLength'              => 4
 416.502 +                        )
 416.503 +                    );
 416.504 +
 416.505 +                    $info_riff_raw_avih['flags']['hasindex']     = (bool)($info_riff_raw_avih['dwFlags'] & 0x00000010);
 416.506 +                    $info_riff_raw_avih['flags']['mustuseindex'] = (bool)($info_riff_raw_avih['dwFlags'] & 0x00000020);
 416.507 +                    $info_riff_raw_avih['flags']['interleaved']  = (bool)($info_riff_raw_avih['dwFlags'] & 0x00000100);
 416.508 +                    $info_riff_raw_avih['flags']['trustcktype']  = (bool)($info_riff_raw_avih['dwFlags'] & 0x00000800);
 416.509 +                    $info_riff_raw_avih['flags']['capturedfile'] = (bool)($info_riff_raw_avih['dwFlags'] & 0x00010000);
 416.510 +                    $info_riff_raw_avih['flags']['copyrighted']  = (bool)($info_riff_raw_avih['dwFlags'] & 0x00020010);
 416.511 +
 416.512 +                    $info_riff_video[$stream_index] = array ();
 416.513 +                    $info_riff_video_current = &$info_riff_video[$stream_index];
 416.514 +
 416.515 +                    if ($info_riff_raw_avih['dwWidth'] > 0) {
 416.516 +                        $info_riff_video_current['frame_width'] = $info_riff_raw_avih['dwWidth'];
 416.517 +                        $info_video['resolution_x']             = $info_riff_video_current['frame_width'];
 416.518 +                    }
 416.519 +                    
 416.520 +                    if ($info_riff_raw_avih['dwHeight'] > 0) {
 416.521 +                        $info_riff_video_current['frame_height'] = $info_riff_raw_avih['dwHeight'];
 416.522 +                        $info_video['resolution_y']              = $info_riff_video_current['frame_height'];
 416.523 +                    }
 416.524 +                    
 416.525 +                    if ($info_riff_raw_avih['dwTotalFrames'] > 0) {
 416.526 +                        $info_riff_video_current['total_frames'] = $info_riff_raw_avih['dwTotalFrames'];
 416.527 +                        $info_video['total_frames']              = $info_riff_video_current['total_frames'];
 416.528 +                    }
 416.529 +
 416.530 +                    $info_riff_video_current['frame_rate'] = round(1000000 / $info_riff_raw_avih['dwMicroSecPerFrame'], 3);
 416.531 +                    $info_video['frame_rate'] = $info_riff_video_current['frame_rate'];
 416.532 +                }
 416.533 +                
 416.534 +                if (isset($info_riff['AVI ']['hdrl']['strl']['strh'][0]['data'])) {
 416.535 +                    if (is_array($info_riff['AVI ']['hdrl']['strl']['strh'])) {
 416.536 +                        for ($i = 0; $i < count($info_riff['AVI ']['hdrl']['strl']['strh']); $i++) {
 416.537 +                            if (isset($info_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'])) {
 416.538 +                                $strh_data = $info_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'];
 416.539 +                                $strh_fcc_type = substr($strh_data,  0, 4);
 416.540 +
 416.541 +                                if (isset($info_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'])) {
 416.542 +                                    $strf_data = $info_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'];
 416.543 +
 416.544 +                                    // shortcut
 416.545 +                                    $info_riff_raw_strf_strh_fcc_type_stream_index = &$info_riff_raw['strf'][$strh_fcc_type][$stream_index];
 416.546 +
 416.547 +                                    switch ($strh_fcc_type) {
 416.548 +                                        case 'auds':
 416.549 +                                            $info_audio['bitrate_mode'] = 'cbr';
 416.550 +                                            $info_audio_dataformat      = 'wav';
 416.551 +                                            if (isset($info_riff_audio) && is_array($info_riff_audio)) {
 416.552 +                                                $stream_index = count($info_riff_audio);
 416.553 +                                            }
 416.554 +
 416.555 +                                            $info_riff_audio[$stream_index] = getid3_riff::RIFFparseWAVEFORMATex($strf_data);
 416.556 +                                            $info_audio['wformattag'] = $info_riff_audio[$stream_index]['raw']['wFormatTag'];
 416.557 +
 416.558 +                                            // shortcut
 416.559 +                                            $info_audio['streams'][$stream_index] = $info_riff_audio[$stream_index];
 416.560 +                                            $info_audio_streams_currentstream = &$info_audio['streams'][$stream_index];
 416.561 +
 416.562 +                                            if (@$info_audio_streams_currentstream['bits_per_sample'] === 0) {
 416.563 +                                                unset($info_audio_streams_currentstream['bits_per_sample']);
 416.564 +                                            }
 416.565 +                                            $info_audio_streams_currentstream['wformattag'] = $info_audio_streams_currentstream['raw']['wFormatTag'];
 416.566 +                                            unset($info_audio_streams_currentstream['raw']);
 416.567 +
 416.568 +                                            // shortcut
 416.569 +                                            $info_riff_raw['strf'][$strh_fcc_type][$stream_index] = $info_riff_audio[$stream_index]['raw'];
 416.570 +
 416.571 +                                            unset($info_riff_audio[$stream_index]['raw']);
 416.572 +                                            $info_audio = getid3_riff::array_merge_noclobber($info_audio, $info_riff_audio[$stream_index]);
 416.573 +
 416.574 +                                            $info_audio['lossless'] = false;
 416.575 +                                            switch ($info_riff_raw_strf_strh_fcc_type_stream_index['wFormatTag']) {
 416.576 +                                                
 416.577 +                                                case 0x0001:  // PCM
 416.578 +                                                    $info_audio_dataformat  = 'wav';
 416.579 +                                                    $info_audio['lossless'] = true;
 416.580 +                                                    break;
 416.581 +
 416.582 +                                                case 0x0050: // MPEG Layer 2 or Layer 1
 416.583 +                                                    $info_audio_dataformat = 'mp2'; // Assume Layer-2
 416.584 +                                                    break;
 416.585 +
 416.586 +                                                case 0x0055: // MPEG Layer 3
 416.587 +                                                    $info_audio_dataformat = 'mp3';
 416.588 +                                                    break;
 416.589 +
 416.590 +                                                case 0x00FF: // AAC
 416.591 +                                                    $info_audio_dataformat = 'aac';
 416.592 +                                                    break;
 416.593 +
 416.594 +                                                case 0x0161: // Windows Media v7 / v8 / v9
 416.595 +                                                case 0x0162: // Windows Media Professional v9
 416.596 +                                                case 0x0163: // Windows Media Lossess v9
 416.597 +                                                    $info_audio_dataformat = 'wma';
 416.598 +                                                    break;
 416.599 +
 416.600 +                                                case 0x2000: // AC-3
 416.601 +                                                    $info_audio_dataformat = 'ac3';
 416.602 +                                                    break;
 416.603 +
 416.604 +                                                case 0x2001: // DTS
 416.605 +                                                    $info_audio_dataformat = 'dts';
 416.606 +                                                    break;
 416.607 +
 416.608 +                                                default:
 416.609 +                                                    $info_audio_dataformat = 'wav';
 416.610 +                                                    break;
 416.611 +                                            }
 416.612 +                                            $info_audio_streams_currentstream['dataformat']   = $info_audio_dataformat;
 416.613 +                                            $info_audio_streams_currentstream['lossless']     = $info_audio['lossless'];
 416.614 +                                            $info_audio_streams_currentstream['bitrate_mode'] = $info_audio['bitrate_mode'];
 416.615 +                                            break;
 416.616 +
 416.617 +
 416.618 +                                        case 'iavs':
 416.619 +                                        case 'vids':
 416.620 +                                            // shortcut
 416.621 +                                            $info_riff_raw['strh'][$i]  = array ();
 416.622 +                                            $info_riff_raw_strh_current = &$info_riff_raw['strh'][$i];
 416.623 +                                            
 416.624 +                                            getid3_lib::ReadSequence($this->endian_function, $info_riff_raw_strh_current, $strh_data, 0, 
 416.625 +                                                array (
 416.626 +                                                    'fccType'               => -4, // same as $strh_fcc_type;
 416.627 +                                                    'fccHandler'            => -4,
 416.628 +                                                    'dwFlags'               => 4, // Contains AVITF_* flags
 416.629 +                                                    'wPriority'             => 2,
 416.630 +                                                    'wLanguage'             => 2,
 416.631 +                                                    'dwInitialFrames'       => 4,
 416.632 +                                                    'dwScale'               => 4,
 416.633 +                                                    'dwRate'                => 4,
 416.634 +                                                    'dwStart'               => 4,
 416.635 +                                                    'dwLength'              => 4,
 416.636 +                                                    'dwSuggestedBufferSize' => 4,
 416.637 +                                                    'dwQuality'             => 4,
 416.638 +                                                    'dwSampleSize'          => 4,
 416.639 +                                                    'rcFrame'               => 4
 416.640 +                                                )
 416.641 +                                            );
 416.642 +
 416.643 +                                            $info_riff_video_current['codec'] = getid3_riff::RIFFfourccLookup($info_riff_raw_strh_current['fccHandler']);
 416.644 +                                            $info_video['fourcc']             = $info_riff_raw_strh_current['fccHandler'];
 416.645 +                                            
 416.646 +                                            if (!$info_riff_video_current['codec'] && isset($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc']) && getid3_riff::RIFFfourccLookup($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc'])) {
 416.647 +                                                $info_riff_video_current['codec'] = getid3_riff::RIFFfourccLookup($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc']);
 416.648 +                                                $info_video['fourcc']             = $info_riff_raw_strf_strh_fcc_type_stream_index['fourcc'];
 416.649 +                                            }
 416.650 +                                            
 416.651 +                                            $info_video['codec']              = $info_riff_video_current['codec'];
 416.652 +                                            $info_video['pixel_aspect_ratio'] = (float)1;
 416.653 +                                            
 416.654 +                                            switch ($info_riff_raw_strh_current['fccHandler']) {
 416.655 +                                            
 416.656 +                                                case 'HFYU': // Huffman Lossless Codec
 416.657 +                                                case 'IRAW': // Intel YUV Uncompressed
 416.658 +                                                case 'YUY2': // Uncompressed YUV 4:2:2
 416.659 +                                                    $info_video['lossless'] = true;
 416.660 +                                                    break;
 416.661 +
 416.662 +                                                default:
 416.663 +                                                    $info_video['lossless'] = false;
 416.664 +                                                    break;
 416.665 +                                            }
 416.666 +
 416.667 +                                            switch ($strh_fcc_type) {
 416.668 +                                                
 416.669 +                                                case 'vids':
 416.670 +                                                    getid3_lib::ReadSequence($this->endian_function, $info_riff_raw_strf_strh_fcc_type_stream_index, $strf_data, 0,
 416.671 +                                                        array (
 416.672 +                                                            'biSize'          => 4, // number of bytes required by the BITMAPINFOHEADER structure
 416.673 +                                                            'biWidth'         => 4, // width of the bitmap in pixels
 416.674 +                                                            'biHeight'        => 4, // height of the bitmap in pixels. If biHeight is positive, the bitmap is a 'bottom-up' DIB and its origin is the lower left corner. If biHeight is negative, the bitmap is a 'top-down' DIB and its origin is the upper left corner
 416.675 +                                                            'biPlanes'        => 2, // number of color planes on the target device. In most cases this value must be set to 1
 416.676 +                                                            'biBitCount'      => 2, // Specifies the number of bits per pixels
 416.677 +                                                            'fourcc'          => -4, //
 416.678 +                                                            'biSizeImage'     => 4, // size of the bitmap data section of the image (the actual pixel data, excluding BITMAPINFOHEADER and RGBQUAD structures)
 416.679 +                                                            'biXPelsPerMeter' => 4, // horizontal resolution, in pixels per metre, of the target device
 416.680 +                                                            'biYPelsPerMeter' => 4, // vertical resolution, in pixels per metre, of the target device
 416.681 +                                                            'biClrUsed'       => 4, // actual number of color indices in the color table used by the bitmap. If this value is zero, the bitmap uses the maximum number of colors corresponding to the value of the biBitCount member for the compression mode specified by biCompression
 416.682 +                                                            'biClrImportant'  => 4 // number of color indices that are considered important for displaying the bitmap. If this value is zero, all colors are important
 416.683 +                                                        )
 416.684 +                                                    );
 416.685 +
 416.686 +                                                    $info_video['bits_per_sample'] = $info_riff_raw_strf_strh_fcc_type_stream_index['biBitCount'];
 416.687 +
 416.688 +                                                    if ($info_riff_video_current['codec'] == 'DV') {
 416.689 +                                                        $info_riff_video_current['dv_type'] = 2;
 416.690 +                                                    }
 416.691 +                                                    break;
 416.692 +
 416.693 +                                                case 'iavs':
 416.694 +                                                    $info_riff_video_current['dv_type'] = 1;
 416.695 +                                                    break;
 416.696 +                                            }
 416.697 +                                            break;
 416.698 +
 416.699 +                                        default:
 416.700 +                                            $getid3->warning('Unhandled fccType for stream ('.$i.'): "'.$strh_fcc_type.'"');
 416.701 +                                            break;
 416.702 +
 416.703 +                                    }
 416.704 +                                }
 416.705 +                            }
 416.706 +
 416.707 +                            if (isset($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc']) && getid3_riff::RIFFfourccLookup($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc'])) {
 416.708 +
 416.709 +                                $info_riff_video_current['codec'] = getid3_riff::RIFFfourccLookup($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc']);
 416.710 +                                $info_video['codec']              = $info_riff_video_current['codec'];
 416.711 +                                $info_video['fourcc']             = $info_riff_raw_strf_strh_fcc_type_stream_index['fourcc'];
 416.712 +
 416.713 +                                switch ($info_riff_raw_strf_strh_fcc_type_stream_index['fourcc']) {
 416.714 +                                
 416.715 +                                    case 'HFYU': // Huffman Lossless Codec
 416.716 +                                    case 'IRAW': // Intel YUV Uncompressed
 416.717 +                                    case 'YUY2': // Uncompressed YUV 4:2:2
 416.718 +                                        $info_video['lossless']        = true;
 416.719 +                                        $info_video['bits_per_sample'] = 24;
 416.720 +                                        break;
 416.721 +
 416.722 +                                    default:
 416.723 +                                        $info_video['lossless']        = false;
 416.724 +                                        $info_video['bits_per_sample'] = 24;
 416.725 +                                        break;
 416.726 +                                }
 416.727 +
 416.728 +                            }
 416.729 +                        }
 416.730 +                    }
 416.731 +                }
 416.732 +                break;
 416.733 +
 416.734 +
 416.735 +            case 'CDDA':
 416.736 +                $info_audio['bitrate_mode'] = 'cbr';
 416.737 +                $info_audio_dataformat      = 'cda';
 416.738 +                $info_audio['lossless']     = true;
 416.739 +                unset($getid3->info['mime_type']);
 416.740 +
 416.741 +                $info_avdataoffset = 44;
 416.742 +
 416.743 +                if (isset($info_riff['CDDA']['fmt '][0]['data'])) {
 416.744 +                    
 416.745 +                    $info_riff_cdda_fmt_0 = &$info_riff['CDDA']['fmt '][0];
 416.746 +
 416.747 +                    getid3_lib::ReadSequence($this->endian_function, $info_riff_cdda_fmt_0, $info_riff_cdda_fmt_0['data'], 0, 
 416.748 +                        array (
 416.749 +                            'unknown1'           => 2,
 416.750 +                            'track_num'          => 2,
 416.751 +                            'disc_id'            => 4,
 416.752 +                            'start_offset_frame' => 4,
 416.753 +                            'playtime_frames'    => 4,
 416.754 +                            'unknown6'           => 4,
 416.755 +                            'unknown7'           => 4
 416.756 +                        )
 416.757 +                    );
 416.758 +
 416.759 +                    $info_riff_cdda_fmt_0['start_offset_seconds'] = (float)$info_riff_cdda_fmt_0['start_offset_frame'] / 75;
 416.760 +                    $info_riff_cdda_fmt_0['playtime_seconds']     = (float)$info_riff_cdda_fmt_0['playtime_frames'] / 75;
 416.761 +                    $getid3->info['comments']['track']            = $info_riff_cdda_fmt_0['track_num'];
 416.762 +                    $getid3->info['playtime_seconds']             = $info_riff_cdda_fmt_0['playtime_seconds'];
 416.763 +
 416.764 +                    // hardcoded data for CD-audio
 416.765 +                    $info_audio['sample_rate']     = 44100;
 416.766 +                    $info_audio['channels']        = 2;
 416.767 +                    $info_audio['bits_per_sample'] = 16;
 416.768 +                    $info_audio['bitrate']         = $info_audio['sample_rate'] * $info_audio['channels'] * $info_audio['bits_per_sample'];
 416.769 +                    $info_audio['bitrate_mode']    = 'cbr';
 416.770 +                }
 416.771 +                break;
 416.772 +
 416.773 +
 416.774 +            case 'AIFF':
 416.775 +            case 'AIFC':
 416.776 +                $info_audio['bitrate_mode'] = 'cbr';
 416.777 +                $info_audio_dataformat      = 'aiff';
 416.778 +                $info_audio['lossless']     = true;
 416.779 +                $getid3->info['mime_type']      = 'audio/x-aiff';
 416.780 +
 416.781 +                if (isset($info_riff[$riff_sub_type]['SSND'][0]['offset'])) {
 416.782 +                    $info_avdataoffset = $info_riff[$riff_sub_type]['SSND'][0]['offset'] + 8;
 416.783 +                    $info_avdataend    = $info_avdataoffset + $info_riff[$riff_sub_type]['SSND'][0]['size'];
 416.784 +                    if ($info_avdataend > $getid3->info['filesize']) {
 416.785 +                        if (($info_avdataend == ($getid3->info['filesize'] + 1)) && (($getid3->info['filesize'] % 2) == 1)) {
 416.786 +                            // structures rounded to 2-byte boundary, but dumb encoders
 416.787 +                            // forget to pad end of file to make this actually work
 416.788 +                        } else {
 416.789 +                            $getid3->warning('Probable truncated AIFF file: expecting '.$info_riff[$riff_sub_type]['SSND'][0]['size'].' bytes of audio data, only '.($getid3->info['filesize'] - $info_avdataoffset).' bytes found');
 416.790 +                        }
 416.791 +                        $info_avdataend = $getid3->info['filesize'];
 416.792 +                    }
 416.793 +                }
 416.794 +
 416.795 +                if (isset($info_riff[$riff_sub_type]['COMM'][0]['data'])) {
 416.796 +
 416.797 +                    // shortcut
 416.798 +                    $info_riff_RIFFsubtype_COMM_0_data = &$info_riff[$riff_sub_type]['COMM'][0]['data'];
 416.799 +
 416.800 +                    $info_riff_audio['channels']         = getid3_lib::BigEndianSyncSafe2Int(substr($info_riff_RIFFsubtype_COMM_0_data,  0,  2));
 416.801 +                    $info_riff_audio['total_samples']    = getid3_lib::BigEndian2Int(        substr($info_riff_RIFFsubtype_COMM_0_data,  2,  4));
 416.802 +                    $info_riff_audio['bits_per_sample']  = getid3_lib::BigEndianSyncSafe2Int(substr($info_riff_RIFFsubtype_COMM_0_data,  6,  2));
 416.803 +                    $info_riff_audio['sample_rate']      = (int)getid3_riff::BigEndian2Float(substr($info_riff_RIFFsubtype_COMM_0_data,  8, 10));
 416.804 +
 416.805 +                    if ($info_riff[$riff_sub_type]['COMM'][0]['size'] > 18) {
 416.806 +                        $info_riff_audio['codec_fourcc'] =                           substr($info_riff_RIFFsubtype_COMM_0_data, 18,  4);
 416.807 +                        $codec_name_size                 = getid3_lib::BigEndian2Int(substr($info_riff_RIFFsubtype_COMM_0_data, 22,  1));
 416.808 +                        $info_riff_audio['codec_name']   =                           substr($info_riff_RIFFsubtype_COMM_0_data, 23,  $codec_name_size);
 416.809 +                        
 416.810 +                        switch ($info_riff_audio['codec_name']) {
 416.811 +                        
 416.812 +                            case 'NONE':
 416.813 +                                $info_audio['codec']    = 'Pulse Code Modulation (PCM)';
 416.814 +                                $info_audio['lossless'] = true;
 416.815 +                                break;
 416.816 +
 416.817 +                            case '':
 416.818 +                                switch ($info_riff_audio['codec_fourcc']) {
 416.819 +                        
 416.820 +                                    // http://developer.apple.com/qa/snd/snd07.html
 416.821 +                                    case 'sowt':
 416.822 +                                        $info_riff_audio['codec_name'] = 'Two\'s Compliment Little-Endian PCM';
 416.823 +                                        $info_audio['lossless'] = true;
 416.824 +                                        break;
 416.825 +
 416.826 +                                    case 'twos':
 416.827 +                                        $info_riff_audio['codec_name'] = 'Two\'s Compliment Big-Endian PCM';
 416.828 +                                        $info_audio['lossless'] = true;
 416.829 +                                        break;
 416.830 +
 416.831 +                                    default:
 416.832 +                                        break;
 416.833 +                                }
 416.834 +                                break;
 416.835 +
 416.836 +                            default:
 416.837 +                                $info_audio['codec']    = $info_riff_audio['codec_name'];
 416.838 +                                $info_audio['lossless'] = false;
 416.839 +                                break;
 416.840 +                        }
 416.841 +                    }
 416.842 +
 416.843 +                    $info_audio['channels'] = $info_riff_audio['channels'];
 416.844 +                    
 416.845 +                    if ($info_riff_audio['bits_per_sample'] > 0) {
 416.846 +                        $info_audio['bits_per_sample'] = $info_riff_audio['bits_per_sample'];
 416.847 +                    }
 416.848 +                    
 416.849 +                    $info_audio['sample_rate']        = $info_riff_audio['sample_rate'];
 416.850 +                    $getid3->info['playtime_seconds'] = $info_riff_audio['total_samples'] / $info_audio['sample_rate'];
 416.851 +                }
 416.852 +
 416.853 +                if (isset($info_riff[$riff_sub_type]['COMT'])) {
 416.854 +                    
 416.855 +                    $comment_count = getid3_lib::BigEndian2Int(substr($info_riff[$riff_sub_type]['COMT'][0]['data'], 0, 2));
 416.856 +                    $offset = 2;
 416.857 +                    
 416.858 +                    for ($i = 0; $i < $comment_count; $i++) {
 416.859 +                        
 416.860 +                        $getid3->info['comments_raw'][$i]['timestamp'] = getid3_lib::BigEndian2Int(        substr($info_riff[$riff_sub_type]['COMT'][0]['data'], $offset, 4));
 416.861 +                        $offset += 4;                                  
 416.862 +                                                                       
 416.863 +                        $getid3->info['comments_raw'][$i]['marker_id'] = getid3_lib::BigEndianSyncSafe2Int(substr($info_riff[$riff_sub_type]['COMT'][0]['data'], $offset, 2));
 416.864 +                        $offset += 2;                                  
 416.865 +                                                                       
 416.866 +                        $comment_length                                = getid3_lib::BigEndian2Int(        substr($info_riff[$riff_sub_type]['COMT'][0]['data'], $offset, 2));
 416.867 +                        $offset += 2;                                  
 416.868 +                                                                       
 416.869 +                        $getid3->info['comments_raw'][$i]['comment']   =                                   substr($info_riff[$riff_sub_type]['COMT'][0]['data'], $offset, $comment_length);
 416.870 +                        $offset += $comment_length;
 416.871 +
 416.872 +                        $getid3->info['comments_raw'][$i]['timestamp_unix'] = getid3_riff::DateMac2Unix($getid3->info['comments_raw'][$i]['timestamp']);
 416.873 +                        $info_riff['comments']['comment'][] = $getid3->info['comments_raw'][$i]['comment'];
 416.874 +                    }
 416.875 +                }
 416.876 +
 416.877 +                foreach (array ('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment') as $key => $value) {
 416.878 +                    if (isset($info_riff[$riff_sub_type][$key][0]['data'])) {
 416.879 +                        $info_riff['comments'][$value][] = $info_riff[$riff_sub_type][$key][0]['data'];
 416.880 +                    }
 416.881 +                }
 416.882 +                break;
 416.883 +
 416.884 +
 416.885 +            case '8SVX':
 416.886 +                $info_audio['bitrate_mode']    = 'cbr';
 416.887 +                $info_audio_dataformat         = '8svx';
 416.888 +                $info_audio['bits_per_sample'] = 8;
 416.889 +                $info_audio['channels']        = 1; // overridden below, if need be
 416.890 +                $getid3->info['mime_type']     = 'audio/x-aiff';
 416.891 +
 416.892 +                if (isset($info_riff[$riff_sub_type]['BODY'][0]['offset'])) {
 416.893 +                    $info_avdataoffset = $info_riff[$riff_sub_type]['BODY'][0]['offset'] + 8;
 416.894 +                    $info_avdataend    = $info_avdataoffset + $info_riff[$riff_sub_type]['BODY'][0]['size'];
 416.895 +                    if ($info_avdataend > $getid3->info['filesize']) {
 416.896 +                        $getid3->warning('Probable truncated AIFF file: expecting '.$info_riff[$riff_sub_type]['BODY'][0]['size'].' bytes of audio data, only '.($getid3->info['filesize'] - $info_avdataoffset).' bytes found');
 416.897 +                    }
 416.898 +                }
 416.899 +
 416.900 +                if (isset($info_riff[$riff_sub_type]['VHDR'][0]['offset'])) {
 416.901 +                    // shortcut
 416.902 +                    $info_riff_riff_sub_type_vhdr_0 = &$info_riff[$riff_sub_type]['VHDR'][0];
 416.903 +
 416.904 +                    getid3_lib::ReadSequence('BigEndian2Int', $info_riff_riff_sub_type_vhdr_0, $info_riff_riff_sub_type_vhdr_0['data'], 0, 
 416.905 +                        array (
 416.906 +                            'oneShotHiSamples'  => 4,
 416.907 +                            'repeatHiSamples'   => 4,
 416.908 +                            'samplesPerHiCycle' => 4,
 416.909 +                            'samplesPerSec'     => 2,
 416.910 +                            'ctOctave'          => 1,
 416.911 +                            'sCompression'      => 1,
 416.912 +                            'Volume'            => -4
 416.913 +                        )
 416.914 +                    );
 416.915 +                    
 416.916 +                    $info_riff_riff_sub_type_vhdr_0['Volume'] = getid3_riff::FixedPoint16_16($info_riff_riff_sub_type_vhdr_0['Volume']);
 416.917 +
 416.918 +                    $info_audio['sample_rate'] = $info_riff_riff_sub_type_vhdr_0['samplesPerSec'];
 416.919 +
 416.920 +                    switch ($info_riff_riff_sub_type_vhdr_0['sCompression']) {
 416.921 +                        case 0:
 416.922 +                            $info_audio['codec']    = 'Pulse Code Modulation (PCM)';
 416.923 +                            $info_audio['lossless'] = true;
 416.924 +                            $actual_bits_per_sample = 8;
 416.925 +                            break;
 416.926 +
 416.927 +                        case 1:
 416.928 +                            $info_audio['codec']    = 'Fibonacci-delta encoding';
 416.929 +                            $info_audio['lossless'] = false;
 416.930 +                            $actual_bits_per_sample = 4;
 416.931 +                            break;
 416.932 +
 416.933 +                        default:
 416.934 +                            $getid3->warning('Unexpected sCompression value in 8SVX.VHDR chunk - expecting 0 or 1, found "'.sCompression.'"');
 416.935 +                            break;
 416.936 +                    }
 416.937 +                }
 416.938 +
 416.939 +                if (isset($info_riff[$riff_sub_type]['CHAN'][0]['data'])) {
 416.940 +                    $ChannelsIndex = getid3_lib::BigEndian2Int(substr($info_riff[$riff_sub_type]['CHAN'][0]['data'], 0, 4));
 416.941 +                    switch ($ChannelsIndex) {
 416.942 +                        case 6: // Stereo
 416.943 +                            $info_audio['channels'] = 2;
 416.944 +                            break;
 416.945 +
 416.946 +                        case 2: // Left channel only
 416.947 +                        case 4: // Right channel only
 416.948 +                            $info_audio['channels'] = 1;
 416.949 +                            break;
 416.950 +
 416.951 +                        default:
 416.952 +                            $getid3->warning('Unexpected value in 8SVX.CHAN chunk - expecting 2 or 4 or 6, found "'.$ChannelsIndex.'"');
 416.953 +                            break;
 416.954 +                    }
 416.955 +
 416.956 +                }
 416.957 +
 416.958 +                foreach (array ('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment') as $key => $value) {
 416.959 +                    if (isset($info_riff[$riff_sub_type][$key][0]['data'])) {
 416.960 +                        $info_riff['comments'][$value][] = $info_riff[$riff_sub_type][$key][0]['data'];
 416.961 +                    }
 416.962 +                }
 416.963 +
 416.964 +                $info_audio['bitrate'] = $info_audio['sample_rate'] * $actual_bits_per_sample * $info_audio['channels'];
 416.965 +                if (!empty($info_audio['bitrate'])) {
 416.966 +                    $getid3->info['playtime_seconds'] = ($info_avdataend - $info_avdataoffset) / ($info_audio['bitrate'] / 8);
 416.967 +                }
 416.968 +                break;
 416.969 +
 416.970 +
 416.971 +            case 'CDXA':
 416.972 +            
 416.973 +                $getid3->info['mime_type'] = 'video/mpeg';
 416.974 +                if (!empty($info_riff['CDXA']['data'][0]['size'])) {
 416.975 +                    $GETID3_ERRORARRAY = &$getid3->info['warning'];
 416.976 +                    
 416.977 +                    if (!$getid3->include_module_optional('audio-video.mpeg')) {
 416.978 +                        $getid3->warning('MPEG skipped because mpeg module is missing.');
 416.979 +                    }
 416.980 +                                        
 416.981 +                    else {
 416.982 +                        
 416.983 +                        // Clone getid3 - messing with offsets - better safe than sorry
 416.984 +                        $clone = clone $getid3;
 416.985 +                    
 416.986 +                        // Analyse
 416.987 +                        $mpeg = new getid3_mpeg($clone);
 416.988 +                        $mpeg->Analyze();
 416.989 +
 416.990 +                        // Import from clone and destroy                            
 416.991 +                        $getid3->info['audio']   = $clone->info['audio'];
 416.992 +                        $getid3->info['video']   = $clone->info['video'];
 416.993 +                        $getid3->info['mpeg']    = $clone->info['mpeg'];
 416.994 +                        $getid3->info['warning'] = $clone->info['warning'];
 416.995 +
 416.996 +                        unset($clone);
 416.997 +                    }
 416.998 +                }
 416.999 +                
416.1000 +                break;
416.1001 +
416.1002 +
416.1003 +            default:
416.1004 +                throw new getid3_exception('Unknown RIFF type: expecting one of (WAVE|RMP3|AVI |CDDA|AIFF|AIFC|8SVX|CDXA), found "'.$riff_sub_type.'" instead');
416.1005 +        }
416.1006 +        
416.1007 +        
416.1008 +        if (@$info_riff_raw['fmt ']['wFormatTag'] == 1) {
416.1009 +                     
416.1010 +            // http://www.mega-nerd.com/erikd/Blog/Windiots/dts.html
416.1011 +            $this->fseek($getid3->info['avdataoffset'], SEEK_SET);
416.1012 +            $bytes4 = $this->fread(4);
416.1013 +            
416.1014 +            // DTSWAV
416.1015 +            if (preg_match('/^\xFF\x1F\x00\xE8/s', $bytes4)) {
416.1016 +                $info_audio_dataformat = 'dts';
416.1017 +            } 
416.1018 +            
416.1019 +            // DTS, but this probably shouldn't happen
416.1020 +            elseif (preg_match('/^\x7F\xFF\x80\x01/s', $bytes4)) {
416.1021 +                $info_audio_dataformat = 'dts';
416.1022 +            }
416.1023 +        }
416.1024 +
416.1025 +        if (@is_array($info_riff_wave['DISP'])) {
416.1026 +            $info_riff['comments']['title'][] = trim(substr($info_riff_wave['DISP'][count($info_riff_wave['DISP']) - 1]['data'], 4));
416.1027 +        }
416.1028 +        
416.1029 +        if (@is_array($info_riff_wave['INFO'])) {
416.1030 +			getid3_riff::RIFFCommentsParse($info_riff_wave['INFO'], $info_riff['comments']);
416.1031 +		}
416.1032 +		
416.1033 +        if (isset($info_riff_wave['INFO']) && is_array($info_riff_wave['INFO'])) {
416.1034 +            
416.1035 +            foreach (array ('IARL' => 'archivallocation', 'IART' => 'artist', 'ICDS' => 'costumedesigner', 'ICMS' => 'commissionedby', 'ICMT' => 'comment', 'ICNT' => 'country', 'ICOP' => 'copyright', 'ICRD' => 'creationdate', 'IDIM' => 'dimensions', 'IDIT' => 'digitizationdate', 'IDPI' => 'resolution', 'IDST' => 'distributor', 'IEDT' => 'editor', 'IENG' => 'engineers', 'IFRM' => 'accountofparts', 'IGNR' => 'genre', 'IKEY' => 'keywords', 'ILGT' => 'lightness', 'ILNG' => 'language', 'IMED' => 'orignalmedium', 'IMUS' => 'composer', 'INAM' => 'title', 'IPDS' => 'productiondesigner', 'IPLT' => 'palette', 'IPRD' => 'product', 'IPRO' => 'producer', 'IPRT' => 'part', 'IRTD' => 'rating', 'ISBJ' => 'subject', 'ISFT' => 'software', 'ISGN' => 'secondarygenre', 'ISHP' => 'sharpness', 'ISRC' => 'sourcesupplier', 'ISRF' => 'digitizationsource', 'ISTD' => 'productionstudio', 'ISTR' => 'starring', 'ITCH' => 'encoded_by', 'IWEB' => 'url', 'IWRI' => 'writer') as $key => $value) {
416.1036 +                if (isset($info_riff_wave['INFO'][$key])) {
416.1037 +                    foreach ($info_riff_wave['INFO'][$key] as $comment_id => $comment_data) {
416.1038 +                        if (trim($comment_data['data']) != '') {
416.1039 +                            $info_riff['comments'][$value][] = trim($comment_data['data']);
416.1040 +                        }
416.1041 +                    }
416.1042 +                }
416.1043 +            }
416.1044 +        }
416.1045 +
416.1046 +        if (empty($info_audio['encoder']) && !empty($getid3->info['mpeg']['audio']['LAME']['short_version'])) {
416.1047 +            $info_audio['encoder'] = $getid3->info['mpeg']['audio']['LAME']['short_version'];
416.1048 +        }
416.1049 +
416.1050 +        if (!isset($getid3->info['playtime_seconds'])) {
416.1051 +            $getid3->info['playtime_seconds'] = 0;
416.1052 +        }
416.1053 +
416.1054 +        if (isset($info_riff_raw['avih']['dwTotalFrames']) && isset($info_riff_raw['avih']['dwMicroSecPerFrame'])) {
416.1055 +            $getid3->info['playtime_seconds'] = $info_riff_raw['avih']['dwTotalFrames'] * ($info_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
416.1056 +        }
416.1057 +
416.1058 +        if ($getid3->info['playtime_seconds'] > 0) {
416.1059 +            if (isset($info_riff_audio) && isset($info_riff_video)) {
416.1060 +
416.1061 +                if (!isset($getid3->info['bitrate'])) {
416.1062 +                    $getid3->info['bitrate'] = ((($info_avdataend - $info_avdataoffset) / $getid3->info['playtime_seconds']) * 8);
416.1063 +                }
416.1064 +
416.1065 +            } elseif (isset($info_riff_audio) && !isset($info_riff_video)) {
416.1066 +
416.1067 +                if (!isset($info_audio['bitrate'])) {
416.1068 +                    $info_audio['bitrate'] = ((($info_avdataend - $info_avdataoffset) / $getid3->info['playtime_seconds']) * 8);
416.1069 +                }
416.1070 +
416.1071 +            } elseif (!isset($info_riff_audio) && isset($info_riff_video)) {
416.1072 +
416.1073 +                if (!isset($info_video['bitrate'])) {
416.1074 +                    $info_video['bitrate'] = ((($info_avdataend - $info_avdataoffset) / $getid3->info['playtime_seconds']) * 8);
416.1075 +                }
416.1076 +
416.1077 +            }
416.1078 +        }
416.1079 +
416.1080 +
416.1081 +        if (isset($info_riff_video) && isset($info_audio['bitrate']) && ($info_audio['bitrate'] > 0) && ($getid3->info['playtime_seconds'] > 0)) {
416.1082 +
416.1083 +            $getid3->info['bitrate'] = ((($info_avdataend - $info_avdataoffset) / $getid3->info['playtime_seconds']) * 8);
416.1084 +            $info_audio['bitrate'] = 0;
416.1085 +            $info_video['bitrate'] = $getid3->info['bitrate'];
416.1086 +            foreach ($info_riff_audio as $channelnumber => $audioinfoarray) {
416.1087 +                $info_video['bitrate'] -= $audioinfoarray['bitrate'];
416.1088 +                $info_audio['bitrate'] += $audioinfoarray['bitrate'];
416.1089 +            }
416.1090 +            if ($info_video['bitrate'] <= 0) {
416.1091 +                unset($info_video['bitrate']);
416.1092 +            }
416.1093 +            if ($info_audio['bitrate'] <= 0) {
416.1094 +                unset($info_audio['bitrate']);
416.1095 +            }
416.1096 +        }
416.1097 +
416.1098 +        if (isset($getid3->info['mpeg']['audio'])) {
416.1099 +            $info_audio_dataformat      = 'mp'.$getid3->info['mpeg']['audio']['layer'];
416.1100 +            $info_audio['sample_rate']  = $getid3->info['mpeg']['audio']['sample_rate'];
416.1101 +            $info_audio['channels']     = $getid3->info['mpeg']['audio']['channels'];
416.1102 +            $info_audio['bitrate']      = $getid3->info['mpeg']['audio']['bitrate'];
416.1103 +            $info_audio['bitrate_mode'] = strtolower($getid3->info['mpeg']['audio']['bitrate_mode']);
416.1104 +
416.1105 +            if (!empty($getid3->info['mpeg']['audio']['codec'])) {
416.1106 +                $info_audio['codec'] = $getid3->info['mpeg']['audio']['codec'].' '.$info_audio['codec'];
416.1107 +            }
416.1108 +
416.1109 +            if (!empty($info_audio['streams'])) {
416.1110 +                foreach ($info_audio['streams'] as $streamnumber => $streamdata) {
416.1111 +                    if ($streamdata['dataformat'] == $info_audio_dataformat) {
416.1112 +                        $info_audio['streams'][$streamnumber]['sample_rate']  = $info_audio['sample_rate'];
416.1113 +                        $info_audio['streams'][$streamnumber]['channels']     = $info_audio['channels'];
416.1114 +                        $info_audio['streams'][$streamnumber]['bitrate']      = $info_audio['bitrate'];
416.1115 +                        $info_audio['streams'][$streamnumber]['bitrate_mode'] = $info_audio['bitrate_mode'];
416.1116 +                        $info_audio['streams'][$streamnumber]['codec']        = $info_audio['codec'];
416.1117 +                    }
416.1118 +                }
416.1119 +            }
416.1120 +            $info_audio['encoder_options'] = getid3_mp3::GuessEncoderOptions($getid3->info);
416.1121 +        }
416.1122 +
416.1123 +
416.1124 +        if (!empty($info_riff_raw['fmt ']['wBitsPerSample']) && ($info_riff_raw['fmt ']['wBitsPerSample'] > 0)) {
416.1125 +            switch ($info_audio_dataformat) {
416.1126 +                case 'ac3':
416.1127 +                    // ignore bits_per_sample
416.1128 +                    break;
416.1129 +
416.1130 +                default:
416.1131 +                    $info_audio['bits_per_sample'] = $info_riff_raw['fmt ']['wBitsPerSample'];
416.1132 +                    break;
416.1133 +            }
416.1134 +        }
416.1135 +
416.1136 +
416.1137 +        if (empty($info_riff_raw)) {
416.1138 +            unset($info_riff['raw']);
416.1139 +        }
416.1140 +        if (empty($info_riff_audio)) {
416.1141 +            unset($info_riff['audio']);
416.1142 +        }
416.1143 +        if (empty($info_riff_video)) {
416.1144 +            unset($info_riff['video']);
416.1145 +        }
416.1146 +        if (empty($info_audio_dataformat)) {
416.1147 +            unset($info_audio['dataformat']);
416.1148 +        }
416.1149 +        if (empty($getid3->info['audio'])) {
416.1150 +            unset($getid3->info['audio']);
416.1151 +        }
416.1152 +        if (empty($info_video)) {
416.1153 +            unset($getid3->info['video']);
416.1154 +        }
416.1155 +
416.1156 +        return true;
416.1157 +    }
416.1158 +
416.1159 +
416.1160 +
416.1161 +    public function ParseRIFF($start_offset, $max_offset) {
416.1162 +                                                         
416.1163 +        $getid3 = $this->getid3;
416.1164 +        
416.1165 +        $info   = &$getid3->info;
416.1166 +        
416.1167 +        $endian_function = $this->endian_function;
416.1168 +
416.1169 +        $max_offset = min($max_offset, $info['avdataend']);
416.1170 +        
416.1171 +        $riff_chunk = false;
416.1172 +
416.1173 +        $this->fseek($start_offset, SEEK_SET);
416.1174 +        
416.1175 +        while ($this->ftell() < $max_offset) {
416.1176 +            
416.1177 +            $chunk_name = $this->fread(4);
416.1178 +            
416.1179 +            if (strlen($chunk_name) < 4) {
416.1180 +                throw new getid3_exception('Expecting chunk name at offset '.($this->ftell() - 4).' but found nothing. Aborting RIFF parsing.');
416.1181 +            }
416.1182 +            
416.1183 +            $chunk_size = getid3_lib::$endian_function($this->fread(4));
416.1184 +            
416.1185 +            if ($chunk_size == 0) {
416.1186 +                continue;
416.1187 +                throw new getid3_exception('Chunk size at offset '.($this->ftell() - 4).' is zero. Aborting RIFF parsing.');
416.1188 +            }
416.1189 +            
416.1190 +            if (($chunk_size % 2) != 0) {
416.1191 +                // all structures are packed on word boundaries
416.1192 +                $chunk_size++;
416.1193 +            }
416.1194 +
416.1195 +            switch ($chunk_name) {
416.1196 +
416.1197 +                case 'LIST':
416.1198 +                    $list_name = $this->fread(4);
416.1199 +                    
416.1200 +                    switch ($list_name) {
416.1201 +                    
416.1202 +                        case 'movi':
416.1203 +                        case 'rec ':
416.1204 +                            $riff_chunk[$list_name]['offset'] = $this->ftell() - 4;
416.1205 +                            $riff_chunk[$list_name]['size']   = $chunk_size;
416.1206 +
416.1207 +                            static $parsed_audio_stream = false;
416.1208 +                            
416.1209 +                            if (!$parsed_audio_stream) {
416.1210 +                                $where_we_were = $this->ftell();
416.1211 +                                $audio_chunk_header = $this->fread(12);
416.1212 +                                $audio_chunk_stream_num  =                             substr($audio_chunk_header, 0, 2);
416.1213 +                                $audio_chunk_stream_type =                             substr($audio_chunk_header, 2, 2);
416.1214 +                                $audio_chunk_size       = getid3_lib::LittleEndian2Int(substr($audio_chunk_header, 4, 4));
416.1215 +
416.1216 +                                if ($audio_chunk_stream_type == 'wb') {
416.1217 +                                    $first_four_bytes = substr($audio_chunk_header, 8, 4);
416.1218 +
416.1219 +                                    
416.1220 +                                    //// MPEG
416.1221 +                                    
416.1222 +                                    if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', $first_four_bytes)) {
416.1223 +
416.1224 +                                        if (!$getid3->include_module_optional('audio.mp3')) {
416.1225 +                                            $getid3->warning('MP3 skipped because mp3 module is missing.');
416.1226 +                                        }
416.1227 +                                        
416.1228 +                                        elseif (getid3_mp3::MPEGaudioHeaderBytesValid($first_four_bytes)) {
416.1229 +                                            
416.1230 +                                            // Clone getid3 - messing with offsets - better safe than sorry
416.1231 +                                            $clone = clone $getid3;
416.1232 +                                            $clone->info['avdataoffset'] = $this->ftell() - 4;
416.1233 +                                            $clone->info['avdataend']    = $this->ftell() + $audio_chunk_size;
416.1234 +                                        
416.1235 +                                            $mp3 = new getid3_mp3($clone);
416.1236 +                                            $mp3->AnalyzeMPEGaudioInfo();
416.1237 +                                            
416.1238 +                                            // Import from clone and destroy
416.1239 +                                            if (isset($clone->info['mpeg']['audio'])) {
416.1240 +                                            
416.1241 +                                                $info['mpeg']['audio'] = $clone->info['mpeg']['audio'];
416.1242 +                                                
416.1243 +                                                $info['audio']['dataformat']   = 'mp'.$info['mpeg']['audio']['layer'];
416.1244 +                                                $info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
416.1245 +                                                $info['audio']['channels']     = $info['mpeg']['audio']['channels'];
416.1246 +                                                $info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
416.1247 +                                                $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
416.1248 +                                                $info['bitrate']               = $info['audio']['bitrate'];
416.1249 +                                                
416.1250 +                                                $getid3->warning($clone->warnings());
416.1251 +                                                unset($clone);
416.1252 +                                            }
416.1253 +                                        }
416.1254 +                                    } 
416.1255 +                                    
416.1256 +                                    //// AC3-WAVE
416.1257 +                                    
416.1258 +                                    elseif (preg_match('/^\x0B\x77/s', $first_four_bytes)) {
416.1259 +
416.1260 +                                        if (!$getid3->include_module_optional('audio.ac3')) {
416.1261 +                                            $getid3->warning('AC3 skipped because ac3 module is missing.');
416.1262 +                                        }
416.1263 +                                        
416.1264 +                                        else {
416.1265 +        
416.1266 +                                            // Clone getid3 - messing with offsets - better safe than sorry
416.1267 +                                            $clone = clone $getid3;
416.1268 +                                            $clone->info['avdataoffset'] = $this->ftell() - 4;                
416.1269 +                                            $clone->info['avdataend']    = $this->ftell() + $audio_chunk_size;
416.1270 +                                            
416.1271 +                                            // Analyze clone by fp
416.1272 +                                            $ac3 = new getid3_ac3($clone);
416.1273 +                                            $ac3->Analyze();
416.1274 +                                            
416.1275 +                                            // Import from clone and destroy
416.1276 +                                            $info['audio'] = $clone->info['audio'];
416.1277 +                                            $info['ac3']   = $clone->info['ac3'];
416.1278 +                                            $getid3->warning($clone->warnings());
416.1279 +                                            unset($clone);
416.1280 +                                        }
416.1281 +                                    }
416.1282 +                                }
416.1283 +
416.1284 +                                $parsed_audio_stream = true;
416.1285 +                                $this->fseek($where_we_were, SEEK_SET);
416.1286 +
416.1287 +                            }
416.1288 +                            $this->fseek($chunk_size - 4, SEEK_CUR);
416.1289 +                            break;
416.1290 +
416.1291 +                        default:
416.1292 +                            if (!isset($riff_chunk[$list_name])) {
416.1293 +                                $riff_chunk[$list_name] = array ();
416.1294 +                            }
416.1295 +                            $list_chunk_parent    = $list_name;
416.1296 +                            $list_chunk_max_offset = $this->ftell() - 4 + $chunk_size;
416.1297 +                            if ($parsed_chunk = $this->ParseRIFF($this->ftell(), $this->ftell() + $chunk_size - 4)) {
416.1298 +                                $riff_chunk[$list_name] = array_merge_recursive($riff_chunk[$list_name], $parsed_chunk);
416.1299 +                            }
416.1300 +                            break;
416.1301 +                    }
416.1302 +                    break;
416.1303 +
416.1304 +
416.1305 +                default:
416.1306 +                
416.1307 +                    $this_index = 0;
416.1308 +                    if (isset($riff_chunk[$chunk_name]) && is_array($riff_chunk[$chunk_name])) {
416.1309 +                        $this_index = count($riff_chunk[$chunk_name]);
416.1310 +                    }
416.1311 +                    $riff_chunk[$chunk_name][$this_index]['offset'] = $this->ftell() - 8;
416.1312 +                    $riff_chunk[$chunk_name][$this_index]['size']   = $chunk_size;
416.1313 +                    switch ($chunk_name) {
416.1314 +                        case 'data':
416.1315 +                            $info['avdataoffset'] = $this->ftell();
416.1316 +                            $info['avdataend']    = $info['avdataoffset'] + $chunk_size;
416.1317 +
416.1318 +                            $riff_data_chunk_contents_test = $this->fread(36);
416.1319 +
416.1320 +
416.1321 +                            //// This is probably MP3 data
416.1322 +
416.1323 +                            if ((strlen($riff_data_chunk_contents_test) > 0) && preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', substr($riff_data_chunk_contents_test, 0, 4))) {
416.1324 +                                
416.1325 +                                try {
416.1326 +                                
416.1327 +                                    if (!$getid3->include_module_optional('audio.mp3')) {
416.1328 +                                        $getid3->warning('MP3 skipped because mp3 module is missing.');
416.1329 +                                    }
416.1330 +    
416.1331 +                                    
416.1332 +                                    // Clone getid3 - messing with offsets - better safe than sorry
416.1333 +                                    $clone = clone $getid3;
416.1334 +                                    
416.1335 +                                    if (getid3_mp3::MPEGaudioHeaderBytesValid(substr($riff_data_chunk_contents_test, 0, 4))) {
416.1336 +                                    
416.1337 +                                        $mp3 = new getid3_mp3($clone);
416.1338 +                                        $mp3->AnalyzeMPEGaudioInfo();
416.1339 +                                        
416.1340 +                                        // Import from clone and destroy
416.1341 +                                        if (isset($clone->info['mpeg']['audio'])) {
416.1342 +                                        
416.1343 +                                            $info['mpeg']['audio'] = $clone->info['mpeg']['audio'];
416.1344 +                                            
416.1345 +                                            $info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
416.1346 +                                            $info['audio']['channels']     = $info['mpeg']['audio']['channels'];
416.1347 +                                            $info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
416.1348 +                                            $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
416.1349 +                                            $info['bitrate']               = $info['audio']['bitrate'];
416.1350 +                                            
416.1351 +                                            $getid3->warning($clone->warnings());
416.1352 +                                            unset($clone);
416.1353 +                                        }
416.1354 +                                    }
416.1355 +                                }
416.1356 +                                catch (Exception $e) {
416.1357 +                                    // do nothing - not MP3 data
416.1358 +                                }
416.1359 +                            } 
416.1360 +                            
416.1361 +                        
416.1362 +                            //// This is probably AC-3 data
416.1363 +                            
416.1364 +                            elseif ((strlen($riff_data_chunk_contents_test) > 0) && (substr($riff_data_chunk_contents_test, 0, 2) == "\x0B\x77")) {
416.1365 +
416.1366 +                                if (!$getid3->include_module_optional('audio.ac3')) {
416.1367 +                                    $getid3->warning('AC3 skipped because ac3 module is missing.');
416.1368 +                                }
416.1369 +                                
416.1370 +                                else {
416.1371 +
416.1372 +                                    // Clone getid3 - messing with offsets - better safe than sorry
416.1373 +                                    $clone = clone $getid3;
416.1374 +                                    $clone->info['avdataoffset'] = $riff_chunk[$chunk_name][$this_index]['offset'];
416.1375 +                                    $clone->info['avdataend']    = $clone->info['avdataoffset'] + $riff_chunk[$chunk_name][$this_index]['size'];
416.1376 +                                    
416.1377 +                                    // Analyze clone by fp
416.1378 +                                    $ac3 = new getid3_ac3($clone);
416.1379 +                                    $ac3->Analyze();
416.1380 +                                    
416.1381 +                                    // Import from clone and destroy
416.1382 +                                    $info['audio'] = $clone->info['audio'];
416.1383 +                                    $info['ac3']   = $clone->info['ac3'];
416.1384 +                                    $getid3->warning($clone->warnings());
416.1385 +                                    unset($clone);
416.1386 +                                }
416.1387 +                            } 
416.1388 +                        
416.1389 +                        
416.1390 +                            // Dolby Digital WAV
416.1391 +                            // AC-3 content, but not encoded in same format as normal AC-3 file
416.1392 +                            // For one thing, byte order is swapped
416.1393 +                        
416.1394 +                            elseif ((strlen($riff_data_chunk_contents_test) > 0) && (substr($riff_data_chunk_contents_test, 8, 2) == "\x77\x0B")) {
416.1395 +
416.1396 +                                if (!$getid3->include_module_optional('audio.ac3')) {
416.1397 +                                    $getid3->warning('AC3 skipped because ac3 module is missing.');
416.1398 +                                }
416.1399 +                                
416.1400 +                                else {
416.1401 +                                    
416.1402 +                                    // Extract ac3 data to string
416.1403 +                                    $ac3_data = '';                                
416.1404 +                                    for ($i = 0; $i < 28; $i += 2) {
416.1405 +                                        // swap byte order
416.1406 +                                        $ac3_data .= substr($riff_data_chunk_contents_test, 8 + $i + 1, 1);
416.1407 +                                        $ac3_data .= substr($riff_data_chunk_contents_test, 8 + $i + 0, 1);
416.1408 +                                    }
416.1409 +        
416.1410 +                                    // Clone getid3 - messing with offsets - better safe than sorry
416.1411 +                                    $clone = clone $getid3;
416.1412 +                                    $clone->info['avdataoffset'] = 0;
416.1413 +                                    $clone->info['avdataend']    = 20;
416.1414 +                                    
416.1415 +                                    // Analyse clone by string
416.1416 +                                    $ac3 = new getid3_ac3($clone);
416.1417 +                                    $ac3->AnalyzeString($ac3_data);
416.1418 +                                    
416.1419 +                                    // Import from clone and destroy
416.1420 +                                    $info['audio'] = $clone->info['audio'];
416.1421 +                                    $info['ac3']   = $clone->info['ac3'];
416.1422 +                                    $getid3->warning($clone->warnings());
416.1423 +                                    unset($clone);
416.1424 +                                }
416.1425 +                            }
416.1426 +
416.1427 +                                    
416.1428 +                            if ((strlen($riff_data_chunk_contents_test) > 0) && (substr($riff_data_chunk_contents_test, 0, 4) == 'wvpk')) {
416.1429 +
416.1430 +                                // This is WavPack data
416.1431 +                                $info['wavpack']['offset'] = $riff_chunk[$chunk_name][$this_index]['offset'];
416.1432 +                                $info['wavpack']['size']   = getid3_lib::LittleEndian2Int(substr($riff_data_chunk_contents_test, 4, 4));
416.1433 +                                $this->RIFFparseWavPackHeader(substr($riff_data_chunk_contents_test, 8, 28));
416.1434 +
416.1435 +                            } else {
416.1436 +
416.1437 +                                // This is some other kind of data (quite possibly just PCM)
416.1438 +                                // do nothing special, just skip it
416.1439 +
416.1440 +                            }
416.1441 +                            $this->fseek($riff_chunk[$chunk_name][$this_index]['offset'] + 8 + $chunk_size, SEEK_SET);
416.1442 +                            break;
416.1443 +
416.1444 +                        case 'bext':
416.1445 +                        case 'cart':
416.1446 +                        case 'fmt ':
416.1447 +                        case 'MEXT':
416.1448 +                        case 'DISP':
416.1449 +                            // always read data in
416.1450 +                            $riff_chunk[$chunk_name][$this_index]['data'] = $this->fread($chunk_size);
416.1451 +                            break;
416.1452 +
416.1453 +                        default:
416.1454 +                            if (!empty($list_chunk_parent) && (($riff_chunk[$chunk_name][$this_index]['offset'] + $riff_chunk[$chunk_name][$this_index]['size']) <= $list_chunk_max_offset)) {
416.1455 +                                $riff_chunk[$list_chunk_parent][$chunk_name][$this_index]['offset'] = $riff_chunk[$chunk_name][$this_index]['offset'];
416.1456 +                                $riff_chunk[$list_chunk_parent][$chunk_name][$this_index]['size']   = $riff_chunk[$chunk_name][$this_index]['size'];
416.1457 +                                unset($riff_chunk[$chunk_name][$this_index]['offset']);
416.1458 +                                unset($riff_chunk[$chunk_name][$this_index]['size']);
416.1459 +                                if (isset($riff_chunk[$chunk_name][$this_index]) && empty($riff_chunk[$chunk_name][$this_index])) {
416.1460 +                                    unset($riff_chunk[$chunk_name][$this_index]);
416.1461 +                                }
416.1462 +                                if (isset($riff_chunk[$chunk_name]) && empty($riff_chunk[$chunk_name])) {
416.1463 +                                    unset($riff_chunk[$chunk_name]);
416.1464 +                                }
416.1465 +                                $riff_chunk[$list_chunk_parent][$chunk_name][$this_index]['data'] = $this->fread($chunk_size);
416.1466 +                            } elseif ($chunk_size < 2048) {
416.1467 +                                // only read data in if smaller than 2kB
416.1468 +                                $riff_chunk[$chunk_name][$this_index]['data'] = $this->fread($chunk_size);
416.1469 +                            } else {
416.1470 +                                $this->fseek($chunk_size, SEEK_CUR);
416.1471 +                            }
416.1472 +                            break;
416.1473 +                    }
416.1474 +                    break;
416.1475 +
416.1476 +            }
416.1477 +
416.1478 +        }
416.1479 +
416.1480 +        return $riff_chunk;
416.1481 +    }
416.1482 +
416.1483 +
416.1484 +
416.1485 +    private function RIFFparseWavPackHeader($wavpack3_chunk_data) {
416.1486 +        
416.1487 +        // typedef struct {
416.1488 +        //     char ckID [4];
416.1489 +        //     long ckSize;
416.1490 +        //     short version;
416.1491 +        //     short bits;                // added for version 2.00
416.1492 +        //     short flags, shift;        // added for version 3.00
416.1493 +        //     long total_samples, crc, crc2;
416.1494 +        //     char extension [4], extra_bc, extras [3];
416.1495 +        // } WavpackHeader;
416.1496 +
416.1497 +        $this->getid3->info['wavpack'] = array ();
416.1498 +        $info_wavpack = &$this->getid3->info['wavpack'];
416.1499 +
416.1500 +        $info_wavpack['version'] = getid3_lib::LittleEndian2Int(substr($wavpack3_chunk_data,  0, 2));
416.1501 +        
416.1502 +        if ($info_wavpack['version'] >= 2) {
416.1503 +            $info_wavpack['bits'] = getid3_lib::LittleEndian2Int(substr($wavpack3_chunk_data,  2, 2));
416.1504 +        }
416.1505 +        
416.1506 +        if ($info_wavpack['version'] >= 3) {
416.1507 +            
416.1508 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_wavpack, $wavpack3_chunk_data,  4,
416.1509 +                array (
416.1510 +                    'flags_raw'     => 2,
416.1511 +                    'shift'         => 2,
416.1512 +                    'total_samples' => 4,
416.1513 +                    'crc1'          => 4,
416.1514 +                    'crc2'          => 4,
416.1515 +                    'extension'     => -4,
416.1516 +                    'extra_bc'      => 1
416.1517 +                )
416.1518 +            );
416.1519 +            
416.1520 +            for ($i = 0; $i < 3; $i++) {
416.1521 +                $info_wavpack['extras'][] = getid3_lib::LittleEndian2Int($wavpack3_chunk_data{25 + $i});
416.1522 +            }
416.1523 +
416.1524 +            $info_wavpack['flags'] = array ();
416.1525 +            $info_wavpack_flags = &$info_wavpack['flags'];
416.1526 +
416.1527 +            $info_wavpack_flags['mono']                 = (bool)($info_wavpack['flags_raw'] & 0x000001);
416.1528 +            $info_wavpack_flags['fast_mode']            = (bool)($info_wavpack['flags_raw'] & 0x000002);
416.1529 +            $info_wavpack_flags['raw_mode']             = (bool)($info_wavpack['flags_raw'] & 0x000004);
416.1530 +            $info_wavpack_flags['calc_noise']           = (bool)($info_wavpack['flags_raw'] & 0x000008);
416.1531 +            $info_wavpack_flags['high_quality']         = (bool)($info_wavpack['flags_raw'] & 0x000010);
416.1532 +            $info_wavpack_flags['3_byte_samples']       = (bool)($info_wavpack['flags_raw'] & 0x000020);
416.1533 +            $info_wavpack_flags['over_20_bits']         = (bool)($info_wavpack['flags_raw'] & 0x000040);
416.1534 +            $info_wavpack_flags['use_wvc']              = (bool)($info_wavpack['flags_raw'] & 0x000080);
416.1535 +            $info_wavpack_flags['noiseshaping']         = (bool)($info_wavpack['flags_raw'] & 0x000100);
416.1536 +            $info_wavpack_flags['very_fast_mode']       = (bool)($info_wavpack['flags_raw'] & 0x000200);
416.1537 +            $info_wavpack_flags['new_high_quality']     = (bool)($info_wavpack['flags_raw'] & 0x000400);
416.1538 +            $info_wavpack_flags['cancel_extreme']       = (bool)($info_wavpack['flags_raw'] & 0x000800);
416.1539 +            $info_wavpack_flags['cross_decorrelation']  = (bool)($info_wavpack['flags_raw'] & 0x001000);
416.1540 +            $info_wavpack_flags['new_decorrelation']    = (bool)($info_wavpack['flags_raw'] & 0x002000);
416.1541 +            $info_wavpack_flags['joint_stereo']         = (bool)($info_wavpack['flags_raw'] & 0x004000);
416.1542 +            $info_wavpack_flags['extra_decorrelation']  = (bool)($info_wavpack['flags_raw'] & 0x008000);
416.1543 +            $info_wavpack_flags['override_noiseshape']  = (bool)($info_wavpack['flags_raw'] & 0x010000);
416.1544 +            $info_wavpack_flags['override_jointstereo'] = (bool)($info_wavpack['flags_raw'] & 0x020000);
416.1545 +            $info_wavpack_flags['copy_source_filetime'] = (bool)($info_wavpack['flags_raw'] & 0x040000);
416.1546 +            $info_wavpack_flags['create_exe']           = (bool)($info_wavpack['flags_raw'] & 0x080000);
416.1547 +        }
416.1548 +
416.1549 +        return true;
416.1550 +    }
416.1551 +    
416.1552 +    
416.1553 +    
416.1554 +    public function AnalyzeString(&$string) {
416.1555 +        
416.1556 +		// Rewrite header_size in header
416.1557 +		$new_header_size = getid3_lib::LittleEndian2String(strlen($string), 4);
416.1558 +		for ($i = 0; $i < 4; $i++) {
416.1559 +			$string{$i + 4} = $new_header_size{$i};
416.1560 +		}
416.1561 +		
416.1562 +		return parent::AnalyzeString($string);
416.1563 +	}
416.1564 +
416.1565 +
416.1566 +        
416.1567 +    public static function RIFFparseWAVEFORMATex($wave_format_ex_data) {
416.1568 +        
416.1569 +        $wave_format_ex['raw'] = array ();
416.1570 +        $wave_format_ex_raw    = &$wave_format_ex['raw'];
416.1571 +        
416.1572 +        getid3_lib::ReadSequence('LittleEndian2Int', $wave_format_ex_raw, $wave_format_ex_data, 0,
416.1573 +            array (
416.1574 +                'wFormatTag'      => 2,
416.1575 +                'nChannels'       => 2,
416.1576 +                'nSamplesPerSec'  => 4,
416.1577 +                'nAvgBytesPerSec' => 4,
416.1578 +                'nBlockAlign'     => 2,
416.1579 +                'wBitsPerSample'  => 2
416.1580 +            )
416.1581 +        );
416.1582 +                
416.1583 +        if (strlen($wave_format_ex_data) > 16) {
416.1584 +            $wave_format_ex_raw['cbSize'] = getid3_lib::LittleEndian2Int(substr($wave_format_ex_data, 16, 2));
416.1585 +        }
416.1586 +
416.1587 +        $wave_format_ex['codec']           = getid3_riff::RIFFwFormatTagLookup($wave_format_ex_raw['wFormatTag']);
416.1588 +        $wave_format_ex['channels']        = $wave_format_ex_raw['nChannels'];
416.1589 +        $wave_format_ex['sample_rate']     = $wave_format_ex_raw['nSamplesPerSec'];
416.1590 +        $wave_format_ex['bitrate']         = $wave_format_ex_raw['nAvgBytesPerSec'] * 8;
416.1591 +        if (@$wave_format_ex_raw['wBitsPerSample']) {
416.1592 +            $wave_format_ex['bits_per_sample'] = $wave_format_ex_raw['wBitsPerSample'];
416.1593 +        }
416.1594 +
416.1595 +        return $wave_format_ex;
416.1596 +    }
416.1597 +
416.1598 +
416.1599 +
416.1600 +    public static function RIFFwFormatTagLookup($w_format_tag) {
416.1601 +
416.1602 +        static $lookup = array (
416.1603 +            0x0000 => 'Microsoft Unknown Wave Format',
416.1604 +            0x0001 => 'Pulse Code Modulation (PCM)',
416.1605 +            0x0002 => 'Microsoft ADPCM',
416.1606 +            0x0003 => 'IEEE Float',
416.1607 +            0x0004 => 'Compaq Computer VSELP',
416.1608 +            0x0005 => 'IBM CVSD',
416.1609 +            0x0006 => 'Microsoft A-Law',
416.1610 +            0x0007 => 'Microsoft mu-Law',
416.1611 +            0x0008 => 'Microsoft DTS',
416.1612 +            0x0010 => 'OKI ADPCM',
416.1613 +            0x0011 => 'Intel DVI/IMA ADPCM',
416.1614 +            0x0012 => 'Videologic MediaSpace ADPCM',
416.1615 +            0x0013 => 'Sierra Semiconductor ADPCM',
416.1616 +            0x0014 => 'Antex Electronics G.723 ADPCM',
416.1617 +            0x0015 => 'DSP Solutions DigiSTD',
416.1618 +            0x0016 => 'DSP Solutions DigiFIX',
416.1619 +            0x0017 => 'Dialogic OKI ADPCM',
416.1620 +            0x0018 => 'MediaVision ADPCM',
416.1621 +            0x0019 => 'Hewlett-Packard CU',
416.1622 +            0x0020 => 'Yamaha ADPCM',
416.1623 +            0x0021 => 'Speech Compression Sonarc',
416.1624 +            0x0022 => 'DSP Group TrueSpeech',
416.1625 +            0x0023 => 'Echo Speech EchoSC1',
416.1626 +            0x0024 => 'Audiofile AF36',
416.1627 +            0x0025 => 'Audio Processing Technology APTX',
416.1628 +            0x0026 => 'AudioFile AF10',
416.1629 +            0x0027 => 'Prosody 1612',
416.1630 +            0x0028 => 'LRC',
416.1631 +            0x0030 => 'Dolby AC2',
416.1632 +            0x0031 => 'Microsoft GSM 6.10',
416.1633 +            0x0032 => 'MSNAudio',
416.1634 +            0x0033 => 'Antex Electronics ADPCME',
416.1635 +            0x0034 => 'Control Resources VQLPC',
416.1636 +            0x0035 => 'DSP Solutions DigiREAL',
416.1637 +            0x0036 => 'DSP Solutions DigiADPCM',
416.1638 +            0x0037 => 'Control Resources CR10',
416.1639 +            0x0038 => 'Natural MicroSystems VBXADPCM',
416.1640 +            0x0039 => 'Crystal Semiconductor IMA ADPCM',
416.1641 +            0x003A => 'EchoSC3',
416.1642 +            0x003B => 'Rockwell ADPCM',
416.1643 +            0x003C => 'Rockwell Digit LK',
416.1644 +            0x003D => 'Xebec',
416.1645 +            0x0040 => 'Antex Electronics G.721 ADPCM',
416.1646 +            0x0041 => 'G.728 CELP',
416.1647 +            0x0042 => 'MSG723',
416.1648 +            0x0050 => 'MPEG Layer-2 or Layer-1',
416.1649 +            0x0052 => 'RT24',
416.1650 +            0x0053 => 'PAC',
416.1651 +            0x0055 => 'MPEG Layer-3',
416.1652 +            0x0059 => 'Lucent G.723',
416.1653 +            0x0060 => 'Cirrus',
416.1654 +            0x0061 => 'ESPCM',
416.1655 +            0x0062 => 'Voxware',
416.1656 +            0x0063 => 'Canopus Atrac',
416.1657 +            0x0064 => 'G.726 ADPCM',
416.1658 +            0x0065 => 'G.722 ADPCM',
416.1659 +            0x0066 => 'DSAT',
416.1660 +            0x0067 => 'DSAT Display',
416.1661 +            0x0069 => 'Voxware Byte Aligned',
416.1662 +            0x0070 => 'Voxware AC8',
416.1663 +            0x0071 => 'Voxware AC10',
416.1664 +            0x0072 => 'Voxware AC16',
416.1665 +            0x0073 => 'Voxware AC20',
416.1666 +            0x0074 => 'Voxware MetaVoice',
416.1667 +            0x0075 => 'Voxware MetaSound',
416.1668 +            0x0076 => 'Voxware RT29HW',
416.1669 +            0x0077 => 'Voxware VR12',
416.1670 +            0x0078 => 'Voxware VR18',
416.1671 +            0x0079 => 'Voxware TQ40',
416.1672 +            0x0080 => 'Softsound',
416.1673 +            0x0081 => 'Voxware TQ60',
416.1674 +            0x0082 => 'MSRT24',
416.1675 +            0x0083 => 'G.729A',
416.1676 +            0x0084 => 'MVI MV12',
416.1677 +            0x0085 => 'DF G.726',
416.1678 +            0x0086 => 'DF GSM610',
416.1679 +            0x0088 => 'ISIAudio',
416.1680 +            0x0089 => 'Onlive',
416.1681 +            0x0091 => 'SBC24',
416.1682 +            0x0092 => 'Dolby AC3 SPDIF',
416.1683 +            0x0093 => 'MediaSonic G.723',
416.1684 +            0x0094 => 'Aculab PLC    Prosody 8kbps',
416.1685 +            0x0097 => 'ZyXEL ADPCM',
416.1686 +            0x0098 => 'Philips LPCBB',
416.1687 +            0x0099 => 'Packed',
416.1688 +            0x00FF => 'AAC',
416.1689 +            0x0100 => 'Rhetorex ADPCM',
416.1690 +            0x0101 => 'IBM mu-law',
416.1691 +            0x0102 => 'IBM A-law',
416.1692 +            0x0103 => 'IBM AVC Adaptive Differential Pulse Code Modulation (ADPCM)',
416.1693 +            0x0111 => 'Vivo G.723',
416.1694 +            0x0112 => 'Vivo Siren',
416.1695 +            0x0123 => 'Digital G.723',
416.1696 +            0x0125 => 'Sanyo LD ADPCM',
416.1697 +            0x0130 => 'Sipro Lab Telecom ACELP NET',
416.1698 +            0x0131 => 'Sipro Lab Telecom ACELP 4800',
416.1699 +            0x0132 => 'Sipro Lab Telecom ACELP 8V3',
416.1700 +            0x0133 => 'Sipro Lab Telecom G.729',
416.1701 +            0x0134 => 'Sipro Lab Telecom G.729A',
416.1702 +            0x0135 => 'Sipro Lab Telecom Kelvin',
416.1703 +            0x0140 => 'Windows Media Video V8',
416.1704 +            0x0150 => 'Qualcomm PureVoice',
416.1705 +            0x0151 => 'Qualcomm HalfRate',
416.1706 +            0x0155 => 'Ring Zero Systems TUB GSM',
416.1707 +            0x0160 => 'Microsoft Audio 1',
416.1708 +            0x0161 => 'Windows Media Audio V7 / V8 / V9',
416.1709 +            0x0162 => 'Windows Media Audio Professional V9',
416.1710 +            0x0163 => 'Windows Media Audio Lossless V9',
416.1711 +            0x0200 => 'Creative Labs ADPCM',
416.1712 +            0x0202 => 'Creative Labs Fastspeech8',
416.1713 +            0x0203 => 'Creative Labs Fastspeech10',
416.1714 +            0x0210 => 'UHER Informatic GmbH ADPCM',
416.1715 +            0x0220 => 'Quarterdeck',
416.1716 +            0x0230 => 'I-link Worldwide VC',
416.1717 +            0x0240 => 'Aureal RAW Sport',
416.1718 +            0x0250 => 'Interactive Products HSX',
416.1719 +            0x0251 => 'Interactive Products RPELP',
416.1720 +            0x0260 => 'Consistent Software CS2',
416.1721 +            0x0270 => 'Sony SCX',
416.1722 +            0x0300 => 'Fujitsu FM Towns Snd',
416.1723 +            0x0400 => 'BTV Digital',
416.1724 +            0x0401 => 'Intel Music Coder',
416.1725 +            0x0450 => 'QDesign Music',
416.1726 +            0x0680 => 'VME VMPCM',
416.1727 +            0x0681 => 'AT&T Labs TPC',
416.1728 +            0x08AE => 'ClearJump LiteWave',
416.1729 +            0x1000 => 'Olivetti GSM',
416.1730 +            0x1001 => 'Olivetti ADPCM',
416.1731 +            0x1002 => 'Olivetti CELP',
416.1732 +            0x1003 => 'Olivetti SBC',
416.1733 +            0x1004 => 'Olivetti OPR',
416.1734 +            0x1100 => 'Lernout & Hauspie Codec (0x1100)',
416.1735 +            0x1101 => 'Lernout & Hauspie CELP Codec (0x1101)',
416.1736 +            0x1102 => 'Lernout & Hauspie SBC Codec (0x1102)',
416.1737 +            0x1103 => 'Lernout & Hauspie SBC Codec (0x1103)',
416.1738 +            0x1104 => 'Lernout & Hauspie SBC Codec (0x1104)',
416.1739 +            0x1400 => 'Norris',
416.1740 +            0x1401 => 'AT&T ISIAudio',
416.1741 +            0x1500 => 'Soundspace Music Compression',
416.1742 +            0x181C => 'VoxWare RT24 Speech',
416.1743 +            0x1FC4 => 'NCT Soft ALF2CD (www.nctsoft.com)',
416.1744 +            0x2000 => 'Dolby AC3',
416.1745 +            0x2001 => 'Dolby DTS',
416.1746 +            0x2002 => 'WAVE_FORMAT_14_4',
416.1747 +            0x2003 => 'WAVE_FORMAT_28_8',
416.1748 +            0x2004 => 'WAVE_FORMAT_COOK',
416.1749 +            0x2005 => 'WAVE_FORMAT_DNET',
416.1750 +            0x674F => 'Ogg Vorbis 1',
416.1751 +            0x6750 => 'Ogg Vorbis 2',
416.1752 +            0x6751 => 'Ogg Vorbis 3',
416.1753 +            0x676F => 'Ogg Vorbis 1+',
416.1754 +            0x6770 => 'Ogg Vorbis 2+',
416.1755 +            0x6771 => 'Ogg Vorbis 3+',
416.1756 +            0x7A21 => 'GSM-AMR (CBR, no SID)',
416.1757 +            0x7A22 => 'GSM-AMR (VBR, including SID)',
416.1758 +            0xFFFE => 'WAVE_FORMAT_EXTENSIBLE',
416.1759 +            0xFFFF => 'WAVE_FORMAT_DEVELOPMENT'
416.1760 +        );
416.1761 +        
416.1762 +        return @$lookup[$w_format_tag];
416.1763 +    }
416.1764 +
416.1765 +
416.1766 +
416.1767 +    public static function RIFFfourccLookup($four_cc) {
416.1768 +
416.1769 +        static $lookup = array (
416.1770 +            'swot' => 'http://developer.apple.com/qa/snd/snd07.html',
416.1771 +            '____' => 'No Codec (____)',
416.1772 +            '_BIT' => 'BI_BITFIELDS (Raw RGB)',
416.1773 +            '_JPG' => 'JPEG compressed',
416.1774 +            '_PNG' => 'PNG compressed W3C/ISO/IEC (RFC-2083)',
416.1775 +            '_RAW' => 'Full Frames (Uncompressed)',
416.1776 +            '_RGB' => 'Raw RGB Bitmap',
416.1777 +            '_RL4' => 'RLE 4bpp RGB',
416.1778 +            '_RL8' => 'RLE 8bpp RGB',
416.1779 +            '3IV1' => '3ivx MPEG-4 v1',
416.1780 +            '3IV2' => '3ivx MPEG-4 v2',
416.1781 +            '3IVX' => '3ivx MPEG-4',
416.1782 +            'AASC' => 'Autodesk Animator',
416.1783 +            'ABYR' => 'Kensington ?ABYR?',
416.1784 +            'AEMI' => 'Array Microsystems VideoONE MPEG1-I Capture',
416.1785 +            'AFLC' => 'Autodesk Animator FLC',
416.1786 +            'AFLI' => 'Autodesk Animator FLI',
416.1787 +            'AMPG' => 'Array Microsystems VideoONE MPEG',
416.1788 +            'ANIM' => 'Intel RDX (ANIM)',
416.1789 +            'AP41' => 'AngelPotion Definitive',
416.1790 +            'ASV1' => 'Asus Video v1',
416.1791 +            'ASV2' => 'Asus Video v2',
416.1792 +            'ASVX' => 'Asus Video 2.0 (audio)',
416.1793 +            'AUR2' => 'AuraVision Aura 2 Codec - YUV 4:2:2',
416.1794 +            'AURA' => 'AuraVision Aura 1 Codec - YUV 4:1:1',
416.1795 +            'AVDJ' => 'Independent JPEG Group\'s codec (AVDJ)',
416.1796 +            'AVRN' => 'Independent JPEG Group\'s codec (AVRN)',
416.1797 +            'AYUV' => '4:4:4 YUV (AYUV)',
416.1798 +            'AZPR' => 'Quicktime Apple Video (AZPR)',
416.1799 +            'BGR ' => 'Raw RGB32',
416.1800 +            'BLZ0' => 'FFmpeg MPEG-4',
416.1801 +            'BTVC' => 'Conexant Composite Video',
416.1802 +            'BINK' => 'RAD Game Tools Bink Video',
416.1803 +            'BT20' => 'Conexant Prosumer Video',
416.1804 +            'BTCV' => 'Conexant Composite Video Codec',
416.1805 +            'BW10' => 'Data Translation Broadway MPEG Capture',
416.1806 +            'CC12' => 'Intel YUV12',
416.1807 +            'CDVC' => 'Canopus DV',
416.1808 +            'CFCC' => 'Digital Processing Systems DPS Perception',
416.1809 +            'CGDI' => 'Microsoft Office 97 Camcorder Video',
416.1810 +            'CHAM' => 'Winnov Caviara Champagne',
416.1811 +            'CJPG' => 'Creative WebCam JPEG',
416.1812 +            'CLJR' => 'Cirrus Logic YUV 4:1:1',
416.1813 +            'CMYK' => 'Common Data Format in Printing (Colorgraph)',
416.1814 +            'CPLA' => 'Weitek 4:2:0 YUV Planar',
416.1815 +            'CRAM' => 'Microsoft Video 1 (CRAM)',
416.1816 +            'cvid' => 'Radius Cinepak',
416.1817 +            'CVID' => 'Radius Cinepak',
416.1818 +            'CWLT' => 'Microsoft Color WLT DIB',
416.1819 +            'CYUV' => 'Creative Labs YUV',
416.1820 +            'CYUY' => 'ATI YUV',
416.1821 +            'D261' => 'H.261',
416.1822 +            'D263' => 'H.263',
416.1823 +            'DIB ' => 'Device Independent Bitmap',
416.1824 +            'DIV1' => 'FFmpeg OpenDivX',
416.1825 +            'DIV2' => 'Microsoft MPEG-4 v1/v2',
416.1826 +            'DIV3' => 'DivX ;-) MPEG-4 v3.x Low-Motion',
416.1827 +            'DIV4' => 'DivX ;-) MPEG-4 v3.x Fast-Motion',
416.1828 +            'DIV5' => 'DivX MPEG-4 v5.x',
416.1829 +            'DIV6' => 'DivX ;-) (MS MPEG-4 v3.x)',
416.1830 +            'DIVX' => 'DivX MPEG-4 v4 (OpenDivX / Project Mayo)',
416.1831 +            'divx' => 'DivX MPEG-4',
416.1832 +            'DMB1' => 'Matrox Rainbow Runner hardware MJPEG',
416.1833 +            'DMB2' => 'Paradigm MJPEG',
416.1834 +            'DSVD' => '?DSVD?',
416.1835 +            'DUCK' => 'Duck TrueMotion 1.0',
416.1836 +            'DPS0' => 'DPS/Leitch Reality Motion JPEG',
416.1837 +            'DPSC' => 'DPS/Leitch PAR Motion JPEG',
416.1838 +            'DV25' => 'Matrox DVCPRO codec',
416.1839 +            'DV50' => 'Matrox DVCPRO50 codec',
416.1840 +            'DVC ' => 'IEC 61834 and SMPTE 314M (DVC/DV Video)',
416.1841 +            'DVCP' => 'IEC 61834 and SMPTE 314M (DVC/DV Video)',
416.1842 +            'DVHD' => 'IEC Standard DV 1125 lines @ 30fps / 1250 lines @ 25fps',
416.1843 +            'DVMA' => 'Darim Vision DVMPEG (dummy for MPEG compressor) (www.darvision.com)',
416.1844 +            'DVSL' => 'IEC Standard DV compressed in SD (SDL)',
416.1845 +            'DVAN' => '?DVAN?',
416.1846 +            'DVE2' => 'InSoft DVE-2 Videoconferencing',
416.1847 +            'dvsd' => 'IEC 61834 and SMPTE 314M DVC/DV Video',
416.1848 +            'DVSD' => 'IEC 61834 and SMPTE 314M DVC/DV Video',
416.1849 +            'DVX1' => 'Lucent DVX1000SP Video Decoder',
416.1850 +            'DVX2' => 'Lucent DVX2000S Video Decoder',
416.1851 +            'DVX3' => 'Lucent DVX3000S Video Decoder',
416.1852 +            'DX50' => 'DivX v5',
416.1853 +            'DXT1' => 'Microsoft DirectX Compressed Texture (DXT1)',
416.1854 +            'DXT2' => 'Microsoft DirectX Compressed Texture (DXT2)',
416.1855 +            'DXT3' => 'Microsoft DirectX Compressed Texture (DXT3)',
416.1856 +            'DXT4' => 'Microsoft DirectX Compressed Texture (DXT4)',
416.1857 +            'DXT5' => 'Microsoft DirectX Compressed Texture (DXT5)',
416.1858 +            'DXTC' => 'Microsoft DirectX Compressed Texture (DXTC)',
416.1859 +            'DXTn' => 'Microsoft DirectX Compressed Texture (DXTn)',
416.1860 +            'EM2V' => 'Etymonix MPEG-2 I-frame (www.etymonix.com)',
416.1861 +            'EKQ0' => 'Elsa ?EKQ0?',
416.1862 +            'ELK0' => 'Elsa ?ELK0?',
416.1863 +            'ESCP' => 'Eidos Escape',
416.1864 +            'ETV1' => 'eTreppid Video ETV1',
416.1865 +            'ETV2' => 'eTreppid Video ETV2',
416.1866 +            'ETVC' => 'eTreppid Video ETVC',
416.1867 +            'FLIC' => 'Autodesk FLI/FLC Animation',
416.1868 +            'FRWT' => 'Darim Vision Forward Motion JPEG (www.darvision.com)',
416.1869 +            'FRWU' => 'Darim Vision Forward Uncompressed (www.darvision.com)',
416.1870 +            'FLJP' => 'D-Vision Field Encoded Motion JPEG',
416.1871 +            'FRWA' => 'SoftLab-Nsk Forward Motion JPEG w/ alpha channel',
416.1872 +            'FRWD' => 'SoftLab-Nsk Forward Motion JPEG',
416.1873 +            'FVF1' => 'Iterated Systems Fractal Video Frame',
416.1874 +            'GLZW' => 'Motion LZW (gabest@freemail.hu)',
416.1875 +            'GPEG' => 'Motion JPEG (gabest@freemail.hu)',
416.1876 +            'GWLT' => 'Microsoft Greyscale WLT DIB',
416.1877 +            'H260' => 'Intel ITU H.260 Videoconferencing',
416.1878 +            'H261' => 'Intel ITU H.261 Videoconferencing',
416.1879 +            'H262' => 'Intel ITU H.262 Videoconferencing',
416.1880 +            'H263' => 'Intel ITU H.263 Videoconferencing',
416.1881 +            'H264' => 'Intel ITU H.264 Videoconferencing',
416.1882 +            'H265' => 'Intel ITU H.265 Videoconferencing',
416.1883 +            'H266' => 'Intel ITU H.266 Videoconferencing',
416.1884 +            'H267' => 'Intel ITU H.267 Videoconferencing',
416.1885 +            'H268' => 'Intel ITU H.268 Videoconferencing',
416.1886 +            'H269' => 'Intel ITU H.269 Videoconferencing',
416.1887 +            'HFYU' => 'Huffman Lossless Codec',
416.1888 +            'HMCR' => 'Rendition Motion Compensation Format (HMCR)',
416.1889 +            'HMRR' => 'Rendition Motion Compensation Format (HMRR)',
416.1890 +            'I263' => 'FFmpeg I263 decoder',
416.1891 +            'IF09' => 'Indeo YVU9 ("YVU9 with additional delta-frame info after the U plane")',
416.1892 +            'IUYV' => 'Interlaced version of UYVY (www.leadtools.com)',
416.1893 +            'IY41' => 'Interlaced version of Y41P (www.leadtools.com)',
416.1894 +            'IYU1' => '12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard',
416.1895 +            'IYU2' => '24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard',
416.1896 +            'IYUV' => 'Planar YUV format (8-bpp Y plane, followed by 8-bpp 2×2 U and V planes)',
416.1897 +            'i263' => 'Intel ITU H.263 Videoconferencing (i263)',
416.1898 +            'I420' => 'Intel Indeo 4',
416.1899 +            'IAN ' => 'Intel Indeo 4 (RDX)',
416.1900 +            'ICLB' => 'InSoft CellB Videoconferencing',
416.1901 +            'IGOR' => 'Power DVD',
416.1902 +            'IJPG' => 'Intergraph JPEG',
416.1903 +            'ILVC' => 'Intel Layered Video',
416.1904 +            'ILVR' => 'ITU-T H.263+',
416.1905 +            'IPDV' => 'I-O Data Device Giga AVI DV Codec',
416.1906 +            'IR21' => 'Intel Indeo 2.1',
416.1907 +            'IRAW' => 'Intel YUV Uncompressed',
416.1908 +            'IV30' => 'Intel Indeo 3.0',
416.1909 +            'IV31' => 'Intel Indeo 3.1',
416.1910 +            'IV32' => 'Ligos Indeo 3.2',
416.1911 +            'IV33' => 'Ligos Indeo 3.3',
416.1912 +            'IV34' => 'Ligos Indeo 3.4',
416.1913 +            'IV35' => 'Ligos Indeo 3.5',
416.1914 +            'IV36' => 'Ligos Indeo 3.6',
416.1915 +            'IV37' => 'Ligos Indeo 3.7',
416.1916 +            'IV38' => 'Ligos Indeo 3.8',
416.1917 +            'IV39' => 'Ligos Indeo 3.9',
416.1918 +            'IV40' => 'Ligos Indeo Interactive 4.0',
416.1919 +            'IV41' => 'Ligos Indeo Interactive 4.1',
416.1920 +            'IV42' => 'Ligos Indeo Interactive 4.2',
416.1921 +            'IV43' => 'Ligos Indeo Interactive 4.3',
416.1922 +            'IV44' => 'Ligos Indeo Interactive 4.4',
416.1923 +            'IV45' => 'Ligos Indeo Interactive 4.5',
416.1924 +            'IV46' => 'Ligos Indeo Interactive 4.6',
416.1925 +            'IV47' => 'Ligos Indeo Interactive 4.7',
416.1926 +            'IV48' => 'Ligos Indeo Interactive 4.8',
416.1927 +            'IV49' => 'Ligos Indeo Interactive 4.9',
416.1928 +            'IV50' => 'Ligos Indeo Interactive 5.0',
416.1929 +            'JBYR' => 'Kensington ?JBYR?',
416.1930 +            'JPEG' => 'Still Image JPEG DIB',
416.1931 +            'JPGL' => 'Pegasus Lossless Motion JPEG',
416.1932 +            'KMVC' => 'Team17 Software Karl Morton\'s Video Codec',
416.1933 +            'LSVM' => 'Vianet Lighting Strike Vmail (Streaming) (www.vianet.com)',
416.1934 +            'LEAD' => 'LEAD Video Codec',
416.1935 +            'Ljpg' => 'LEAD MJPEG Codec',
416.1936 +            'MDVD' => 'Alex MicroDVD Video (hacked MS MPEG-4) (www.tiasoft.de)',
416.1937 +            'MJPA' => 'Morgan Motion JPEG (MJPA) (www.morgan-multimedia.com)',
416.1938 +            'MJPB' => 'Morgan Motion JPEG (MJPB) (www.morgan-multimedia.com)',
416.1939 +            'MMES' => 'Matrox MPEG-2 I-frame',
416.1940 +            'MP2v' => 'Microsoft S-Mpeg 4 version 1 (MP2v)',
416.1941 +            'MP42' => 'Microsoft S-Mpeg 4 version 2 (MP42)',
416.1942 +            'MP43' => 'Microsoft S-Mpeg 4 version 3 (MP43)',
416.1943 +            'MP4S' => 'Microsoft S-Mpeg 4 version 3 (MP4S)',
416.1944 +            'MP4V' => 'FFmpeg MPEG-4',
416.1945 +            'MPG1' => 'FFmpeg MPEG 1/2',
416.1946 +            'MPG2' => 'FFmpeg MPEG 1/2',
416.1947 +            'MPG3' => 'FFmpeg DivX ;-) (MS MPEG-4 v3)',
416.1948 +            'MPG4' => 'Microsoft MPEG-4',
416.1949 +            'MPGI' => 'Sigma Designs MPEG',
416.1950 +            'MPNG' => 'PNG images decoder',
416.1951 +            'MSS1' => 'Microsoft Windows Screen Video',
416.1952 +            'MSZH' => 'LCL (Lossless Codec Library) (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)',
416.1953 +            'M261' => 'Microsoft H.261',
416.1954 +            'M263' => 'Microsoft H.263',
416.1955 +            'M4S2' => 'Microsoft Fully Compliant MPEG-4 v2 simple profile (M4S2)',
416.1956 +            'm4s2' => 'Microsoft Fully Compliant MPEG-4 v2 simple profile (m4s2)',
416.1957 +            'MC12' => 'ATI Motion Compensation Format (MC12)',
416.1958 +            'MCAM' => 'ATI Motion Compensation Format (MCAM)',
416.1959 +            'MJ2C' => 'Morgan Multimedia Motion JPEG2000',
416.1960 +            'mJPG' => 'IBM Motion JPEG w/ Huffman Tables',
416.1961 +            'MJPG' => 'Microsoft Motion JPEG DIB',
416.1962 +            'MP42' => 'Microsoft MPEG-4 (low-motion)',
416.1963 +            'MP43' => 'Microsoft MPEG-4 (fast-motion)',
416.1964 +            'MP4S' => 'Microsoft MPEG-4 (MP4S)',
416.1965 +            'mp4s' => 'Microsoft MPEG-4 (mp4s)',
416.1966 +            'MPEG' => 'Chromatic Research MPEG-1 Video I-Frame',
416.1967 +            'MPG4' => 'Microsoft MPEG-4 Video High Speed Compressor',
416.1968 +            'MPGI' => 'Sigma Designs MPEG',
416.1969 +            'MRCA' => 'FAST Multimedia Martin Regen Codec',
416.1970 +            'MRLE' => 'Microsoft Run Length Encoding',
416.1971 +            'MSVC' => 'Microsoft Video 1',
416.1972 +            'MTX1' => 'Matrox ?MTX1?',
416.1973 +            'MTX2' => 'Matrox ?MTX2?',
416.1974 +            'MTX3' => 'Matrox ?MTX3?',
416.1975 +            'MTX4' => 'Matrox ?MTX4?',
416.1976 +            'MTX5' => 'Matrox ?MTX5?',
416.1977 +            'MTX6' => 'Matrox ?MTX6?',
416.1978 +            'MTX7' => 'Matrox ?MTX7?',
416.1979 +            'MTX8' => 'Matrox ?MTX8?',
416.1980 +            'MTX9' => 'Matrox ?MTX9?',
416.1981 +            'MV12' => 'Motion Pixels Codec (old)',
416.1982 +            'MWV1' => 'Aware Motion Wavelets',
416.1983 +            'nAVI' => 'SMR Codec (hack of Microsoft MPEG-4) (IRC #shadowrealm)',
416.1984 +            'NT00' => 'NewTek LightWave HDTV YUV w/ Alpha (www.newtek.com)',
416.1985 +            'NUV1' => 'NuppelVideo',
416.1986 +            'NTN1' => 'Nogatech Video Compression 1',
416.1987 +            'NVS0' => 'nVidia GeForce Texture (NVS0)',
416.1988 +            'NVS1' => 'nVidia GeForce Texture (NVS1)',
416.1989 +            'NVS2' => 'nVidia GeForce Texture (NVS2)',
416.1990 +            'NVS3' => 'nVidia GeForce Texture (NVS3)',
416.1991 +            'NVS4' => 'nVidia GeForce Texture (NVS4)',
416.1992 +            'NVS5' => 'nVidia GeForce Texture (NVS5)',
416.1993 +            'NVT0' => 'nVidia GeForce Texture (NVT0)',
416.1994 +            'NVT1' => 'nVidia GeForce Texture (NVT1)',
416.1995 +            'NVT2' => 'nVidia GeForce Texture (NVT2)',
416.1996 +            'NVT3' => 'nVidia GeForce Texture (NVT3)',
416.1997 +            'NVT4' => 'nVidia GeForce Texture (NVT4)',
416.1998 +            'NVT5' => 'nVidia GeForce Texture (NVT5)',
416.1999 +            'PIXL' => 'MiroXL, Pinnacle PCTV',
416.2000 +            'PDVC' => 'I-O Data Device Digital Video Capture DV codec',
416.2001 +            'PGVV' => 'Radius Video Vision',
416.2002 +            'PHMO' => 'IBM Photomotion',
416.2003 +            'PIM1' => 'MPEG Realtime (Pinnacle Cards)',
416.2004 +            'PIM2' => 'Pegasus Imaging ?PIM2?',
416.2005 +            'PIMJ' => 'Pegasus Imaging Lossless JPEG',
416.2006 +            'PVEZ' => 'Horizons Technology PowerEZ',
416.2007 +            'PVMM' => 'PacketVideo Corporation MPEG-4',
416.2008 +            'PVW2' => 'Pegasus Imaging Wavelet Compression',
416.2009 +            'Q1.0' => 'Q-Team\'s QPEG 1.0 (www.q-team.de)',
416.2010 +            'Q1.1' => 'Q-Team\'s QPEG 1.1 (www.q-team.de)',
416.2011 +            'QPEG' => 'Q-Team QPEG 1.0',
416.2012 +            'qpeq' => 'Q-Team QPEG 1.1',
416.2013 +            'RGB ' => 'Raw BGR32',
416.2014 +            'RGBA' => 'Raw RGB w/ Alpha',
416.2015 +            'RMP4' => 'REALmagic MPEG-4 (unauthorized XVID copy) (www.sigmadesigns.com)',
416.2016 +            'ROQV' => 'Id RoQ File Video Decoder',
416.2017 +            'RPZA' => 'Quicktime Apple Video (RPZA)',
416.2018 +            'RUD0' => 'Rududu video codec (http://rududu.ifrance.com/rududu/)',
416.2019 +            'RV10' => 'RealVideo 1.0 (aka RealVideo 5.0)',
416.2020 +            'RV13' => 'RealVideo 1.0 (RV13)',
416.2021 +            'RV20' => 'RealVideo G2',
416.2022 +            'RV30' => 'RealVideo 8',
416.2023 +            'RV40' => 'RealVideo 9',
416.2024 +            'RGBT' => 'Raw RGB w/ Transparency',
416.2025 +            'RLE ' => 'Microsoft Run Length Encoder',
416.2026 +            'RLE4' => 'Run Length Encoded (4bpp, 16-color)',
416.2027 +            'RLE8' => 'Run Length Encoded (8bpp, 256-color)',
416.2028 +            'RT21' => 'Intel Indeo RealTime Video 2.1',
416.2029 +            'rv20' => 'RealVideo G2',
416.2030 +            'rv30' => 'RealVideo 8',
416.2031 +            'RVX ' => 'Intel RDX (RVX )',
416.2032 +            'SMC ' => 'Apple Graphics (SMC )',
416.2033 +            'SP54' => 'Logitech Sunplus Sp54 Codec for Mustek GSmart Mini 2',
416.2034 +            'SPIG' => 'Radius Spigot',
416.2035 +            'SVQ3' => 'Sorenson Video 3 (Apple Quicktime 5)',
416.2036 +            's422' => 'Tekram VideoCap C210 YUV 4:2:2',
416.2037 +            'SDCC' => 'Sun Communication Digital Camera Codec',
416.2038 +            'SFMC' => 'CrystalNet Surface Fitting Method',
416.2039 +            'SMSC' => 'Radius SMSC',
416.2040 +            'SMSD' => 'Radius SMSD',
416.2041 +            'smsv' => 'WorldConnect Wavelet Video',
416.2042 +            'SPIG' => 'Radius Spigot',
416.2043 +            'SPLC' => 'Splash Studios ACM Audio Codec (www.splashstudios.net)',
416.2044 +            'SQZ2' => 'Microsoft VXTreme Video Codec V2',
416.2045 +            'STVA' => 'ST Microelectronics CMOS Imager Data (Bayer)',
416.2046 +            'STVB' => 'ST Microelectronics CMOS Imager Data (Nudged Bayer)',
416.2047 +            'STVC' => 'ST Microelectronics CMOS Imager Data (Bunched)',
416.2048 +            'STVX' => 'ST Microelectronics CMOS Imager Data (Extended CODEC Data Format)',
416.2049 +            'STVY' => 'ST Microelectronics CMOS Imager Data (Extended CODEC Data Format with Correction Data)',
416.2050 +            'SV10' => 'Sorenson Video R1',
416.2051 +            'SVQ1' => 'Sorenson Video',
416.2052 +            'T420' => 'Toshiba YUV 4:2:0',
416.2053 +            'TM2A' => 'Duck TrueMotion Archiver 2.0 (www.duck.com)',
416.2054 +            'TVJP' => 'Pinnacle/Truevision Targa 2000 board (TVJP)',
416.2055 +            'TVMJ' => 'Pinnacle/Truevision Targa 2000 board (TVMJ)',
416.2056 +            'TY0N' => 'Tecomac Low-Bit Rate Codec (www.tecomac.com)',
416.2057 +            'TY2C' => 'Trident Decompression Driver',
416.2058 +            'TLMS' => 'TeraLogic Motion Intraframe Codec (TLMS)',
416.2059 +            'TLST' => 'TeraLogic Motion Intraframe Codec (TLST)',
416.2060 +            'TM20' => 'Duck TrueMotion 2.0',
416.2061 +            'TM2X' => 'Duck TrueMotion 2X',
416.2062 +            'TMIC' => 'TeraLogic Motion Intraframe Codec (TMIC)',
416.2063 +            'TMOT' => 'Horizons Technology TrueMotion S',
416.2064 +            'tmot' => 'Horizons TrueMotion Video Compression',
416.2065 +            'TR20' => 'Duck TrueMotion RealTime 2.0',
416.2066 +            'TSCC' => 'TechSmith Screen Capture Codec',
416.2067 +            'TV10' => 'Tecomac Low-Bit Rate Codec',
416.2068 +            'TY2N' => 'Trident ?TY2N?',
416.2069 +            'U263' => 'UB Video H.263/H.263+/H.263++ Decoder',
416.2070 +            'UMP4' => 'UB Video MPEG 4 (www.ubvideo.com)',
416.2071 +            'UYNV' => 'Nvidia UYVY packed 4:2:2',
416.2072 +            'UYVP' => 'Evans & Sutherland YCbCr 4:2:2 extended precision',
416.2073 +            'UCOD' => 'eMajix.com ClearVideo',
416.2074 +            'ULTI' => 'IBM Ultimotion',
416.2075 +            'UYVY' => 'UYVY packed 4:2:2',
416.2076 +            'V261' => 'Lucent VX2000S',
416.2077 +            'VIFP' => 'VFAPI Reader Codec (www.yks.ne.jp/~hori/)',
416.2078 +            'VIV1' => 'FFmpeg H263+ decoder',
416.2079 +            'VIV2' => 'Vivo H.263',
416.2080 +            'VQC2' => 'Vector-quantised codec 2 (research) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf)',
416.2081 +            'VTLP' => 'Alaris VideoGramPiX',
416.2082 +            'VYU9' => 'ATI YUV (VYU9)',
416.2083 +            'VYUY' => 'ATI YUV (VYUY)',
416.2084 +            'V261' => 'Lucent VX2000S',
416.2085 +            'V422' => 'Vitec Multimedia 24-bit YUV 4:2:2 Format',
416.2086 +            'V655' => 'Vitec Multimedia 16-bit YUV 4:2:2 Format',
416.2087 +            'VCR1' => 'ATI Video Codec 1',
416.2088 +            'VCR2' => 'ATI Video Codec 2',
416.2089 +            'VCR3' => 'ATI VCR 3.0',
416.2090 +            'VCR4' => 'ATI VCR 4.0',
416.2091 +            'VCR5' => 'ATI VCR 5.0',
416.2092 +            'VCR6' => 'ATI VCR 6.0',
416.2093 +            'VCR7' => 'ATI VCR 7.0',
416.2094 +            'VCR8' => 'ATI VCR 8.0',
416.2095 +            'VCR9' => 'ATI VCR 9.0',
416.2096 +            'VDCT' => 'Vitec Multimedia Video Maker Pro DIB',
416.2097 +            'VDOM' => 'VDOnet VDOWave',
416.2098 +            'VDOW' => 'VDOnet VDOLive (H.263)',
416.2099 +            'VDTZ' => 'Darim Vison VideoTizer YUV',
416.2100 +            'VGPX' => 'Alaris VideoGramPiX',
416.2101 +            'VIDS' => 'Vitec Multimedia YUV 4:2:2 CCIR 601 for V422',
416.2102 +            'VIVO' => 'Vivo H.263 v2.00',
416.2103 +            'vivo' => 'Vivo H.263',
416.2104 +            'VIXL' => 'Miro/Pinnacle Video XL',
416.2105 +            'VLV1' => 'VideoLogic/PURE Digital Videologic Capture',
416.2106 +            'VP30' => 'On2 VP3.0',
416.2107 +            'VP31' => 'On2 VP3.1',
416.2108 +            'VX1K' => 'Lucent VX1000S Video Codec',
416.2109 +            'VX2K' => 'Lucent VX2000S Video Codec',
416.2110 +            'VXSP' => 'Lucent VX1000SP Video Codec',
416.2111 +            'WBVC' => 'Winbond W9960',
416.2112 +            'WHAM' => 'Microsoft Video 1 (WHAM)',
416.2113 +            'WINX' => 'Winnov Software Compression',
416.2114 +            'WJPG' => 'AverMedia Winbond JPEG',
416.2115 +            'WMV1' => 'Windows Media Video V7',
416.2116 +            'WMV2' => 'Windows Media Video V8',
416.2117 +            'WMV3' => 'Windows Media Video V9',
416.2118 +            'WNV1' => 'Winnov Hardware Compression',
416.2119 +            'XYZP' => 'Extended PAL format XYZ palette (www.riff.org)',
416.2120 +            'x263' => 'Xirlink H.263',
416.2121 +            'XLV0' => 'NetXL Video Decoder',
416.2122 +            'XMPG' => 'Xing MPEG (I-Frame only)',
416.2123 +            'XVID' => 'XviD MPEG-4 (www.xvid.org)',
416.2124 +            'XXAN' => '?XXAN?',
416.2125 +            'YU92' => 'Intel YUV (YU92)',
416.2126 +            'YUNV' => 'Nvidia Uncompressed YUV 4:2:2',
416.2127 +            'YUVP' => 'Extended PAL format YUV palette (www.riff.org)',
416.2128 +            'Y211' => 'YUV 2:1:1 Packed',
416.2129 +            'Y411' => 'YUV 4:1:1 Packed',
416.2130 +            'Y41B' => 'Weitek YUV 4:1:1 Planar',
416.2131 +            'Y41P' => 'Brooktree PC1 YUV 4:1:1 Packed',
416.2132 +            'Y41T' => 'Brooktree PC1 YUV 4:1:1 with transparency',
416.2133 +            'Y42B' => 'Weitek YUV 4:2:2 Planar',
416.2134 +            'Y42T' => 'Brooktree UYUV 4:2:2 with transparency',
416.2135 +            'Y422' => 'ADS Technologies Copy of UYVY used in Pyro WebCam firewire camera',
416.2136 +            'Y800' => 'Simple, single Y plane for monochrome images',
416.2137 +            'Y8  ' => 'Grayscale video',
416.2138 +            'YC12' => 'Intel YUV 12 codec',
416.2139 +            'YUV8' => 'Winnov Caviar YUV8',
416.2140 +            'YUV9' => 'Intel YUV9',
416.2141 +            'YUY2' => 'Uncompressed YUV 4:2:2',
416.2142 +            'YUYV' => 'Canopus YUV',
416.2143 +            'YV12' => 'YVU12 Planar',
416.2144 +            'YVU9' => 'Intel YVU9 Planar (8-bpp Y plane, followed by 8-bpp 4x4 U and V planes)',
416.2145 +            'YVYU' => 'YVYU 4:2:2 Packed',
416.2146 +            'ZLIB' => 'Lossless Codec Library zlib compression (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)',
416.2147 +            'ZPEG' => 'Metheus Video Zipper'
416.2148 +        );
416.2149 +        
416.2150 +        return @$lookup[$four_cc];
416.2151 +    }
416.2152 +
416.2153 +
416.2154 +
416.2155 +    public static function RIFFcommentsParse(&$riff_info_aray, &$comments_target_array) {
416.2156 +        
416.2157 +		static $lookup = array(
416.2158 +			'IARL' => 'archivallocation',
416.2159 +			'IART' => 'artist',
416.2160 +			'ICDS' => 'costumedesigner',
416.2161 +			'ICMS' => 'commissionedby',
416.2162 +			'ICMT' => 'comment',
416.2163 +			'ICNT' => 'country',
416.2164 +			'ICOP' => 'copyright',
416.2165 +			'ICRD' => 'creationdate',
416.2166 +			'IDIM' => 'dimensions',
416.2167 +			'IDIT' => 'digitizationdate',
416.2168 +			'IDPI' => 'resolution',
416.2169 +			'IDST' => 'distributor',
416.2170 +			'IEDT' => 'editor',
416.2171 +			'IENG' => 'engineers',
416.2172 +			'IFRM' => 'accountofparts',
416.2173 +			'IGNR' => 'genre',
416.2174 +			'IKEY' => 'keywords',
416.2175 +			'ILGT' => 'lightness',
416.2176 +			'ILNG' => 'language',
416.2177 +			'IMED' => 'orignalmedium',
416.2178 +			'IMUS' => 'composer',
416.2179 +			'INAM' => 'title',
416.2180 +			'IPDS' => 'productiondesigner',
416.2181 +			'IPLT' => 'palette',
416.2182 +			'IPRD' => 'product',
416.2183 +			'IPRO' => 'producer',
416.2184 +			'IPRT' => 'part',
416.2185 +			'IRTD' => 'rating',
416.2186 +			'ISBJ' => 'subject',
416.2187 +			'ISFT' => 'software',
416.2188 +			'ISGN' => 'secondarygenre',
416.2189 +			'ISHP' => 'sharpness',
416.2190 +			'ISRC' => 'sourcesupplier',
416.2191 +			'ISRF' => 'digitizationsource',
416.2192 +			'ISTD' => 'productionstudio',
416.2193 +			'ISTR' => 'starring',
416.2194 +			'ITCH' => 'encoded_by',
416.2195 +			'IWEB' => 'url',
416.2196 +			'IWRI' => 'writer'
416.2197 +		);
416.2198 +		
416.2199 +		foreach ($lookup as $key => $value) {
416.2200 +			if (isset($riff_info_aray[$key])) {
416.2201 +				foreach ($riff_info_aray[$key] as $comment_id => $comment_data) {
416.2202 +					if (trim($comment_data['data']) != '') {
416.2203 +						@$comments_target_array[$value][] = trim($comment_data['data']);
416.2204 +					}
416.2205 +				}
416.2206 +			}
416.2207 +		}
416.2208 +		return true;
416.2209 +    }
416.2210 +	
416.2211 +	
416.2212 +	
416.2213 +    public static function array_merge_noclobber($array1, $array2) {
416.2214 +        if (!is_array($array1) || !is_array($array2)) {
416.2215 +            return false;
416.2216 +        }
416.2217 +        $new_array = $array1;
416.2218 +        foreach ($array2 as $key => $val) {
416.2219 +            if (is_array($val) && isset($new_array[$key]) && is_array($new_array[$key])) {
416.2220 +                $new_array[$key] = getid3_riff::array_merge_noclobber($new_array[$key], $val);
416.2221 +            } elseif (!isset($new_array[$key])) {
416.2222 +                $new_array[$key] = $val;
416.2223 +            }
416.2224 +        }
416.2225 +        return $new_array;
416.2226 +    }
416.2227 +    
416.2228 +    
416.2229 +  
416.2230 +    public static function DateMac2Unix($mac_date) {
416.2231 +        
416.2232 +        // Macintosh timestamp: seconds since 00:00h January 1, 1904
416.2233 +        // UNIX timestamp:      seconds since 00:00h January 1, 1970
416.2234 +        return (int)($mac_date - 2082844800);
416.2235 +    }
416.2236 +    
416.2237 +    
416.2238 +    
416.2239 +    public static function FixedPoint16_16($raw_data) {
416.2240 +    
416.2241 +        return getid3_lib::BigEndian2Int(substr($raw_data, 0, 2)) + (float)(getid3_lib::BigEndian2Int(substr($raw_data, 2, 2)) / 65536);  // pow(2, 16) = 65536
416.2242 +    }
416.2243 +    
416.2244 +    
416.2245 +    
416.2246 +   	function BigEndian2Float($byte_word) {
416.2247 +	
416.2248 +        // ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic
416.2249 +        // http://www.psc.edu/general/software/packages/ieee/ieee.html
416.2250 +        // http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee.html
416.2251 +
416.2252 +        $bit_word = getid3_lib::BigEndian2Bin($byte_word);
416.2253 +        $sign_bit = $bit_word{0};
416.2254 +
416.2255 +        switch (strlen($byte_word) * 8) {
416.2256 +            case 32:
416.2257 +                $exponent_bits = 8;
416.2258 +                $fraction_bits = 23;
416.2259 +                break;
416.2260 +
416.2261 +            case 64:
416.2262 +                $exponent_bits = 11;
416.2263 +                $fraction_bits = 52;
416.2264 +                break;
416.2265 +
416.2266 +            case 80:
416.2267 +                // 80-bit Apple SANE format
416.2268 +                // http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/
416.2269 +                $exponent_string = substr($bit_word, 1, 15);
416.2270 +                $is_normalized   = intval($bit_word{16});
416.2271 +                $fraction_string = substr($bit_word, 17, 63);
416.2272 +                $exponent = pow(2, bindec($exponent_string) - 16383);
416.2273 +                $fraction = $is_normalized + bindec($fraction_string) / bindec('1'.str_repeat('0', strlen($fraction_string)));
416.2274 +                $float_value = $exponent * $fraction;
416.2275 +                if ($sign_bit == '1') {
416.2276 +                    $float_value *= -1;
416.2277 +                }
416.2278 +                return $float_value;
416.2279 +                break;
416.2280 +
416.2281 +            default:
416.2282 +                return false;
416.2283 +                break;
416.2284 +        }
416.2285 +        $exponent_string = substr($bit_word, 1, $exponent_bits);
416.2286 +        $fraction_string = substr($bit_word, $exponent_bits + 1, $fraction_bits);
416.2287 +        $exponent = bindec($exponent_string);
416.2288 +        $fraction = bindec($fraction_string);
416.2289 +
416.2290 +        if (($exponent == (pow(2, $exponent_bits) - 1)) && ($fraction != 0)) {
416.2291 +            // Not a Number
416.2292 +            $float_value = false;
416.2293 +        } elseif (($exponent == (pow(2, $exponent_bits) - 1)) && ($fraction == 0)) {
416.2294 +            if ($sign_bit == '1') {
416.2295 +                $float_value = '-infinity';
416.2296 +            } else {
416.2297 +                $float_value = '+infinity';
416.2298 +            }
416.2299 +        } elseif (($exponent == 0) && ($fraction == 0)) {
416.2300 +            if ($sign_bit == '1') {
416.2301 +                $float_value = -0;
416.2302 +            } else {
416.2303 +                $float_value = 0;
416.2304 +            }
416.2305 +            $float_value = ($sign_bit ? 0 : -0);
416.2306 +        } elseif (($exponent == 0) && ($fraction != 0)) {
416.2307 +            // These are 'unnormalized' values
416.2308 +            $float_value = pow(2, (-1 * (pow(2, $exponent_bits - 1) - 2))) * bindec($fraction_string) / bindec('1'.str_repeat('0', strlen($fraction_string)));
416.2309 +            if ($sign_bit == '1') {
416.2310 +                $float_value *= -1;
416.2311 +            }
416.2312 +        } elseif ($exponent != 0) {
416.2313 +            $float_value = pow(2, ($exponent - (pow(2, $exponent_bits - 1) - 1))) * (1 + bindec($fraction_string) / bindec('1'.str_repeat('0', strlen($fraction_string))));
416.2314 +            if ($sign_bit == '1') {
416.2315 +                $float_value *= -1;
416.2316 +            }
416.2317 +        }
416.2318 +        return (float) $float_value;
416.2319 +    }
416.2320 +}
416.2321 +
416.2322 +?>
416.2323 \ No newline at end of file
   417.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   417.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio-video.swf.php	Mon Feb 22 08:02:39 2010 -0500
   417.3 @@ -0,0 +1,154 @@
   417.4 +<?php
   417.5 +// +----------------------------------------------------------------------+
   417.6 +// | PHP version 5                                                        |
   417.7 +// +----------------------------------------------------------------------+
   417.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   417.9 +// +----------------------------------------------------------------------+
  417.10 +// | This source file is subject to version 2 of the GPL license,         |
  417.11 +// | that is bundled with this package in the file license.txt and is     |
  417.12 +// | available through the world-wide-web at the following url:           |
  417.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  417.14 +// +----------------------------------------------------------------------+
  417.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  417.16 +// +----------------------------------------------------------------------+
  417.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  417.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  417.19 +// +----------------------------------------------------------------------+
  417.20 +// | module.audio-video.swf.php                                           |
  417.21 +// | module for analyzing Macromedia Shockwave Flash files.               |
  417.22 +// | dependencies: zlib support in PHP                                    |
  417.23 +// +----------------------------------------------------------------------+
  417.24 +//
  417.25 +// $Id: module.audio-video.swf.php,v 1.2 2006/11/02 10:48:00 ah Exp $
  417.26 +
  417.27 +        
  417.28 +        
  417.29 +class getid3_swf extends getid3_handler
  417.30 +{
  417.31 +
  417.32 +    public function Analyze() {
  417.33 +        
  417.34 +        $getid3 = $this->getid3;
  417.35 +        
  417.36 +        $getid3->info['fileformat']          = 'swf';
  417.37 +        $getid3->info['video']['dataformat'] = 'swf';
  417.38 +
  417.39 +        // http://www.openswf.org/spec/SWFfileformat.html
  417.40 +
  417.41 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  417.42 +
  417.43 +        $swf_file_data = fread($getid3->fp, $getid3->info['avdataend'] - $getid3->info['avdataoffset']); // 8 + 2 + 2 + max(9) bytes NOT including Frame_Size RECT data
  417.44 +
  417.45 +        $getid3->info['swf']['header']['signature']   = substr($swf_file_data, 0, 3);
  417.46 +        switch ($getid3->info['swf']['header']['signature']) {
  417.47 +        
  417.48 +            case 'FWS':
  417.49 +                $getid3->info['swf']['header']['compressed'] = false;
  417.50 +                break;
  417.51 +
  417.52 +            case 'CWS':
  417.53 +                $getid3->info['swf']['header']['compressed'] = true;
  417.54 +                break;
  417.55 +
  417.56 +            default:
  417.57 +                throw new getid3_exception('Expecting "FWS" or "CWS" at offset '.$getid3->info['avdataoffset'].', found "'.$getid3->info['swf']['header']['signature'].'"');
  417.58 +        }
  417.59 +        $getid3->info['swf']['header']['version'] = getid3_lib::LittleEndian2Int($swf_file_data{3});
  417.60 +        $getid3->info['swf']['header']['length']  = getid3_lib::LittleEndian2Int(substr($swf_file_data, 4, 4));
  417.61 +
  417.62 +        if (!function_exists('gzuncompress')) {
  417.63 +            throw new getid3_exception('getid3_swf requires --zlib support in PHP.');
  417.64 +        }
  417.65 +
  417.66 +        if ($getid3->info['swf']['header']['compressed']) {
  417.67 +
  417.68 +            if ($uncompressed_file_data = @gzuncompress(substr($swf_file_data, 8))) {
  417.69 +                $swf_file_data = substr($swf_file_data, 0, 8).$uncompressed_file_data;
  417.70 +
  417.71 +            } else {
  417.72 +                throw new getid3_exception('Error decompressing compressed SWF data');
  417.73 +            }
  417.74 +
  417.75 +        }
  417.76 +
  417.77 +        $frame_size_bits_per_value = (ord(substr($swf_file_data, 8, 1)) & 0xF8) >> 3;
  417.78 +        $frame_size_data_length    = ceil((5 + (4 * $frame_size_bits_per_value)) / 8);
  417.79 +        $frame_size_data_string    = str_pad(decbin(ord($swf_file_data[8]) & 0x07), 3, '0', STR_PAD_LEFT);
  417.80 +        
  417.81 +        for ($i = 1; $i < $frame_size_data_length; $i++) {
  417.82 +            $frame_size_data_string .= str_pad(decbin(ord(substr($swf_file_data, 8 + $i, 1))), 8, '0', STR_PAD_LEFT);
  417.83 +        }
  417.84 +        
  417.85 +        list($x1, $x2, $y1, $y2) = explode("\n", wordwrap($frame_size_data_string, $frame_size_bits_per_value, "\n", 1));
  417.86 +        $getid3->info['swf']['header']['frame_width']  = bindec($x2);
  417.87 +        $getid3->info['swf']['header']['frame_height'] = bindec($y2);
  417.88 +
  417.89 +        // http://www-lehre.informatik.uni-osnabrueck.de/~fbstark/diplom/docs/swf/Flash_Uncovered.htm
  417.90 +        // Next in the header is the frame rate, which is kind of weird.
  417.91 +        // It is supposed to be stored as a 16bit integer, but the first byte
  417.92 +        // (or last depending on how you look at it) is completely ignored.
  417.93 +        // Example: 0x000C  ->  0x0C  ->  12     So the frame rate is 12 fps.
  417.94 +
  417.95 +        // Byte at (8 + $frame_size_data_length) is always zero and ignored
  417.96 +        $getid3->info['swf']['header']['frame_rate']  = getid3_lib::LittleEndian2Int($swf_file_data[9 + $frame_size_data_length]);
  417.97 +        $getid3->info['swf']['header']['frame_count'] = getid3_lib::LittleEndian2Int(substr($swf_file_data, 10 + $frame_size_data_length, 2));
  417.98 +
  417.99 +        $getid3->info['video']['frame_rate']         = $getid3->info['swf']['header']['frame_rate'];
 417.100 +        $getid3->info['video']['resolution_x']       = intval(round($getid3->info['swf']['header']['frame_width']  / 20));
 417.101 +        $getid3->info['video']['resolution_y']       = intval(round($getid3->info['swf']['header']['frame_height'] / 20));
 417.102 +        $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
 417.103 +
 417.104 +        if (($getid3->info['swf']['header']['frame_count'] > 0) && ($getid3->info['swf']['header']['frame_rate'] > 0)) {
 417.105 +            $getid3->info['playtime_seconds'] = $getid3->info['swf']['header']['frame_count'] / $getid3->info['swf']['header']['frame_rate'];
 417.106 +        }
 417.107 +
 417.108 +
 417.109 +        // SWF tags
 417.110 +
 417.111 +        $current_offset = 12 + $frame_size_data_length;
 417.112 +        $swf_data_length = strlen($swf_file_data);
 417.113 +
 417.114 +        while ($current_offset < $swf_data_length) {
 417.115 +
 417.116 +            $tag_ID_tag_length = getid3_lib::LittleEndian2Int(substr($swf_file_data, $current_offset, 2));
 417.117 +            $tag_ID     = ($tag_ID_tag_length & 0xFFFC) >> 6;
 417.118 +            $tag_length = ($tag_ID_tag_length & 0x003F);
 417.119 +            $current_offset += 2;
 417.120 +            if ($tag_length == 0x3F) {
 417.121 +                $tag_length = getid3_lib::LittleEndian2Int(substr($swf_file_data, $current_offset, 4));
 417.122 +                $current_offset += 4;
 417.123 +            }
 417.124 +
 417.125 +            unset($tag_data);
 417.126 +            $tag_data['offset'] = $current_offset;
 417.127 +            $tag_data['size']   = $tag_length;
 417.128 +            $tag_data['id']     = $tag_ID;
 417.129 +            $tag_data['data']   = substr($swf_file_data, $current_offset, $tag_length);
 417.130 +            switch ($tag_ID) {
 417.131 +                
 417.132 +                case 0: // end of movie
 417.133 +                    break 2;
 417.134 +
 417.135 +                case 9: // Set background color
 417.136 +                    $getid3->info['swf']['bgcolor'] = strtoupper(str_pad(dechex(getid3_lib::BigEndian2Int($tag_data['data'])), 6, '0', STR_PAD_LEFT));
 417.137 +                    break;
 417.138 +
 417.139 +                default:
 417.140 +                    /*
 417.141 +                    if ($ReturnAllTagData) {
 417.142 +                        $getid3->info['swf']['tags'][] = $tag_data;
 417.143 +                    }
 417.144 +                    */
 417.145 +                    break;
 417.146 +            }
 417.147 +
 417.148 +            $current_offset += $tag_length;
 417.149 +        }
 417.150 +
 417.151 +        return true;
 417.152 +    }
 417.153 +
 417.154 +}
 417.155 +
 417.156 +
 417.157 +?>
 417.158 \ No newline at end of file
   418.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   418.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.aac_adif.php	Mon Feb 22 08:02:39 2010 -0500
   418.3 @@ -0,0 +1,311 @@
   418.4 +<?php
   418.5 +// +----------------------------------------------------------------------+
   418.6 +// | PHP version 5                                                        |
   418.7 +// +----------------------------------------------------------------------+
   418.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   418.9 +// +----------------------------------------------------------------------+
  418.10 +// | This source file is subject to version 2 of the GPL license,         |
  418.11 +// | that is bundled with this package in the file license.txt and is     |
  418.12 +// | available through the world-wide-web at the following url:           |
  418.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  418.14 +// +----------------------------------------------------------------------+
  418.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  418.16 +// +----------------------------------------------------------------------+
  418.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  418.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  418.19 +// +----------------------------------------------------------------------+
  418.20 +// | module.audio.aac_adif.php                                            |
  418.21 +// | Module for analyzing AAC files with ADIF header.                     |
  418.22 +// | dependencies: NONE                                                   |
  418.23 +// +----------------------------------------------------------------------+
  418.24 +//
  418.25 +// $Id: module.audio.aac_adif.php,v 1.3 2006/11/02 10:48:00 ah Exp $
  418.26 +
  418.27 +        
  418.28 +        
  418.29 +class getid3_aac_adif extends getid3_handler
  418.30 +{
  418.31 +
  418.32 +    public function Analyze() {
  418.33 +
  418.34 +        $getid3 = $this->getid3;    
  418.35 +
  418.36 +        // http://faac.sourceforge.net/wiki/index.php?page=ADIF
  418.37 +        // http://libmpeg.org/mpeg4/doc/w2203tfs.pdf
  418.38 +        // adif_header() {
  418.39 +        //     adif_id                                32
  418.40 +        //     copyright_id_present                    1
  418.41 +        //     if( copyright_id_present )
  418.42 +        //         copyright_id                       72
  418.43 +        //     original_copy                           1
  418.44 +        //     home                                    1
  418.45 +        //     bitstream_type                          1
  418.46 +        //     bitrate                                23
  418.47 +        //     num_program_config_elements             4
  418.48 +        //     for (i = 0; i < num_program_config_elements + 1; i++ ) {
  418.49 +        //         if( bitstream_type == '0' )
  418.50 +        //             adif_buffer_fullness           20
  418.51 +        //         program_config_element()
  418.52 +        //     }
  418.53 +        // }
  418.54 +        
  418.55 +
  418.56 +        $getid3->info['fileformat']          = 'aac';
  418.57 +        $getid3->info['audio']['dataformat'] = 'aac';
  418.58 +        $getid3->info['audio']['lossless']   = false;
  418.59 +        
  418.60 +        $getid3->info['aac']['header'] = array () ;
  418.61 +        $info_aac        = &$getid3->info['aac'];
  418.62 +        $info_aac_header = & $info_aac['header'];
  418.63 +
  418.64 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  418.65 +        $aac_header_bitstream = getid3_lib::BigEndian2Bin(fread($getid3->fp, 1024));
  418.66 +        
  418.67 +        $info_aac['header_type']            = 'ADIF';
  418.68 +        $info_aac_header['mpeg_version'] = 4;
  418.69 +        $bit_offset = 32;
  418.70 +
  418.71 +        $info_aac_header['copyright'] = $aac_header_bitstream{$bit_offset++} == '1';
  418.72 +        if ($info_aac_header['copyright']) {
  418.73 +            $info_aac_header['copyright_id'] = getid3_aac_adif::Bin2String(substr($aac_header_bitstream, $bit_offset, 72));
  418.74 +            $bit_offset += 72;
  418.75 +        }
  418.76 +        
  418.77 +        $info_aac_header['original_copy'] = $aac_header_bitstream{$bit_offset++} == '1';
  418.78 +        $info_aac_header['home']          = $aac_header_bitstream{$bit_offset++} == '1';
  418.79 +        $info_aac_header['is_vbr']        = $aac_header_bitstream{$bit_offset++} == '1';
  418.80 +
  418.81 +        if ($info_aac_header['is_vbr']) {
  418.82 +            $getid3->info['audio']['bitrate_mode'] = 'vbr';
  418.83 +            $info_aac_header['bitrate_max']     = bindec(substr($aac_header_bitstream, $bit_offset, 23));
  418.84 +            $bit_offset += 23;
  418.85 +        } 
  418.86 +        else {
  418.87 +            $getid3->info['audio']['bitrate_mode'] = 'cbr';
  418.88 +            $info_aac_header['bitrate']         = bindec(substr($aac_header_bitstream, $bit_offset, 23));
  418.89 +            $bit_offset += 23;
  418.90 +            $getid3->info['audio']['bitrate']      = $info_aac_header['bitrate'];
  418.91 +        }
  418.92 +        
  418.93 +        $info_aac_header['num_program_configs'] = 1 + bindec(substr($aac_header_bitstream, $bit_offset, 4));
  418.94 +        $bit_offset += 4;
  418.95 +
  418.96 +        for ($i = 0; $i < $info_aac_header['num_program_configs']; $i++) {
  418.97 +
  418.98 +            // http://www.audiocoding.com/wiki/index.php?page=program_config_element
  418.99 +
 418.100 +            // buffer_fullness                       20
 418.101 +
 418.102 +            // element_instance_tag                   4
 418.103 +            // object_type                            2
 418.104 +            // sampling_frequency_index               4
 418.105 +            // num_front_channel_elements             4
 418.106 +            // num_side_channel_elements              4
 418.107 +            // num_back_channel_elements              4
 418.108 +            // num_lfe_channel_elements               2
 418.109 +            // num_assoc_data_elements                3
 418.110 +            // num_valid_cc_elements                  4
 418.111 +            // mono_mixdown_present                   1
 418.112 +            // mono_mixdown_element_number            4   if mono_mixdown_present == 1
 418.113 +            // stereo_mixdown_present                 1
 418.114 +            // stereo_mixdown_element_number          4   if stereo_mixdown_present == 1
 418.115 +            // matrix_mixdown_idx_present             1
 418.116 +            // matrix_mixdown_idx                     2   if matrix_mixdown_idx_present == 1
 418.117 +            // pseudo_surround_enable                 1   if matrix_mixdown_idx_present == 1
 418.118 +            // for (i = 0; i < num_front_channel_elements; i++) {
 418.119 +            //     front_element_is_cpe[i]            1
 418.120 +            //     front_element_tag_select[i]        4
 418.121 +            // }
 418.122 +            // for (i = 0; i < num_side_channel_elements; i++) {
 418.123 +            //     side_element_is_cpe[i]             1
 418.124 +            //     side_element_tag_select[i]         4
 418.125 +            // }
 418.126 +            // for (i = 0; i < num_back_channel_elements; i++) {
 418.127 +            //     back_element_is_cpe[i]             1
 418.128 +            //     back_element_tag_select[i]         4
 418.129 +            // }
 418.130 +            // for (i = 0; i < num_lfe_channel_elements; i++) {
 418.131 +            //     lfe_element_tag_select[i]          4
 418.132 +            // }
 418.133 +            // for (i = 0; i < num_assoc_data_elements; i++) {
 418.134 +            //     assoc_data_element_tag_select[i]   4
 418.135 +            // }
 418.136 +            // for (i = 0; i < num_valid_cc_elements; i++) {
 418.137 +            //     cc_element_is_ind_sw[i]            1
 418.138 +            //     valid_cc_element_tag_select[i]     4
 418.139 +            // }
 418.140 +            // byte_alignment()                       VAR
 418.141 +            // comment_field_bytes                    8
 418.142 +            // for (i = 0; i < comment_field_bytes; i++) {
 418.143 +            //     comment_field_data[i]              8
 418.144 +            // }
 418.145 +            
 418.146 +            $info_aac['program_configs'][$i] = array ();
 418.147 +            $info_aac_program_configs_i = &$info_aac['program_configs'][$i];
 418.148 +
 418.149 +            if (!$info_aac_header['is_vbr']) {
 418.150 +                $info_aac_program_configs_i['buffer_fullness']        = bindec(substr($aac_header_bitstream, $bit_offset, 20));
 418.151 +                $bit_offset += 20;
 418.152 +            }
 418.153 +                
 418.154 +            $info_aac_program_configs_i['element_instance_tag']       = bindec(substr($aac_header_bitstream, $bit_offset,      4));
 418.155 +            $info_aac_program_configs_i['object_type']                = bindec(substr($aac_header_bitstream, $bit_offset +  4, 2));
 418.156 +            $info_aac_program_configs_i['sampling_frequency_index']   = bindec(substr($aac_header_bitstream, $bit_offset +  6, 4));
 418.157 +            $info_aac_program_configs_i['num_front_channel_elements'] = bindec(substr($aac_header_bitstream, $bit_offset + 10, 4));
 418.158 +            $info_aac_program_configs_i['num_side_channel_elements']  = bindec(substr($aac_header_bitstream, $bit_offset + 14, 4));
 418.159 +            $info_aac_program_configs_i['num_back_channel_elements']  = bindec(substr($aac_header_bitstream, $bit_offset + 18, 4));
 418.160 +            $info_aac_program_configs_i['num_lfe_channel_elements']   = bindec(substr($aac_header_bitstream, $bit_offset + 22, 2));
 418.161 +            $info_aac_program_configs_i['num_assoc_data_elements']    = bindec(substr($aac_header_bitstream, $bit_offset + 24, 3));
 418.162 +            $info_aac_program_configs_i['num_valid_cc_elements']      = bindec(substr($aac_header_bitstream, $bit_offset + 27, 4));
 418.163 +            $bit_offset += 31;
 418.164 +            
 418.165 +            $info_aac_program_configs_i['mono_mixdown_present'] = $aac_header_bitstream{$bit_offset++} == 1;
 418.166 +            if ($info_aac_program_configs_i['mono_mixdown_present']) {
 418.167 +                $info_aac_program_configs_i['mono_mixdown_element_number'] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.168 +                $bit_offset += 4;
 418.169 +            }
 418.170 +            
 418.171 +            $info_aac_program_configs_i['stereo_mixdown_present'] = $aac_header_bitstream{$bit_offset++} == 1;
 418.172 +            if ($info_aac_program_configs_i['stereo_mixdown_present']) {
 418.173 +                $info_aac_program_configs_i['stereo_mixdown_element_number'] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.174 +                $bit_offset += 4;
 418.175 +            }
 418.176 +            
 418.177 +            $info_aac_program_configs_i['matrix_mixdown_idx_present'] = $aac_header_bitstream{$bit_offset++} == 1;
 418.178 +            if ($info_aac_program_configs_i['matrix_mixdown_idx_present']) {
 418.179 +                $info_aac_program_configs_i['matrix_mixdown_idx']     = bindec(substr($aac_header_bitstream, $bit_offset, 2));
 418.180 +                $bit_offset += 2;
 418.181 +                $info_aac_program_configs_i['pseudo_surround_enable'] = $aac_header_bitstream{$bit_offset++} == 1;
 418.182 +            }
 418.183 +            
 418.184 +            for ($j = 0; $j < $info_aac_program_configs_i['num_front_channel_elements']; $j++) {
 418.185 +                $info_aac_program_configs_i['front_element_is_cpe'][$j]     = $aac_header_bitstream{$bit_offset++} == 1;
 418.186 +                $info_aac_program_configs_i['front_element_tag_select'][$j] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.187 +                $bit_offset += 4;
 418.188 +            }
 418.189 +            for ($j = 0; $j < $info_aac_program_configs_i['num_side_channel_elements']; $j++) {
 418.190 +                $info_aac_program_configs_i['side_element_is_cpe'][$j]     = $aac_header_bitstream{$bit_offset++} == 1;
 418.191 +                $info_aac_program_configs_i['side_element_tag_select'][$j] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.192 +                $bit_offset += 4;
 418.193 +            }
 418.194 +            for ($j = 0; $j < $info_aac_program_configs_i['num_back_channel_elements']; $j++) {
 418.195 +                $info_aac_program_configs_i['back_element_is_cpe'][$j]     = $aac_header_bitstream{$bit_offset++} == 1;
 418.196 +                $info_aac_program_configs_i['back_element_tag_select'][$j] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.197 +                $bit_offset += 4;
 418.198 +            }
 418.199 +            for ($j = 0; $j < $info_aac_program_configs_i['num_lfe_channel_elements']; $j++) {
 418.200 +                $info_aac_program_configs_i['lfe_element_tag_select'][$j] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.201 +                $bit_offset += 4;
 418.202 +            }
 418.203 +            for ($j = 0; $j < $info_aac_program_configs_i['num_assoc_data_elements']; $j++) {
 418.204 +                $info_aac_program_configs_i['assoc_data_element_tag_select'][$j] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.205 +                $bit_offset += 4;
 418.206 +            }
 418.207 +            for ($j = 0; $j < $info_aac_program_configs_i['num_valid_cc_elements']; $j++) {
 418.208 +                $info_aac_program_configs_i['cc_element_is_ind_sw'][$j]          = $aac_header_bitstream{$bit_offset++} == 1;
 418.209 +                $info_aac_program_configs_i['valid_cc_element_tag_select'][$j]   = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 418.210 +                $bit_offset += 4;
 418.211 +            }
 418.212 +
 418.213 +            $bit_offset = ceil($bit_offset / 8) * 8;
 418.214 +
 418.215 +            $info_aac_program_configs_i['comment_field_bytes'] = bindec(substr($aac_header_bitstream, $bit_offset, 8));
 418.216 +            $bit_offset += 8;
 418.217 +            
 418.218 +            $info_aac_program_configs_i['comment_field'] = getid3_aac_adif::Bin2String(substr($aac_header_bitstream, $bit_offset, 8 * $info_aac_program_configs_i['comment_field_bytes']));
 418.219 +            $bit_offset += 8 * $info_aac_program_configs_i['comment_field_bytes'];
 418.220 +
 418.221 +            $info_aac_header['profile_text']                  = getid3_aac_adif::AACprofileLookup($info_aac_program_configs_i['object_type'], $info_aac_header['mpeg_version']);
 418.222 +            $info_aac_program_configs_i['sampling_frequency'] = $getid3->info['audio']['sample_rate'] = getid3_aac_adif::AACsampleRateLookup($info_aac_program_configs_i['sampling_frequency_index']);
 418.223 +            $getid3->info['audio']['channels']                = getid3_aac_adif::AACchannelCountCalculate($info_aac_program_configs_i);
 418.224 +            
 418.225 +            if ($info_aac_program_configs_i['comment_field']) {
 418.226 +                $info_aac['comments'][] = $info_aac_program_configs_i['comment_field'];
 418.227 +            }
 418.228 +        }
 418.229 +        
 418.230 +        $getid3->info['playtime_seconds'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['audio']['bitrate'];
 418.231 +        $getid3->info['audio']['encoder_options'] = $info_aac['header_type'].' '.$info_aac_header['profile_text'];
 418.232 +
 418.233 +        return true;
 418.234 +    }
 418.235 +
 418.236 +
 418.237 +
 418.238 +    public static function Bin2String($bin_string) {
 418.239 +        // return 'hi' for input of '0110100001101001'
 418.240 +        $string = '';
 418.241 +        $bin_string_reversed = strrev($bin_string);
 418.242 +        for ($i = 0; $i < strlen($bin_string_reversed); $i += 8) {
 418.243 +            $string = chr(bindec(strrev(substr($bin_string_reversed, $i, 8)))).$string;
 418.244 +        }
 418.245 +        return $string;
 418.246 +    }
 418.247 +    
 418.248 +    
 418.249 +    
 418.250 +    public static function AACsampleRateLookup($samplerate_id) {
 418.251 +        
 418.252 +        static $lookup = array (
 418.253 +            0  => 96000,
 418.254 +            1  => 88200,
 418.255 +            2  => 64000,
 418.256 +            3  => 48000,
 418.257 +            4  => 44100,
 418.258 +            5  => 32000,
 418.259 +            6  => 24000,
 418.260 +            7  => 22050,
 418.261 +            8  => 16000,
 418.262 +            9  => 12000,
 418.263 +            10 => 11025,
 418.264 +            11 => 8000,
 418.265 +            12 => 0,
 418.266 +            13 => 0,
 418.267 +            14 => 0,
 418.268 +            15 => 0
 418.269 +        );
 418.270 +        return (isset($lookup[$samplerate_id]) ? $lookup[$samplerate_id] : 'invalid');
 418.271 +    }
 418.272 +
 418.273 +
 418.274 +
 418.275 +    public static function AACprofileLookup($profile_id, $mpeg_version) {
 418.276 +        
 418.277 +        static $lookup = array (
 418.278 +            2 => array ( 
 418.279 +                0 => 'Main profile',
 418.280 +                1 => 'Low Complexity profile (LC)',
 418.281 +                2 => 'Scalable Sample Rate profile (SSR)',
 418.282 +                3 => '(reserved)'
 418.283 +            ),            
 418.284 +            4 => array (
 418.285 +                0 => 'AAC_MAIN',
 418.286 +                1 => 'AAC_LC',
 418.287 +                2 => 'AAC_SSR',
 418.288 +                3 => 'AAC_LTP'
 418.289 +            )
 418.290 +        );
 418.291 +        return (isset($lookup[$mpeg_version][$profile_id]) ? $lookup[$mpeg_version][$profile_id] : 'invalid');
 418.292 +    }
 418.293 +
 418.294 +
 418.295 +
 418.296 +    public static function AACchannelCountCalculate($program_configs) {
 418.297 +        
 418.298 +        $channels = 0;
 418.299 +        
 418.300 +        foreach (array ('front', 'side', 'back') as $placement) {
 418.301 +            for ($i = 0; $i < $program_configs['num_'.$placement.'_channel_elements']; $i++) {
 418.302 +                
 418.303 +                // Each element is channel pair (CPE = Channel Pair Element)
 418.304 +                $channels += 1 + ($program_configs[$placement.'_element_is_cpe'][$i] ? 1 : 0);
 418.305 +            }
 418.306 +        }
 418.307 +        
 418.308 +        return $channels + $program_configs['num_lfe_channel_elements'];
 418.309 +    }
 418.310 +
 418.311 +}
 418.312 +
 418.313 +
 418.314 +?>
 418.315 \ No newline at end of file
   419.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   419.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.aac_adts.php	Mon Feb 22 08:02:39 2010 -0500
   419.3 @@ -0,0 +1,282 @@
   419.4 +<?php
   419.5 +// +----------------------------------------------------------------------+
   419.6 +// | PHP version 5                                                        |
   419.7 +// +----------------------------------------------------------------------+
   419.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   419.9 +// +----------------------------------------------------------------------+
  419.10 +// | This source file is subject to version 2 of the GPL license,         |
  419.11 +// | that is bundled with this package in the file license.txt and is     |
  419.12 +// | available through the world-wide-web at the following url:           |
  419.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  419.14 +// +----------------------------------------------------------------------+
  419.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  419.16 +// +----------------------------------------------------------------------+
  419.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  419.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  419.19 +// +----------------------------------------------------------------------+
  419.20 +// | module.audio.aac_adts.php                                            |
  419.21 +// | Module for analyzing AAC files with ADTS header.                     |
  419.22 +// | dependencies: NONE                                                   |
  419.23 +// +----------------------------------------------------------------------+
  419.24 +//
  419.25 +// $Id: module.audio.aac_adts.php,v 1.4 2006/11/02 10:48:01 ah Exp $
  419.26 +
  419.27 +        
  419.28 +        
  419.29 +class getid3_aac_adts extends getid3_handler
  419.30 +{
  419.31 +
  419.32 +    public $option_max_frames_to_scan   = 1000000;
  419.33 +    public $option_return_extended_info = false;
  419.34 +    
  419.35 +
  419.36 +    private $decbin_cache;
  419.37 +    private $bitrate_cache;
  419.38 +    
  419.39 +
  419.40 +
  419.41 +    public function __construct(getID3 $getid3) {
  419.42 +        
  419.43 +        parent::__construct($getid3);
  419.44 +    
  419.45 +        // Populate bindec_cache
  419.46 +        for ($i = 0; $i < 256; $i++) {
  419.47 +                $this->decbin_cache[chr($i)] = str_pad(decbin($i), 8, '0', STR_PAD_LEFT);
  419.48 +        }
  419.49 +        
  419.50 +        // Init cache
  419.51 +        $this->bitrate_cache = array ();
  419.52 +        
  419.53 +        // Fast scanning?
  419.54 +        if (!$getid3->option_accurate_results) {
  419.55 +            $this->option_max_frames_to_scan = 200;
  419.56 +            $getid3->warning('option_accurate_results set to false - bitrate and playing time are not accurate.');
  419.57 +        }
  419.58 +    }
  419.59 +    
  419.60 +        
  419.61 +
  419.62 +    public function Analyze() {
  419.63 +        
  419.64 +        $getid3 = $this->getid3;
  419.65 +
  419.66 +        // based loosely on code from AACfile by Jurgen Faul  <jfaulØgmx.de>
  419.67 +        // http://jfaul.de/atl  or  http://j-faul.virtualave.net/atl/atl.html
  419.68 +
  419.69 +
  419.70 +        // http://faac.sourceforge.net/wiki/index.php?page=ADTS
  419.71 +
  419.72 +        // * ADTS Fixed Header: these don't change from frame to frame
  419.73 +        // syncword                                       12    always: '111111111111'
  419.74 +        // ID                                              1    0: MPEG-4, 1: MPEG-2
  419.75 +        // layer                                           2    always: '00'
  419.76 +        // protection_absent                               1
  419.77 +        // profile                                         2
  419.78 +        // sampling_frequency_index                        4
  419.79 +        // private_bit                                     1
  419.80 +        // channel_configuration                           3
  419.81 +        // original/copy                                   1
  419.82 +        // home                                            1
  419.83 +        // emphasis                                        2    only if ID == 0 (ie MPEG-4)
  419.84 +
  419.85 +        // * ADTS Variable Header: these can change from frame to frame
  419.86 +        // copyright_identification_bit                    1
  419.87 +        // copyright_identification_start                  1
  419.88 +        // aac_frame_length                               13    length of the frame including header (in bytes)
  419.89 +        // adts_buffer_fullness                           11    0x7FF indicates VBR
  419.90 +        // no_raw_data_blocks_in_frame                     2
  419.91 +
  419.92 +        // * ADTS Error check
  419.93 +        // crc_check                                      16    only if protection_absent == 0
  419.94 +
  419.95 +        $getid3->info['aac']['header'] = array () ;
  419.96 +        $info_aac        = &$getid3->info['aac'];
  419.97 +        $info_aac_header = & $info_aac['header'];
  419.98 +
  419.99 +        $byte_offset  = $frame_number = 0;
 419.100 +
 419.101 +        while (true) {
 419.102 +            
 419.103 +            // Breaks out when end-of-file encountered, or invalid data found,
 419.104 +            // or MaxFramesToScan frames have been scanned
 419.105 +
 419.106 +            fseek($getid3->fp, $byte_offset, SEEK_SET);
 419.107 +
 419.108 +            // First get substring
 419.109 +            $sub_string = fread($getid3->fp, 10);
 419.110 +            $sub_string_length = strlen($sub_string);
 419.111 +            if ($sub_string_length != 10) {
 419.112 +                throw new getid3_exception('Failed to read 10 bytes at offset '.(ftell($getid3->fp) - $sub_string_length).' (only read '.$sub_string_length.' bytes)');
 419.113 +            }
 419.114 +
 419.115 +            // Initialise $aac_header_bitstream
 419.116 +            $aac_header_bitstream = '';
 419.117 +
 419.118 +            // Loop thru substring chars
 419.119 +            for ($i = 0; $i < 10; $i++) {
 419.120 +                $aac_header_bitstream .= $this->decbin_cache[$sub_string[$i]];
 419.121 +            }
 419.122 +            
 419.123 +            $sync_test  = bindec(substr($aac_header_bitstream, 0, 12));
 419.124 +            $bit_offset = 12;
 419.125 +            
 419.126 +            if ($sync_test != 0x0FFF) {
 419.127 +                throw new getid3_exception('Synch pattern (0x0FFF) not found at offset '.(ftell($getid3->fp) - 10).' (found 0x0'.strtoupper(dechex($sync_test)).' instead)');
 419.128 +            }
 419.129 +
 419.130 +            // Only gather info once - this takes time to do 1000 times!
 419.131 +            if ($frame_number > 0) {
 419.132 +
 419.133 +                // MPEG-4: 20,  // MPEG-2: 18
 419.134 +                $bit_offset += $aac_header_bitstream[$bit_offset] ? 18 : 20;
 419.135 +            } 
 419.136 +        
 419.137 +            // Gather info for first frame only - this takes time to do 1000 times!
 419.138 +            else {
 419.139 +
 419.140 +                $info_aac['header_type']             = 'ADTS';
 419.141 +                $info_aac_header['synch']            = $sync_test;
 419.142 +                $getid3->info['fileformat']          = 'aac';
 419.143 +                $getid3->info['audio']['dataformat'] = 'aac';
 419.144 +
 419.145 +                $info_aac_header['mpeg_version']     = $aac_header_bitstream{$bit_offset++} == '0' ? 4 : 2;
 419.146 +                $info_aac_header['layer']            = bindec(substr($aac_header_bitstream, $bit_offset, 2));
 419.147 +                $bit_offset += 2;
 419.148 +                
 419.149 +                if ($info_aac_header['layer'] != 0) {
 419.150 +                    throw new getid3_exception('Layer error - expected 0x00, found 0x'.dechex($info_aac_header['layer']).' instead');
 419.151 +                }
 419.152 +                
 419.153 +                $info_aac_header['crc_present'] = $aac_header_bitstream{$bit_offset++} == '0' ? true : false;
 419.154 +                
 419.155 +                $info_aac_header['profile_id'] = bindec(substr($aac_header_bitstream, $bit_offset, 2));
 419.156 +                $bit_offset += 2;
 419.157 +                
 419.158 +                $info_aac_header['profile_text'] = getid3_aac_adts::AACprofileLookup($info_aac_header['profile_id'], $info_aac_header['mpeg_version']);
 419.159 +
 419.160 +                $info_aac_header['sample_frequency_index'] = bindec(substr($aac_header_bitstream, $bit_offset, 4));
 419.161 +                $bit_offset += 4;
 419.162 +                
 419.163 +                $info_aac_header['sample_frequency'] = getid3_aac_adts::AACsampleRateLookup($info_aac_header['sample_frequency_index']);
 419.164 +                
 419.165 +                $getid3->info['audio']['sample_rate'] = $info_aac_header['sample_frequency'];
 419.166 +
 419.167 +                $info_aac_header['private'] = $aac_header_bitstream{$bit_offset++} == 1;
 419.168 +                
 419.169 +                $info_aac_header['channel_configuration'] = $getid3->info['audio']['channels'] = bindec(substr($aac_header_bitstream, $bit_offset, 3));
 419.170 +                $bit_offset += 3;
 419.171 +                
 419.172 +                $info_aac_header['original'] = $aac_header_bitstream{$bit_offset++} == 1;
 419.173 +                $info_aac_header['home']     = $aac_header_bitstream{$bit_offset++} == 1;
 419.174 +
 419.175 +                if ($info_aac_header['mpeg_version'] == 4) {
 419.176 +                    $info_aac_header['emphasis']  = bindec(substr($aac_header_bitstream, $bit_offset, 2));
 419.177 +                    $bit_offset += 2;
 419.178 +                }
 419.179 +
 419.180 +                if ($this->option_return_extended_info) {
 419.181 +
 419.182 +                    $info_aac[$frame_number]['copyright_id_bit']   = $aac_header_bitstream{$bit_offset++} == 1;
 419.183 +                    $info_aac[$frame_number]['copyright_id_start'] = $aac_header_bitstream{$bit_offset++} == 1;
 419.184 +
 419.185 +                }  else {
 419.186 +                    $bit_offset += 2;
 419.187 +                }
 419.188 +            }
 419.189 +
 419.190 +            $frame_length = bindec(substr($aac_header_bitstream, $bit_offset, 13));
 419.191 +
 419.192 +            if (!isset($this->bitrate_cache[$frame_length])) {
 419.193 +                $this->bitrate_cache[$frame_length] = ($info_aac_header['sample_frequency'] / 1024) * $frame_length * 8;
 419.194 +            }
 419.195 +            @$info_aac['bitrate_distribution'][$this->bitrate_cache[$frame_length]]++;
 419.196 +
 419.197 +            $info_aac[$frame_number]['aac_frame_length']     = $frame_length;
 419.198 +            $bit_offset += 13;
 419.199 +            
 419.200 +            $info_aac[$frame_number]['adts_buffer_fullness'] = bindec(substr($aac_header_bitstream, $bit_offset, 11));
 419.201 +            $bit_offset += 11;
 419.202 +            
 419.203 +            $getid3->info['audio']['bitrate_mode'] = ($info_aac[$frame_number]['adts_buffer_fullness'] == 0x07FF) ? 'vbr' : 'cbr';
 419.204 +            
 419.205 +            $info_aac[$frame_number]['num_raw_data_blocks']  = bindec(substr($aac_header_bitstream, $bit_offset, 2));
 419.206 +            $bit_offset += 2;
 419.207 +
 419.208 +            if ($info_aac_header['crc_present']) {
 419.209 +                $bit_offset += 16;
 419.210 +            }
 419.211 +
 419.212 +            if (!$this->option_return_extended_info) {
 419.213 +                unset($info_aac[$frame_number]);
 419.214 +            }
 419.215 +
 419.216 +            $byte_offset += $frame_length;
 419.217 +            if ((++$frame_number < $this->option_max_frames_to_scan) && (($byte_offset + 10) < $getid3->info['avdataend'])) {
 419.218 +
 419.219 +                // keep scanning
 419.220 +
 419.221 +            } else {
 419.222 +
 419.223 +                $info_aac['frames']    = $frame_number;
 419.224 +                $getid3->info['playtime_seconds'] = ($getid3->info['avdataend'] / $byte_offset) * (($frame_number * 1024) / $info_aac_header['sample_frequency']);  // (1 / % of file scanned) * (samples / (samples/sec)) = seconds
 419.225 +                $getid3->info['audio']['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 419.226 +                ksort($info_aac['bitrate_distribution']);
 419.227 +
 419.228 +                $getid3->info['audio']['encoder_options'] = $info_aac['header_type'].' '.$info_aac_header['profile_text'];
 419.229 +
 419.230 +                return true;
 419.231 +            }
 419.232 +        }
 419.233 +    }
 419.234 +
 419.235 +    
 419.236 +    
 419.237 +    public static function AACsampleRateLookup($samplerate_id) {
 419.238 +        
 419.239 +        static $lookup = array (
 419.240 +            0  => 96000,
 419.241 +            1  => 88200,
 419.242 +            2  => 64000,
 419.243 +            3  => 48000,
 419.244 +            4  => 44100,
 419.245 +            5  => 32000,
 419.246 +            6  => 24000,
 419.247 +            7  => 22050,
 419.248 +            8  => 16000,
 419.249 +            9  => 12000,
 419.250 +            10 => 11025,
 419.251 +            11 => 8000,
 419.252 +            12 => 0,
 419.253 +            13 => 0,
 419.254 +            14 => 0,
 419.255 +            15 => 0
 419.256 +        );
 419.257 +        return (isset($lookup[$samplerate_id]) ? $lookup[$samplerate_id] : 'invalid');
 419.258 +    }
 419.259 +
 419.260 +
 419.261 +
 419.262 +    public static function AACprofileLookup($profile_id, $mpeg_version) {
 419.263 +        
 419.264 +        static $lookup = array (
 419.265 +            2 => array ( 
 419.266 +                0 => 'Main profile',
 419.267 +                1 => 'Low Complexity profile (LC)',
 419.268 +                2 => 'Scalable Sample Rate profile (SSR)',
 419.269 +                3 => '(reserved)'
 419.270 +            ),            
 419.271 +            4 => array (
 419.272 +                0 => 'AAC_MAIN',
 419.273 +                1 => 'AAC_LC',
 419.274 +                2 => 'AAC_SSR',
 419.275 +                3 => 'AAC_LTP'
 419.276 +            )
 419.277 +        );
 419.278 +        return (isset($lookup[$mpeg_version][$profile_id]) ? $lookup[$mpeg_version][$profile_id] : 'invalid');
 419.279 +    }
 419.280 +
 419.281 +
 419.282 +}
 419.283 +
 419.284 +
 419.285 +?>
 419.286 \ No newline at end of file
   420.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   420.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.ac3.php	Mon Feb 22 08:02:39 2010 -0500
   420.3 @@ -0,0 +1,500 @@
   420.4 +<?php
   420.5 +// +----------------------------------------------------------------------+
   420.6 +// | PHP version 5                                                        |
   420.7 +// +----------------------------------------------------------------------+
   420.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   420.9 +// +----------------------------------------------------------------------+
  420.10 +// | This source file is subject to version 2 of the GPL license,         |
  420.11 +// | that is bundled with this package in the file license.txt and is     |
  420.12 +// | available through the world-wide-web at the following url:           |
  420.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  420.14 +// +----------------------------------------------------------------------+
  420.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  420.16 +// +----------------------------------------------------------------------+
  420.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  420.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  420.19 +// +----------------------------------------------------------------------+
  420.20 +// | module.audio.ac3.php                                                 |
  420.21 +// | Module for analyzing AC-3 (aka Dolby Digital) audio files            |
  420.22 +// | dependencies: NONE                                                   |
  420.23 +// +----------------------------------------------------------------------+
  420.24 +//
  420.25 +// $Id: module.audio.ac3.php,v 1.3 2006/11/02 10:48:01 ah Exp $
  420.26 +
  420.27 +        
  420.28 +        
  420.29 +class getid3_ac3 extends getid3_handler
  420.30 +{
  420.31 +
  420.32 +    public function Analyze() {
  420.33 +
  420.34 +        $getid3 = $this->getid3;
  420.35 +        
  420.36 +        // http://www.atsc.org/standards/a_52a.pdf
  420.37 +
  420.38 +        $getid3->info['fileformat']            = 'ac3';
  420.39 +        $getid3->info['audio']['dataformat']   = 'ac3';
  420.40 +        $getid3->info['audio']['bitrate_mode'] = 'cbr';
  420.41 +        $getid3->info['audio']['lossless']     = false;
  420.42 +
  420.43 +        $getid3->info['ac3']['raw']['bsi'] = array ();
  420.44 +        $info_ac3         = &$getid3->info['ac3'];
  420.45 +        $info_ac3_raw     = &$info_ac3['raw'];
  420.46 +        $info_ac3_raw_bsi = &$info_ac3_raw['bsi'];
  420.47 +
  420.48 +
  420.49 +        // An AC-3 serial coded audio bit stream is made up of a sequence of synchronization frames
  420.50 +        // Each synchronization frame contains 6 coded audio blocks (AB), each of which represent 256
  420.51 +        // new audio samples per channel. A synchronization information (SI) header at the beginning
  420.52 +        // of each frame contains information needed to acquire and maintain synchronization. A
  420.53 +        // bit stream information (BSI) header follows SI, and contains parameters describing the coded
  420.54 +        // audio service. The coded audio blocks may be followed by an auxiliary data (Aux) field. At the
  420.55 +        // end of each frame is an error check field that includes a CRC word for error detection. An
  420.56 +        // additional CRC word is located in the SI header, the use of which, by a decoder, is optional.
  420.57 +        //
  420.58 +        // syncinfo() | bsi() | AB0 | AB1 | AB2 | AB3 | AB4 | AB5 | Aux | CRC
  420.59 +
  420.60 +        $this->fseek($getid3->info['avdataoffset'], SEEK_SET);
  420.61 +        $ac3_header['syncinfo'] = $this->fread(5);
  420.62 +        $info_ac3_raw['synchinfo']['synchword'] = substr($ac3_header['syncinfo'], 0, 2);
  420.63 +
  420.64 +        if ($info_ac3_raw['synchinfo']['synchword'] != "\x0B\x77") {
  420.65 +            throw new getid3_exception('Expecting "\x0B\x77" at offset '.$getid3->info['avdataoffset'].', found \x'.strtoupper(dechex($ac3_header['syncinfo']{0})).'\x'.strtoupper(dechex($ac3_header['syncinfo']{1})).' instead');
  420.66 +        } 
  420.67 +
  420.68 +
  420.69 +        // syncinfo() {
  420.70 +        //      syncword    16
  420.71 +        //      crc1        16
  420.72 +        //      fscod        2
  420.73 +        //      frmsizecod   6
  420.74 +        // } /* end of syncinfo */
  420.75 +
  420.76 +        $info_ac3_raw['synchinfo']['crc1']       = getid3_lib::LittleEndian2Int(substr($ac3_header['syncinfo'], 2, 2));
  420.77 +        $ac3_synchinfo_fscod_frmsizecod          = getid3_lib::LittleEndian2Int(substr($ac3_header['syncinfo'], 4, 1));
  420.78 +        $info_ac3_raw['synchinfo']['fscod']      = ($ac3_synchinfo_fscod_frmsizecod & 0xC0) >> 6;
  420.79 +        $info_ac3_raw['synchinfo']['frmsizecod'] = ($ac3_synchinfo_fscod_frmsizecod & 0x3F);
  420.80 +
  420.81 +        $info_ac3['sample_rate'] = getid3_ac3::AC3sampleRateCodeLookup($info_ac3_raw['synchinfo']['fscod']);
  420.82 +        if ($info_ac3_raw['synchinfo']['fscod'] <= 3) {
  420.83 +            $getid3->info['audio']['sample_rate'] = $info_ac3['sample_rate'];
  420.84 +        }
  420.85 +
  420.86 +        $info_ac3['frame_length'] = getid3_ac3::AC3frameSizeLookup($info_ac3_raw['synchinfo']['frmsizecod'], $info_ac3_raw['synchinfo']['fscod']);
  420.87 +        $info_ac3['bitrate']      = getid3_ac3::AC3bitrateLookup($info_ac3_raw['synchinfo']['frmsizecod']);
  420.88 +        $getid3->info['audio']['bitrate'] = $info_ac3['bitrate'];
  420.89 +
  420.90 +        $ac3_header['bsi'] = getid3_lib::BigEndian2Bin($this->fread(15));
  420.91 +
  420.92 +        $info_ac3_raw_bsi['bsid'] = bindec(substr($ac3_header['bsi'], 0, 5));
  420.93 +        if ($info_ac3_raw_bsi['bsid'] > 8) {
  420.94 +            // Decoders which can decode version 8 will thus be able to decode version numbers less than 8.
  420.95 +            // If this standard is extended by the addition of additional elements or features, a value of bsid greater than 8 will be used.
  420.96 +            // Decoders built to this version of the standard will not be able to decode versions with bsid greater than 8.
  420.97 +            throw new getid3_exception('Bit stream identification is version '.$info_ac3_raw_bsi['bsid'].', but getID3() only understands up to version 8');
  420.98 +        }
  420.99 +
 420.100 +        $info_ac3_raw_bsi['bsmod'] = bindec(substr($ac3_header['bsi'], 5, 3));
 420.101 +        $info_ac3_raw_bsi['acmod'] = bindec(substr($ac3_header['bsi'], 8, 3));
 420.102 +
 420.103 +        $info_ac3['service_type'] = getid3_ac3::AC3serviceTypeLookup($info_ac3_raw_bsi['bsmod'], $info_ac3_raw_bsi['acmod']);
 420.104 +        $ac3_coding_mode = getid3_ac3::AC3audioCodingModeLookup($info_ac3_raw_bsi['acmod']);
 420.105 +        foreach($ac3_coding_mode as $key => $value) {
 420.106 +            $info_ac3[$key] = $value;
 420.107 +        }
 420.108 +        switch ($info_ac3_raw_bsi['acmod']) {
 420.109 +            case 0:
 420.110 +            case 1:
 420.111 +                $getid3->info['audio']['channelmode'] = 'mono';
 420.112 +                break;
 420.113 +            case 3:
 420.114 +            case 4:
 420.115 +                $getid3->info['audio']['channelmode'] = 'stereo';
 420.116 +                break;
 420.117 +            default:
 420.118 +                $getid3->info['audio']['channelmode'] = 'surround';
 420.119 +                break;
 420.120 +        }
 420.121 +        $getid3->info['audio']['channels'] = $info_ac3['num_channels'];
 420.122 +        
 420.123 +        $offset = 11;
 420.124 +
 420.125 +        if ($info_ac3_raw_bsi['acmod'] & 0x01) {
 420.126 +            // If the lsb of acmod is a 1, center channel is in use and cmixlev follows in the bit stream.
 420.127 +            $info_ac3_raw_bsi['cmixlev'] = bindec(substr($ac3_header['bsi'], $offset, 2));
 420.128 +            $info_ac3['center_mix_level'] = getid3_ac3::AC3centerMixLevelLookup($info_ac3_raw_bsi['cmixlev']);
 420.129 +            $offset += 2;
 420.130 +        }
 420.131 +
 420.132 +        if ($info_ac3_raw_bsi['acmod'] & 0x04) {
 420.133 +            // If the msb of acmod is a 1, surround channels are in use and surmixlev follows in the bit stream.
 420.134 +            $info_ac3_raw_bsi['surmixlev'] = bindec(substr($ac3_header['bsi'], $offset, 2));
 420.135 +            $info_ac3['surround_mix_level'] = getid3_ac3::AC3surroundMixLevelLookup($info_ac3_raw_bsi['surmixlev']);
 420.136 +            $offset += 2;
 420.137 +        }
 420.138 +
 420.139 +        if ($info_ac3_raw_bsi['acmod'] == 0x02) {
 420.140 +            // When operating in the two channel mode, this 2-bit code indicates whether or not the program has been encoded in Dolby Surround.
 420.141 +            $info_ac3_raw_bsi['dsurmod'] = bindec(substr($ac3_header['bsi'], $offset, 2));
 420.142 +            $info_ac3['dolby_surround_mode'] = getid3_ac3::AC3dolbySurroundModeLookup($info_ac3_raw_bsi['dsurmod']);
 420.143 +            $offset += 2;
 420.144 +        }
 420.145 +
 420.146 +        $info_ac3_raw_bsi['lfeon'] = $ac3_header['bsi']{$offset++} == '1';
 420.147 +        $info_ac3['lfe_enabled'] = $info_ac3_raw_bsi['lfeon'];
 420.148 +        if ($info_ac3_raw_bsi['lfeon']) {
 420.149 +            $getid3->info['audio']['channels'] .= '.1';
 420.150 +        }
 420.151 +
 420.152 +        $info_ac3['channels_enabled'] = getid3_ac3::AC3channelsEnabledLookup($info_ac3_raw_bsi['acmod'], $info_ac3_raw_bsi['lfeon']);
 420.153 +
 420.154 +        // This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1–31.
 420.155 +        // The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent.
 420.156 +        $info_ac3_raw_bsi['dialnorm'] = bindec(substr($ac3_header['bsi'], $offset, 5));
 420.157 +        $offset += 5;
 420.158 +        $info_ac3['dialogue_normalization'] = '-'.$info_ac3_raw_bsi['dialnorm'].'dB';
 420.159 +
 420.160 +        $info_ac3_raw_bsi['compre_flag'] = $ac3_header['bsi']{$offset++} == '1';
 420.161 +        if ($info_ac3_raw_bsi['compre_flag']) {
 420.162 +            $info_ac3_raw_bsi['compr'] = bindec(substr($ac3_header['bsi'], $offset, 8));
 420.163 +            $offset += 8;
 420.164 +            
 420.165 +            $info_ac3['heavy_compression'] = getid3_ac3::AC3heavyCompression($info_ac3_raw_bsi['compr']);
 420.166 +        }
 420.167 +
 420.168 +        $info_ac3_raw_bsi['langcode_flag'] = $ac3_header['bsi']{$offset++} == '1';
 420.169 +        if ($info_ac3_raw_bsi['langcode_flag']) {
 420.170 +            $info_ac3_raw_bsi['langcod'] = bindec(substr($ac3_header['bsi'], $offset, 8));
 420.171 +            $offset += 8;
 420.172 +        }
 420.173 +
 420.174 +        $info_ac3_raw_bsi['audprodie'] = $ac3_header['bsi']{$offset++} == '1';
 420.175 +        if ($info_ac3_raw_bsi['audprodie']) {
 420.176 +            $info_ac3_raw_bsi['mixlevel'] = bindec(substr($ac3_header['bsi'], $offset, 5));
 420.177 +            $offset += 5;
 420.178 +            
 420.179 +            $info_ac3_raw_bsi['roomtyp']  = bindec(substr($ac3_header['bsi'], $offset, 2));
 420.180 +            $offset += 2;
 420.181 +
 420.182 +            $info_ac3['mixing_level'] = (80 + $info_ac3_raw_bsi['mixlevel']).'dB';
 420.183 +            $info_ac3['room_type']    = getid3_ac3::AC3roomTypeLookup($info_ac3_raw_bsi['roomtyp']);
 420.184 +        }
 420.185 +
 420.186 +        if ($info_ac3_raw_bsi['acmod'] == 0x00) {
 420.187 +            // If acmod is 0, then two completely independent program channels (dual mono)
 420.188 +            // are encoded into the bit stream, and are referenced as Ch1, Ch2. In this case,
 420.189 +            // a number of additional items are present in BSI or audblk to fully describe Ch2.
 420.190 +
 420.191 +
 420.192 +            // This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1–31.
 420.193 +            // The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent.
 420.194 +            $info_ac3_raw_bsi['dialnorm2'] = bindec(substr($ac3_header['bsi'], $offset, 5));
 420.195 +            $offset += 5;
 420.196 +            
 420.197 +            $info_ac3['dialogue_normalization2'] = '-'.$info_ac3_raw_bsi['dialnorm2'].'dB';
 420.198 +
 420.199 +            $info_ac3_raw_bsi['compre_flag2'] = $ac3_header['bsi']{$offset++} == '1';
 420.200 +            if ($info_ac3_raw_bsi['compre_flag2']) {
 420.201 +                $info_ac3_raw_bsi['compr2'] = bindec(substr($ac3_header['bsi'], $offset, 8));
 420.202 +                $offset += 8;
 420.203 +                
 420.204 +                $info_ac3['heavy_compression2'] = getid3_ac3::AC3heavyCompression($info_ac3_raw_bsi['compr2']);
 420.205 +            }
 420.206 +
 420.207 +            $info_ac3_raw_bsi['langcode_flag2'] = $ac3_header['bsi']{$offset++} == '1';
 420.208 +            if ($info_ac3_raw_bsi['langcode_flag2']) {
 420.209 +                $info_ac3_raw_bsi['langcod2'] = bindec(substr($ac3_header['bsi'], $offset, 8));
 420.210 +                $offset += 8;
 420.211 +            }
 420.212 +
 420.213 +            $info_ac3_raw_bsi['audprodie2'] = $ac3_header['bsi']{$offset++} == '1';
 420.214 +            if ($info_ac3_raw_bsi['audprodie2']) {
 420.215 +                $info_ac3_raw_bsi['mixlevel2'] = bindec(substr($ac3_header['bsi'], $offset, 5));
 420.216 +                $offset += 5;
 420.217 +                
 420.218 +                $info_ac3_raw_bsi['roomtyp2']  = bindec(substr($ac3_header['bsi'], $offset, 2));
 420.219 +                $offset += 2;
 420.220 +
 420.221 +                $info_ac3['mixing_level2'] = (80 + $info_ac3_raw_bsi['mixlevel2']).'dB';
 420.222 +                $info_ac3['room_type2']    = getid3_ac3::AC3roomTypeLookup($info_ac3_raw_bsi['roomtyp2']);
 420.223 +            }
 420.224 +
 420.225 +        }
 420.226 +
 420.227 +        $info_ac3_raw_bsi['copyright'] = $ac3_header['bsi']{$offset++} == '1';
 420.228 +
 420.229 +        $info_ac3_raw_bsi['original']  = $ac3_header['bsi']{$offset++} == '1';
 420.230 +
 420.231 +        $info_ac3_raw_bsi['timecode1_flag'] = $ac3_header['bsi']{$offset++} == '1';
 420.232 +        if ($info_ac3_raw_bsi['timecode1_flag']) {
 420.233 +            $info_ac3_raw_bsi['timecode1'] = bindec(substr($ac3_header['bsi'], $offset, 14));
 420.234 +            $offset += 14;
 420.235 +        }
 420.236 +
 420.237 +        $info_ac3_raw_bsi['timecode2_flag'] = $ac3_header['bsi']{$offset++} == '1';
 420.238 +        if ($info_ac3_raw_bsi['timecode2_flag']) {
 420.239 +            $info_ac3_raw_bsi['timecode2'] = bindec(substr($ac3_header['bsi'], $offset, 14));
 420.240 +            $offset += 14;
 420.241 +        }
 420.242 +
 420.243 +        $info_ac3_raw_bsi['addbsi_flag'] = $ac3_header['bsi']{$offset++} == '1';
 420.244 +        if ($info_ac3_raw_bsi['addbsi_flag']) {
 420.245 +            $info_ac3_raw_bsi['addbsi_length'] = bindec(substr($ac3_header['bsi'], $offset, 6));
 420.246 +            $offset += 6;
 420.247 +
 420.248 +            $ac3_header['bsi'] .= getid3_lib::BigEndian2Bin($this->fread($info_ac3_raw_bsi['addbsi_length']));
 420.249 +
 420.250 +            $info_ac3_raw_bsi['addbsi_data'] = substr($ac3_header['bsi'], 119, $info_ac3_raw_bsi['addbsi_length'] * 8);
 420.251 +        }
 420.252 +
 420.253 +        return true;
 420.254 +    }
 420.255 +
 420.256 +
 420.257 +
 420.258 +    public static function AC3sampleRateCodeLookup($fscod) {
 420.259 +
 420.260 +        static $lookup = array (
 420.261 +            0 => 48000,
 420.262 +            1 => 44100,
 420.263 +            2 => 32000,
 420.264 +            3 => 'reserved' // If the reserved code is indicated, the decoder should not attempt to decode audio and should mute.
 420.265 +        );
 420.266 +        return (isset($lookup[$fscod]) ? $lookup[$fscod] : false);
 420.267 +    }
 420.268 +
 420.269 +
 420.270 +
 420.271 +    public static function AC3serviceTypeLookup($bsmod, $acmod) {
 420.272 +
 420.273 +        static $lookup = array (
 420.274 +            0 => 'main audio service: complete main (CM)',
 420.275 +            1 => 'main audio service: music and effects (ME)',
 420.276 +            2 => 'associated service: visually impaired (VI)',
 420.277 +            3 => 'associated service: hearing impaired (HI)',
 420.278 +            4 => 'associated service: dialogue (D)',
 420.279 +            5 => 'associated service: commentary (C)',
 420.280 +            6 => 'associated service: emergency (E)',
 420.281 +            7 => 'main audio service: karaoke'
 420.282 +        );
 420.283 +        
 420.284 +        if ($bsmod == 7  &&  $acmod == 1) {
 420.285 +            return 'associated service: voice over (VO)';
 420.286 +        }
 420.287 +        
 420.288 +        return (isset($lookup[$bsmod]) ? $lookup[$bsmod] : false);
 420.289 +    }
 420.290 +
 420.291 +
 420.292 +
 420.293 +    public static function AC3audioCodingModeLookup($acmod) {
 420.294 +
 420.295 +        // array (channel configuration, # channels (not incl LFE), channel order)
 420.296 +        static $lookup = array (
 420.297 +            0 => array ('channel_config'=>'1+1', 'num_channels'=>2, 'channel_order'=>'Ch1,Ch2'),
 420.298 +            1 => array ('channel_config'=>'1/0', 'num_channels'=>1, 'channel_order'=>'C'),
 420.299 +            2 => array ('channel_config'=>'2/0', 'num_channels'=>2, 'channel_order'=>'L,R'),
 420.300 +            3 => array ('channel_config'=>'3/0', 'num_channels'=>3, 'channel_order'=>'L,C,R'),
 420.301 +            4 => array ('channel_config'=>'2/1', 'num_channels'=>3, 'channel_order'=>'L,R,S'),
 420.302 +            5 => array ('channel_config'=>'3/1', 'num_channels'=>4, 'channel_order'=>'L,C,R,S'),
 420.303 +            6 => array ('channel_config'=>'2/2', 'num_channels'=>4, 'channel_order'=>'L,R,SL,SR'),
 420.304 +            7 => array ('channel_config'=>'3/2', 'num_channels'=>5, 'channel_order'=>'L,C,R,SL,SR')
 420.305 +        );
 420.306 +        return (isset($lookup[$acmod]) ? $lookup[$acmod] : false);
 420.307 +    }
 420.308 +
 420.309 +
 420.310 +
 420.311 +    public static function AC3centerMixLevelLookup($cmixlev) {
 420.312 +        
 420.313 +        static $lookup;
 420.314 +        if (!@$lookup) {
 420.315 +            $lookup = array (
 420.316 +                0 => pow(2, -3.0 / 6), // 0.707 (–3.0 dB)
 420.317 +                1 => pow(2, -4.5 / 6), // 0.595 (–4.5 dB)
 420.318 +                2 => pow(2, -6.0 / 6), // 0.500 (–6.0 dB)
 420.319 +                3 => 'reserved'
 420.320 +            );
 420.321 +        }
 420.322 +        return (isset($lookup[$cmixlev]) ? $lookup[$cmixlev] : false);
 420.323 +    }
 420.324 +
 420.325 +
 420.326 +
 420.327 +    public static function AC3surroundMixLevelLookup($surmixlev) {
 420.328 +        
 420.329 +        static $lookup;
 420.330 +        if (!@$lookup) {
 420.331 +            $lookup = array (
 420.332 +                0 => pow(2, -3.0 / 6),
 420.333 +                1 => pow(2, -6.0 / 6),
 420.334 +                2 => 0,
 420.335 +                3 => 'reserved'
 420.336 +            );
 420.337 +        }
 420.338 +        return (isset($lookup[$surmixlev]) ? $lookup[$surmixlev] : false);
 420.339 +    }
 420.340 +
 420.341 +
 420.342 +
 420.343 +    public static function AC3dolbySurroundModeLookup($dsurmod) {
 420.344 +
 420.345 +        static $lookup = array (
 420.346 +            0 => 'not indicated',
 420.347 +            1 => 'Not Dolby Surround encoded',
 420.348 +            2 => 'Dolby Surround encoded',
 420.349 +            3 => 'reserved'
 420.350 +        );
 420.351 +        return (isset($lookup[$dsurmod]) ? $lookup[$dsurmod] : false);
 420.352 +    }
 420.353 +    
 420.354 +    
 420.355 +
 420.356 +    public static function AC3channelsEnabledLookup($acmod, $lfeon) {
 420.357 +        
 420.358 +        return array (
 420.359 +            'ch1'            => $acmod == 0,
 420.360 +            'ch2'            => $acmod == 0,
 420.361 +            'left'           => $acmod > 1,
 420.362 +            'right'          => $acmod > 1,
 420.363 +            'center'         => (bool)($acmod & 0x01),
 420.364 +            'surround_mono'  => $acmod == 4 || $acmod == 5,
 420.365 +            'surround_left'  => $acmod == 6 || $acmod == 7,
 420.366 +            'surround_right' => $acmod == 6 || $acmod == 7,
 420.367 +            'lfe'            => $lfeon
 420.368 +        );
 420.369 +    }
 420.370 +
 420.371 +
 420.372 +
 420.373 +    public static function AC3heavyCompression($compre) {
 420.374 +
 420.375 +        // The first four bits indicate gain changes in 6.02dB increments which can be
 420.376 +        // implemented with an arithmetic shift operation. The following four bits
 420.377 +        // indicate linear gain changes, and require a 5-bit multiply.
 420.378 +        // We will represent the two 4-bit fields of compr as follows:
 420.379 +        //   X0 X1 X2 X3 . Y4 Y5 Y6 Y7
 420.380 +        // The meaning of the X values is most simply described by considering X to represent a 4-bit
 420.381 +        // signed integer with values from –8 to +7. The gain indicated by X is then (X + 1) * 6.02 dB. The
 420.382 +        // following table shows this in detail.
 420.383 +
 420.384 +        // Meaning of 4 msb of compr
 420.385 +        //  7    +48.16 dB
 420.386 +        //  6    +42.14 dB
 420.387 +        //  5    +36.12 dB
 420.388 +        //  4    +30.10 dB
 420.389 +        //  3    +24.08 dB
 420.390 +        //  2    +18.06 dB
 420.391 +        //  1    +12.04 dB
 420.392 +        //  0     +6.02 dB
 420.393 +        // -1         0 dB
 420.394 +        // -2     –6.02 dB
 420.395 +        // -3    –12.04 dB
 420.396 +        // -4    –18.06 dB
 420.397 +        // -5    –24.08 dB
 420.398 +        // -6    –30.10 dB
 420.399 +        // -7    –36.12 dB
 420.400 +        // -8    –42.14 dB
 420.401 +
 420.402 +        $fourbit = str_pad(decbin(($compre & 0xF0) >> 4), 4, '0', STR_PAD_LEFT);
 420.403 +        if ($fourbit{0} == '1') {
 420.404 +            $log_gain = -8 + bindec(substr($fourbit, 1));
 420.405 +        } else {
 420.406 +            $log_gain = bindec(substr($fourbit, 1));
 420.407 +        }
 420.408 +        $log_gain = ($log_gain + 1) * (20 * log10(2));
 420.409 +
 420.410 +        // The value of Y is a linear representation of a gain change of up to –6 dB. Y is considered to
 420.411 +        // be an unsigned fractional integer, with a leading value of 1, or: 0.1 Y4 Y5 Y6 Y7 (base 2). Y can
 420.412 +        // represent values between 0.111112 (or 31/32) and 0.100002 (or 1/2). Thus, Y can represent gain
 420.413 +        // changes from –0.28 dB to –6.02 dB.
 420.414 +
 420.415 +        $lin_gain = (16 + ($compre & 0x0F)) / 32;
 420.416 +
 420.417 +        // The combination of X and Y values allows compr to indicate gain changes from
 420.418 +        //  48.16 – 0.28 = +47.89 dB, to
 420.419 +        // –42.14 – 6.02 = –48.16 dB.
 420.420 +
 420.421 +        return $log_gain - $lin_gain;
 420.422 +    }
 420.423 +
 420.424 +
 420.425 +
 420.426 +    public static function AC3roomTypeLookup($roomtyp) {
 420.427 +        
 420.428 +        static $lookup = array (
 420.429 +            0 => 'not indicated',
 420.430 +            1 => 'large room, X curve monitor',
 420.431 +            2 => 'small room, flat monitor',
 420.432 +            3 => 'reserved'
 420.433 +        );
 420.434 +        return (isset($lookup[$roomtyp]) ? $lookup[$roomtyp] : false);
 420.435 +    }
 420.436 +
 420.437 +
 420.438 +
 420.439 +    public static function AC3frameSizeLookup($frmsizecod, $fscod) {
 420.440 +        
 420.441 +        $padding     = (bool)($frmsizecod % 2);
 420.442 +        $frame_size_id =   floor($frmsizecod / 2);
 420.443 +
 420.444 +        static $lookup = array (
 420.445 +            0  => array (128, 138, 192),
 420.446 +            1  => array (40, 160, 174, 240),
 420.447 +            2  => array (48, 192, 208, 288),
 420.448 +            3  => array (56, 224, 242, 336),
 420.449 +            4  => array (64, 256, 278, 384),
 420.450 +            5  => array (80, 320, 348, 480),
 420.451 +            6  => array (96, 384, 416, 576),
 420.452 +            7  => array (112, 448, 486, 672),
 420.453 +            8  => array (128, 512, 556, 768),
 420.454 +            9  => array (160, 640, 696, 960),
 420.455 +            10 => array (192, 768, 834, 1152),
 420.456 +            11 => array (224, 896, 974, 1344),
 420.457 +            12 => array (256, 1024, 1114, 1536),
 420.458 +            13 => array (320, 1280, 1392, 1920),
 420.459 +            14 => array (384, 1536, 1670, 2304),
 420.460 +            15 => array (448, 1792, 1950, 2688),
 420.461 +            16 => array (512, 2048, 2228, 3072),
 420.462 +            17 => array (576, 2304, 2506, 3456),
 420.463 +            18 => array (640, 2560, 2786, 3840)
 420.464 +        );
 420.465 +        if (($fscod == 1) && $padding) {
 420.466 +            // frame lengths are padded by 1 word (16 bits) at 44100
 420.467 +            $lookup[$frmsizecod] += 2;
 420.468 +        }
 420.469 +        return (isset($lookup[$frame_size_id][$fscod]) ? $lookup[$frame_size_id][$fscod] : false);
 420.470 +    }
 420.471 +
 420.472 +
 420.473 +
 420.474 +    public static function AC3bitrateLookup($frmsizecod) {
 420.475 +        
 420.476 +        static $lookup = array (
 420.477 +            0  => 32000,
 420.478 +            1  => 40000,
 420.479 +            2  => 48000,
 420.480 +            3  => 56000,
 420.481 +            4  => 64000,
 420.482 +            5  => 80000,
 420.483 +            6  => 96000,
 420.484 +            7  => 112000,
 420.485 +            8  => 128000,
 420.486 +            9  => 160000,
 420.487 +            10 => 192000,
 420.488 +            11 => 224000,
 420.489 +            12 => 256000,
 420.490 +            13 => 320000,
 420.491 +            14 => 384000,
 420.492 +            15 => 448000,
 420.493 +            16 => 512000,
 420.494 +            17 => 576000,
 420.495 +            18 => 640000
 420.496 +        );
 420.497 +        $frame_size_id = floor($frmsizecod / 2);
 420.498 +        return (isset($lookup[$frame_size_id]) ? $lookup[$frame_size_id] : false);
 420.499 +    }
 420.500 +
 420.501 +}
 420.502 +
 420.503 +?>
 420.504 \ No newline at end of file
   421.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   421.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.au.php	Mon Feb 22 08:02:39 2010 -0500
   421.3 @@ -0,0 +1,184 @@
   421.4 +<?php
   421.5 +// +----------------------------------------------------------------------+
   421.6 +// | PHP version 5                                                        |
   421.7 +// +----------------------------------------------------------------------+
   421.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   421.9 +// +----------------------------------------------------------------------+
  421.10 +// | This source file is subject to version 2 of the GPL license,         |
  421.11 +// | that is bundled with this package in the file license.txt and is     |
  421.12 +// | available through the world-wide-web at the following url:           |
  421.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  421.14 +// +----------------------------------------------------------------------+
  421.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  421.16 +// +----------------------------------------------------------------------+
  421.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  421.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  421.19 +// +----------------------------------------------------------------------+
  421.20 +// | module.audio.au.php                                                  |
  421.21 +// | module for analyzing AU files                                        |
  421.22 +// | dependencies: NONE                                                   |
  421.23 +// +----------------------------------------------------------------------+
  421.24 +//
  421.25 +// $Id: module.audio.au.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  421.26 +
  421.27 +        
  421.28 +        
  421.29 +class getid3_au extends getid3_handler
  421.30 +{
  421.31 +
  421.32 +    public function Analyze() {
  421.33 +
  421.34 +        $getid3 = $this->getid3;
  421.35 +        
  421.36 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  421.37 +        $au_header  = fread($getid3->fp, 8);
  421.38 +
  421.39 +        // Magic bytes: .snd
  421.40 +
  421.41 +        $getid3->info['au'] = array ();
  421.42 +        $info_au = &$getid3->info['au'];
  421.43 +
  421.44 +        $getid3->info['fileformat']            = 'au';
  421.45 +        $getid3->info['audio']['dataformat']   = 'au';
  421.46 +        $getid3->info['audio']['bitrate_mode'] = 'cbr';
  421.47 +        $info_au['encoding']                   = 'ISO-8859-1';
  421.48 +
  421.49 +        $info_au['header_length']   = getid3_lib::BigEndian2Int(substr($au_header,  4, 4));
  421.50 +        $au_header .= fread($getid3->fp, $info_au['header_length'] - 8);
  421.51 +        $getid3->info['avdataoffset'] += $info_au['header_length'];
  421.52 +
  421.53 +        getid3_lib::ReadSequence('BigEndian2Int', $info_au, $au_header, 8,  
  421.54 +            array (
  421.55 +                'data_size'     => 4,
  421.56 +                'data_format_id'=> 4,
  421.57 +                'sample_rate'   => 4,
  421.58 +                'channels'      => 4
  421.59 +            )
  421.60 +        );
  421.61 +        $info_au['comments']['comment'][] = trim(substr($au_header, 24));
  421.62 +
  421.63 +        $info_au['data_format']          = getid3_au::AUdataFormatNameLookup($info_au['data_format_id']);
  421.64 +        $info_au['used_bits_per_sample'] = getid3_au::AUdataFormatUsedBitsPerSampleLookup($info_au['data_format_id']);
  421.65 +        if ($info_au['bits_per_sample']  = getid3_au::AUdataFormatBitsPerSampleLookup($info_au['data_format_id'])) {
  421.66 +            $getid3->info['audio']['bits_per_sample'] = $info_au['bits_per_sample'];
  421.67 +        } else {
  421.68 +            unset($info_au['bits_per_sample']);
  421.69 +        }
  421.70 +
  421.71 +        $getid3->info['audio']['sample_rate'] = $info_au['sample_rate'];
  421.72 +        $getid3->info['audio']['channels']    = $info_au['channels'];
  421.73 +
  421.74 +        if (($getid3->info['avdataoffset'] + $info_au['data_size']) > $getid3->info['avdataend']) {
  421.75 +            $getid3->warning('Possible truncated file - expecting "'.$info_au['data_size'].'" bytes of audio data, only found '.($getid3->info['avdataend'] - $getid3->info['avdataoffset']).' bytes"');
  421.76 +        }
  421.77 +
  421.78 +        $getid3->info['playtime_seconds'] = $info_au['data_size'] / ($info_au['sample_rate'] * $info_au['channels'] * ($info_au['used_bits_per_sample'] / 8));
  421.79 +        $getid3->info['audio']['bitrate'] = ($info_au['data_size'] * 8) / $getid3->info['playtime_seconds'];
  421.80 +
  421.81 +        return true;
  421.82 +    }
  421.83 +
  421.84 +
  421.85 +
  421.86 +    public static function AUdataFormatNameLookup($id) {
  421.87 +        
  421.88 +        static $lookup = array (
  421.89 +            0  => 'unspecified format',
  421.90 +            1  => '8-bit mu-law',
  421.91 +            2  => '8-bit linear',
  421.92 +            3  => '16-bit linear',
  421.93 +            4  => '24-bit linear',
  421.94 +            5  => '32-bit linear',
  421.95 +            6  => 'floating-point',
  421.96 +            7  => 'double-precision float',
  421.97 +            8  => 'fragmented sampled data',
  421.98 +            9  => 'SUN_FORMAT_NESTED',
  421.99 +            10 => 'DSP program',
 421.100 +            11 => '8-bit fixed-point',
 421.101 +            12 => '16-bit fixed-point',
 421.102 +            13 => '24-bit fixed-point',
 421.103 +            14 => '32-bit fixed-point',
 421.104 +
 421.105 +            16 => 'non-audio display data',
 421.106 +            17 => 'SND_FORMAT_MULAW_SQUELCH',
 421.107 +            18 => '16-bit linear with emphasis',
 421.108 +            19 => '16-bit linear with compression',
 421.109 +            20 => '16-bit linear with emphasis + compression',
 421.110 +            21 => 'Music Kit DSP commands',
 421.111 +            22 => 'SND_FORMAT_DSP_COMMANDS_SAMPLES',
 421.112 +            23 => 'CCITT g.721 4-bit ADPCM',
 421.113 +            24 => 'CCITT g.722 ADPCM',
 421.114 +            25 => 'CCITT g.723 3-bit ADPCM',
 421.115 +            26 => 'CCITT g.723 5-bit ADPCM',
 421.116 +            27 => 'A-Law 8-bit'
 421.117 +        );
 421.118 +        
 421.119 +        return (isset($lookup[$id]) ? $lookup[$id] : false);
 421.120 +    }
 421.121 +
 421.122 +
 421.123 +
 421.124 +    public static function AUdataFormatBitsPerSampleLookup($id) {
 421.125 +        
 421.126 +        static $lookup = array (
 421.127 +            1  => 8,
 421.128 +            2  => 8,
 421.129 +            3  => 16,
 421.130 +            4  => 24,
 421.131 +            5  => 32,
 421.132 +            6  => 32,
 421.133 +            7  => 64,
 421.134 +
 421.135 +            11 => 8,
 421.136 +            12 => 16,
 421.137 +            13 => 24,
 421.138 +            14 => 32,
 421.139 +
 421.140 +            18 => 16,
 421.141 +            19 => 16,
 421.142 +            20 => 16,
 421.143 +
 421.144 +            23 => 16,
 421.145 +
 421.146 +            25 => 16,
 421.147 +            26 => 16,
 421.148 +            27 => 8
 421.149 +        );
 421.150 +        return (isset($lookup[$id]) ? $lookup[$id] : false);
 421.151 +    }
 421.152 +
 421.153 +
 421.154 +
 421.155 +    public static function AUdataFormatUsedBitsPerSampleLookup($id) {
 421.156 +        
 421.157 +        static $lookup = array (
 421.158 +            1  => 8,
 421.159 +            2  => 8,
 421.160 +            3  => 16,
 421.161 +            4  => 24,
 421.162 +            5  => 32,
 421.163 +            6  => 32,
 421.164 +            7  => 64,
 421.165 +
 421.166 +            11 => 8,
 421.167 +            12 => 16,
 421.168 +            13 => 24,
 421.169 +            14 => 32,
 421.170 +
 421.171 +            18 => 16,
 421.172 +            19 => 16,
 421.173 +            20 => 16,
 421.174 +
 421.175 +            23 => 4,
 421.176 +
 421.177 +            25 => 3,
 421.178 +            26 => 5,
 421.179 +            27 => 8,
 421.180 +        );
 421.181 +        return (isset($lookup[$id]) ? $lookup[$id] : false);
 421.182 +    }
 421.183 +
 421.184 +}
 421.185 +
 421.186 +
 421.187 +?>
 421.188 \ No newline at end of file
   422.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   422.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.avr.php	Mon Feb 22 08:02:39 2010 -0500
   422.3 @@ -0,0 +1,135 @@
   422.4 +<?php
   422.5 +// +----------------------------------------------------------------------+
   422.6 +// | PHP version 5                                                        |
   422.7 +// +----------------------------------------------------------------------+
   422.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   422.9 +// +----------------------------------------------------------------------+
  422.10 +// | This source file is subject to version 2 of the GPL license,         |
  422.11 +// | that is bundled with this package in the file license.txt and is     |
  422.12 +// | available through the world-wide-web at the following url:           |
  422.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  422.14 +// +----------------------------------------------------------------------+
  422.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  422.16 +// +----------------------------------------------------------------------+
  422.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  422.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  422.19 +// +----------------------------------------------------------------------+
  422.20 +// | module.audio.avr.php                                                 |
  422.21 +// | Module for analyzing AVR audio files                                 |
  422.22 +// | dependencies: NONE                                                   |
  422.23 +// +----------------------------------------------------------------------+
  422.24 +//
  422.25 +// $Id: module.audio.avr.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  422.26 +
  422.27 +        
  422.28 +        
  422.29 +class getid3_avr extends getid3_handler
  422.30 +{
  422.31 +
  422.32 +    public function Analyze() {
  422.33 +
  422.34 +        $getid3 = $this->getid3;
  422.35 +        
  422.36 +        // http://cui.unige.ch/OSG/info/AudioFormats/ap11.html
  422.37 +        // http://www.btinternet.com/~AnthonyJ/Atari/programming/avr_format.html
  422.38 +        // offset    type    length    name        comments
  422.39 +        // ---------------------------------------------------------------------
  422.40 +        // 0    char    4    ID        format ID == "2BIT"
  422.41 +        // 4    char    8    name        sample name (unused space filled with 0)
  422.42 +        // 12    short    1    mono/stereo    0=mono, -1 (0xFFFF)=stereo
  422.43 +        //                     With stereo, samples are alternated,
  422.44 +        //                     the first voice is the left :
  422.45 +        //                     (LRLRLRLRLRLRLRLRLR...)
  422.46 +        // 14    short    1    resolution    8, 12 or 16 (bits)
  422.47 +        // 16    short    1    signed or not    0=unsigned, -1 (0xFFFF)=signed
  422.48 +        // 18    short    1    loop or not    0=no loop, -1 (0xFFFF)=loop on
  422.49 +        // 20    short    1    MIDI note    0xFFnn, where 0 <= nn <= 127
  422.50 +        //                     0xFFFF means "no MIDI note defined"
  422.51 +        // 22    byte    1    Replay speed    Frequence in the Replay software
  422.52 +        //                     0=5.485 Khz, 1=8.084 Khz, 2=10.971 Khz,
  422.53 +        //                     3=16.168 Khz, 4=21.942 Khz, 5=32.336 Khz
  422.54 +        //                     6=43.885 Khz, 7=47.261 Khz
  422.55 +        //                     -1 (0xFF)=no defined Frequence
  422.56 +        // 23    byte    3    sample rate    in Hertz
  422.57 +        // 26    long    1    size in bytes (2 * bytes in stereo)
  422.58 +        // 30    long    1    loop begin    0 for no loop
  422.59 +        // 34    long    1    loop size    equal to 'size' for no loop
  422.60 +        // 38  short   2   Reserved, MIDI keyboard split */
  422.61 +        // 40  short   2   Reserved, sample compression */
  422.62 +        // 42  short   2   Reserved */
  422.63 +        // 44  char   20;  Additional filename space, used if (name[7] != 0)
  422.64 +        // 64    byte    64    user data
  422.65 +        // 128    bytes    ?    sample data    (12 bits samples are coded on 16 bits:
  422.66 +        //                     0000 xxxx xxxx xxxx)
  422.67 +        // ---------------------------------------------------------------------
  422.68 +
  422.69 +        // Note that all values are in motorola (big-endian) format, and that long is
  422.70 +        // assumed to be 4 bytes, and short 2 bytes.
  422.71 +        // When reading the samples, you should handle both signed and unsigned data,
  422.72 +        // and be prepared to convert 16->8 bit, or mono->stereo if needed. To convert
  422.73 +        // 8-bit data between signed/unsigned just add 127 to the sample values.
  422.74 +        // Simularly for 16-bit data you should add 32769
  422.75 +
  422.76 +
  422.77 +        // Magic bytes: '2BIT'
  422.78 +
  422.79 +        $getid3->info['avr'] = array ();
  422.80 +        $info_avr = &$getid3->info['avr'];
  422.81 +        
  422.82 +        $getid3->info['fileformat'] = 'avr';
  422.83 +        $info_avr['raw']['magic']   = '2BIT';
  422.84 +
  422.85 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  422.86 +        $avr_header = fread($getid3->fp, 128);
  422.87 +
  422.88 +        $getid3->info['avdataoffset'] += 128;
  422.89 +
  422.90 +        $info_avr['sample_name']        = rtrim(substr($avr_header,  4,  8));
  422.91 +        
  422.92 +        $info_avr['raw']['mono']        = getid3_lib::BigEndian2Int(substr($avr_header, 12,  2));
  422.93 +        $info_avr['bits_per_sample']    = getid3_lib::BigEndian2Int(substr($avr_header, 14,  2));
  422.94 +        $info_avr['raw']['signed']      = getid3_lib::BigEndian2Int(substr($avr_header, 16,  2));
  422.95 +        $info_avr['raw']['loop']        = getid3_lib::BigEndian2Int(substr($avr_header, 18,  2));
  422.96 +        $info_avr['raw']['midi']        = getid3_lib::BigEndian2Int(substr($avr_header, 20,  2));
  422.97 +        $info_avr['raw']['replay_freq'] = getid3_lib::BigEndian2Int(substr($avr_header, 22,  1));
  422.98 +        $info_avr['sample_rate']        = getid3_lib::BigEndian2Int(substr($avr_header, 23,  3));
  422.99 +        $info_avr['sample_length']      = getid3_lib::BigEndian2Int(substr($avr_header, 26,  4));
 422.100 +        $info_avr['loop_start']         = getid3_lib::BigEndian2Int(substr($avr_header, 30,  4));
 422.101 +        $info_avr['loop_end']           = getid3_lib::BigEndian2Int(substr($avr_header, 34,  4));
 422.102 +        $info_avr['midi_split']         = getid3_lib::BigEndian2Int(substr($avr_header, 38,  2));
 422.103 +        $info_avr['sample_compression'] = getid3_lib::BigEndian2Int(substr($avr_header, 40,  2));
 422.104 +        $info_avr['reserved']           = getid3_lib::BigEndian2Int(substr($avr_header, 42,  2));
 422.105 +        $info_avr['sample_name_extra']  = rtrim(substr($avr_header, 44, 20));
 422.106 +        $info_avr['comment']            = rtrim(substr($avr_header, 64, 64));
 422.107 +
 422.108 +        $info_avr['flags']['stereo']    = (($info_avr['raw']['mono']   == 0) ? false : true);
 422.109 +        $info_avr['flags']['signed']    = (($info_avr['raw']['signed'] == 0) ? false : true);
 422.110 +        $info_avr['flags']['loop']      = (($info_avr['raw']['loop']   == 0) ? false : true);
 422.111 +
 422.112 +        $info_avr['midi_notes'] = array ();
 422.113 +        if (($info_avr['raw']['midi'] & 0xFF00) != 0xFF00) {
 422.114 +            $info_avr['midi_notes'][] = ($info_avr['raw']['midi'] & 0xFF00) >> 8;
 422.115 +        }
 422.116 +        if (($info_avr['raw']['midi'] & 0x00FF) != 0x00FF) {
 422.117 +            $info_avr['midi_notes'][] = ($info_avr['raw']['midi'] & 0x00FF);
 422.118 +        }
 422.119 +
 422.120 +        if (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) != ($info_avr['sample_length'] * (($info_avr['bits_per_sample'] == 8) ? 1 : 2))) {
 422.121 +            $getid3->warning('Probable truncated file: expecting '.($info_avr['sample_length'] * (($info_avr['bits_per_sample'] == 8) ? 1 : 2)).' bytes of audio data, found '.($getid3->info['avdataend'] - $getid3->info['avdataoffset']));
 422.122 +        }
 422.123 +
 422.124 +        $getid3->info['audio']['dataformat']      = 'avr';
 422.125 +        $getid3->info['audio']['lossless']        = true;
 422.126 +        $getid3->info['audio']['bitrate_mode']    = 'cbr';
 422.127 +        $getid3->info['audio']['bits_per_sample'] = $info_avr['bits_per_sample'];
 422.128 +        $getid3->info['audio']['sample_rate']     = $info_avr['sample_rate'];
 422.129 +        $getid3->info['audio']['channels']        = ($info_avr['flags']['stereo'] ? 2 : 1);
 422.130 +        $getid3->info['playtime_seconds']         = ($info_avr['sample_length'] / $getid3->info['audio']['channels']) / $info_avr['sample_rate'];
 422.131 +        $getid3->info['audio']['bitrate']         = ($info_avr['sample_length'] * (($info_avr['bits_per_sample'] == 8) ? 8 : 16)) / $getid3->info['playtime_seconds'];
 422.132 +
 422.133 +        return true;
 422.134 +    }
 422.135 +}
 422.136 +
 422.137 +
 422.138 +?>
 422.139 \ No newline at end of file
   423.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   423.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.bonk.php	Mon Feb 22 08:02:39 2010 -0500
   423.3 @@ -0,0 +1,235 @@
   423.4 +<?php
   423.5 +// +----------------------------------------------------------------------+
   423.6 +// | PHP version 5                                                        |
   423.7 +// +----------------------------------------------------------------------+
   423.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   423.9 +// +----------------------------------------------------------------------+
  423.10 +// | This source file is subject to version 2 of the GPL license,         |
  423.11 +// | that is bundled with this package in the file license.txt and is     |
  423.12 +// | available through the world-wide-web at the following url:           |
  423.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  423.14 +// +----------------------------------------------------------------------+
  423.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  423.16 +// +----------------------------------------------------------------------+
  423.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  423.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  423.19 +// +----------------------------------------------------------------------+
  423.20 +// | module.audio.bonk.php                                                |
  423.21 +// | Module for analyzing BONK audio files                                |
  423.22 +// | dependencies: module.tag.id3v2.php (optional)                        |
  423.23 +// +----------------------------------------------------------------------+
  423.24 +//
  423.25 +// $Id: module.audio.bonk.php,v 1.3 2006/11/02 10:48:01 ah Exp $
  423.26 +
  423.27 +        
  423.28 +        
  423.29 +class getid3_bonk extends getid3_handler
  423.30 +{
  423.31 +
  423.32 +    public function Analyze() {
  423.33 +
  423.34 +        $getid3 = $this->getid3;
  423.35 +        
  423.36 +        $getid3->info['bonk'] = array ();
  423.37 +        $info_bonk = &$getid3->info['bonk'];
  423.38 +
  423.39 +        $info_bonk['dataoffset'] = $getid3->info['avdataoffset'];
  423.40 +        $info_bonk['dataend']    = $getid3->info['avdataend'];
  423.41 +
  423.42 +        
  423.43 +        // Scan-from-end method, for v0.6 and higher
  423.44 +        fseek($getid3->fp, $info_bonk['dataend'] - 8, SEEK_SET);
  423.45 +        $possible_bonk_tag = fread($getid3->fp, 8);
  423.46 +        while (getid3_bonk::BonkIsValidTagName(substr($possible_bonk_tag, 4, 4), true)) {
  423.47 +            $bonk_tag_size = getid3_lib::LittleEndian2Int(substr($possible_bonk_tag, 0, 4));
  423.48 +            fseek($getid3->fp, 0 - $bonk_tag_size, SEEK_CUR);
  423.49 +            $bonk_tag_offset = ftell($getid3->fp);
  423.50 +            $tag_header_test = fread($getid3->fp, 5);
  423.51 +            if (($tag_header_test{0} != "\x00") || (substr($possible_bonk_tag, 4, 4) != strtolower(substr($possible_bonk_tag, 4, 4)))) {
  423.52 +                throw new getid3_exception('Expecting "Ø'.strtoupper(substr($possible_bonk_tag, 4, 4)).'" at offset '.$bonk_tag_offset.', found "'.$tag_header_test.'"');
  423.53 +            }
  423.54 +            $bonk_tag_name = substr($tag_header_test, 1, 4);
  423.55 +
  423.56 +            $info_bonk[$bonk_tag_name]['size']   = $bonk_tag_size;
  423.57 +            $info_bonk[$bonk_tag_name]['offset'] = $bonk_tag_offset;
  423.58 +            $this->HandleBonkTags($bonk_tag_name);
  423.59 +            
  423.60 +            $next_tag_end_offset = $bonk_tag_offset - 8;
  423.61 +            if ($next_tag_end_offset < $info_bonk['dataoffset']) {
  423.62 +                if (empty($getid3->info['audio']['encoder'])) {
  423.63 +                    $getid3->info['audio']['encoder'] = 'Extended BONK v0.9+';
  423.64 +                }
  423.65 +                return true;
  423.66 +            }
  423.67 +            fseek($getid3->fp, $next_tag_end_offset, SEEK_SET);
  423.68 +            $possible_bonk_tag = fread($getid3->fp, 8);
  423.69 +        }
  423.70 +
  423.71 +        // Seek-from-beginning method for v0.4 and v0.5
  423.72 +        if (empty($info_bonk['BONK'])) {
  423.73 +            fseek($getid3->fp, $info_bonk['dataoffset'], SEEK_SET);
  423.74 +            do {
  423.75 +                $tag_header_test = fread($getid3->fp, 5);
  423.76 +                switch ($tag_header_test) {
  423.77 +                    case "\x00".'BONK':
  423.78 +                        if (empty($getid3->info['audio']['encoder'])) {
  423.79 +                            $getid3->info['audio']['encoder'] = 'BONK v0.4';
  423.80 +                        }
  423.81 +                        break;
  423.82 +
  423.83 +                    case "\x00".'INFO':
  423.84 +                        $getid3->info['audio']['encoder'] = 'Extended BONK v0.5';
  423.85 +                        break;
  423.86 +
  423.87 +                    default:
  423.88 +                        break 2;
  423.89 +                }
  423.90 +                $bonk_tag_name = substr($tag_header_test, 1, 4);
  423.91 +                $info_bonk[$bonk_tag_name]['size']   = $info_bonk['dataend'] - $info_bonk['dataoffset'];
  423.92 +                $info_bonk[$bonk_tag_name]['offset'] = $info_bonk['dataoffset'];
  423.93 +                $this->HandleBonkTags($bonk_tag_name);
  423.94 +
  423.95 +            } while (true);
  423.96 +        }
  423.97 +
  423.98 +
  423.99 +        // Parse META block for v0.6 - v0.8
 423.100 +        if (!@$info_bonk['INFO'] && isset($info_bonk['META']['tags']['info'])) {
 423.101 +            fseek($getid3->fp, $info_bonk['META']['tags']['info'], SEEK_SET);
 423.102 +            $tag_header_test = fread($getid3->fp, 5);
 423.103 +            if ($tag_header_test == "\x00".'INFO') {
 423.104 +                $getid3->info['audio']['encoder'] = 'Extended BONK v0.6 - v0.8';
 423.105 +
 423.106 +                $bonk_tag_name = substr($tag_header_test, 1, 4);
 423.107 +                $info_bonk[$bonk_tag_name]['size']   = $info_bonk['dataend'] - $info_bonk['dataoffset'];
 423.108 +                $info_bonk[$bonk_tag_name]['offset'] = $info_bonk['dataoffset'];
 423.109 +                $this->HandleBonkTags($bonk_tag_name);
 423.110 +            }
 423.111 +        }
 423.112 +
 423.113 +        if (empty($getid3->info['audio']['encoder'])) {
 423.114 +            $getid3->info['audio']['encoder'] = 'Extended BONK v0.9+';
 423.115 +        }
 423.116 +        if (empty($info_bonk['BONK'])) {
 423.117 +            unset($getid3->info['bonk']);
 423.118 +        }
 423.119 +        return true;
 423.120 +
 423.121 +    }
 423.122 +
 423.123 +
 423.124 +    
 423.125 +    private function HandleBonkTags(&$bonk_tag_name) {
 423.126 +
 423.127 +        // Shortcut to getid3 pointer
 423.128 +        $getid3 = $this->getid3;
 423.129 +        $info_audio = &$getid3->info['audio'];
 423.130 +
 423.131 +        switch ($bonk_tag_name) {
 423.132 +            
 423.133 +            case 'BONK':
 423.134 +                // shortcut
 423.135 +                $info_bonk_BONK = &$getid3->info['bonk']['BONK'];
 423.136 +
 423.137 +                $bonk_data = "\x00".'BONK'.fread($getid3->fp, 17);
 423.138 +                
 423.139 +                getid3_lib::ReadSequence('LittleEndian2Int', $info_bonk_BONK, $bonk_data, 5, 
 423.140 +                    array (
 423.141 +                        'version'            => 1,
 423.142 +                        'number_samples'     => 4,
 423.143 +                        'sample_rate'        => 4,
 423.144 +                        'channels'           => 1,
 423.145 +                        'lossless'           => 1,
 423.146 +                        'joint_stereo'       => 1,
 423.147 +                        'number_taps'        => 2,
 423.148 +                        'downsampling_ratio' => 1,
 423.149 +                        'samples_per_packet' => 2
 423.150 +                    )
 423.151 +                );
 423.152 +                
 423.153 +                $info_bonk_BONK['lossless']     = (bool)$info_bonk_BONK['lossless'];
 423.154 +                $info_bonk_BONK['joint_stereo'] = (bool)$info_bonk_BONK['joint_stereo'];
 423.155 +
 423.156 +                $getid3->info['avdataoffset']   = $info_bonk_BONK['offset'] + 5 + 17;
 423.157 +                $getid3->info['avdataend']      = $info_bonk_BONK['offset'] + $info_bonk_BONK['size'];
 423.158 +
 423.159 +                $getid3->info['fileformat']     = 'bonk';
 423.160 +                $info_audio['dataformat']       = 'bonk';
 423.161 +                $info_audio['bitrate_mode']     = 'vbr'; // assumed
 423.162 +                $info_audio['channels']         = $info_bonk_BONK['channels'];
 423.163 +                $info_audio['sample_rate']      = $info_bonk_BONK['sample_rate'];
 423.164 +                $info_audio['channelmode']      = $info_bonk_BONK['joint_stereo'] ? 'joint stereo' : 'stereo';
 423.165 +                $info_audio['lossless']         = $info_bonk_BONK['lossless'];
 423.166 +                $info_audio['codec']            = 'bonk';
 423.167 +
 423.168 +                $getid3->info['playtime_seconds'] = $info_bonk_BONK['number_samples'] / ($info_bonk_BONK['sample_rate'] * $info_bonk_BONK['channels']);
 423.169 +                if ($getid3->info['playtime_seconds'] > 0) {
 423.170 +                    $info_audio['bitrate'] = (($getid3->info['bonk']['dataend'] - $getid3->info['bonk']['dataoffset']) * 8) / $getid3->info['playtime_seconds'];
 423.171 +                }
 423.172 +                break;
 423.173 +
 423.174 +            case 'INFO':
 423.175 +                // shortcut
 423.176 +                $info_bonk_INFO = &$getid3->info['bonk']['INFO'];
 423.177 +
 423.178 +                $info_bonk_INFO['version'] = getid3_lib::LittleEndian2Int(fread($getid3->fp, 1));
 423.179 +                $info_bonk_INFO['entries_count'] = 0;
 423.180 +                $next_info_data_pair = fread($getid3->fp, 5);
 423.181 +                if (!getid3_bonk::BonkIsValidTagName(substr($next_info_data_pair, 1, 4))) {
 423.182 +                    while (!feof($getid3->fp)) {
 423.183 +                        $next_info_data_pair = fread($getid3->fp, 5);
 423.184 +                        if (getid3_bonk::BonkIsValidTagName(substr($next_info_data_pair, 1, 4))) {
 423.185 +                            fseek($getid3->fp, -5, SEEK_CUR);
 423.186 +                            break;
 423.187 +                        }
 423.188 +                        $info_bonk_INFO['entries_count']++;
 423.189 +                    }
 423.190 +                }
 423.191 +                break;
 423.192 +
 423.193 +            case 'META':
 423.194 +                $bonk_data = "\x00".'META'.fread($getid3->fp, $getid3->info['bonk']['META']['size'] - 5);
 423.195 +                $getid3->info['bonk']['META']['version'] = getid3_lib::LittleEndian2Int(substr($bonk_data,  5, 1));
 423.196 +
 423.197 +                $meta_tag_entries = floor(((strlen($bonk_data) - 8) - 6) / 8); // BonkData - xxxxmeta - ØMETA
 423.198 +                $offset = 6;
 423.199 +                for ($i = 0; $i < $meta_tag_entries; $i++) {
 423.200 +                    $meta_entry_tag_name   = substr($bonk_data, $offset, 4);
 423.201 +                    $offset += 4;
 423.202 +                    $meta_entry_tag_offset = getid3_lib::LittleEndian2Int(substr($bonk_data, $offset, 4));
 423.203 +                    $offset += 4;
 423.204 +                    $getid3->info['bonk']['META']['tags'][$meta_entry_tag_name] = $meta_entry_tag_offset;
 423.205 +                }
 423.206 +                break;
 423.207 +
 423.208 +            case ' ID3':
 423.209 +                $info_audio['encoder'] = 'Extended BONK v0.9+';
 423.210 +
 423.211 +                // ID3v2 checking is optional
 423.212 +                if (class_exists('getid3_id3v2')) {
 423.213 +                    
 423.214 +                    $id3v2 = new getid3_id3v2($getid3);
 423.215 +                    $id3v2->option_starting_offset = $getid3->info['bonk'][' ID3']['offset'] + 2;
 423.216 +                    $getid3->info['bonk'][' ID3']['valid'] = $id3v2->Analyze();
 423.217 +                }
 423.218 +                break;
 423.219 +
 423.220 +            default:
 423.221 +                $getid3->warning('Unexpected Bonk tag "'.$bonk_tag_name.'" at offset '.$getid3->info['bonk'][$bonk_tag_name]['offset']);
 423.222 +                break;
 423.223 +
 423.224 +        }
 423.225 +    }
 423.226 +
 423.227 +
 423.228 +    
 423.229 +    public static function BonkIsValidTagName($possible_bonk_tag, $ignore_case=false) {
 423.230 +                                                                              
 423.231 +        $ignore_case = $ignore_case ? 'i' : '';                                                                              
 423.232 +        return preg_match('/^(BONK|INFO| ID3|META)$/'.$ignore_case, $possible_bonk_tag);
 423.233 +    }
 423.234 +
 423.235 +}
 423.236 +
 423.237 +
 423.238 +?>
 423.239 \ No newline at end of file
   424.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   424.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.dts.php	Mon Feb 22 08:02:39 2010 -0500
   424.3 @@ -0,0 +1,254 @@
   424.4 +<?php
   424.5 +// +----------------------------------------------------------------------+
   424.6 +// | PHP version 5                                                        |
   424.7 +// +----------------------------------------------------------------------+
   424.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   424.9 +// +----------------------------------------------------------------------+
  424.10 +// | This source file is subject to version 2 of the GPL license,         |
  424.11 +// | that is bundled with this package in the file license.txt and is     |
  424.12 +// | available through the world-wide-web at the following url:           |
  424.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  424.14 +// +----------------------------------------------------------------------+
  424.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  424.16 +// +----------------------------------------------------------------------+
  424.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  424.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  424.19 +// +----------------------------------------------------------------------+
  424.20 +// | module.audio.dts.php                                                 |
  424.21 +// | Module for analyzing DTS audio files                                 |
  424.22 +// | dependencies: NONE                                                   |
  424.23 +// +----------------------------------------------------------------------+
  424.24 +//
  424.25 +// $Id: module.audio.dts.php,v 1.2 2006/11/16 13:14:26 ah Exp $
  424.26 +
  424.27 +        
  424.28 +        
  424.29 +// Specs taken from "DTS Coherent Acoustics;Core and Extensions,  ETSI TS 102 114 V1.2.1 (2002-12)"
  424.30 +// (http://pda.etsi.org/pda/queryform.asp)
  424.31 +// With thanks to Gambit <macteam@users.sourceforge.net> http://mac.sourceforge.net/atl/
  424.32 +        
  424.33 +class getid3_dts extends getid3_handler
  424.34 +{
  424.35 +
  424.36 +    public function Analyze() {
  424.37 +        
  424.38 +        $getid3 = $this->getid3;
  424.39 +        
  424.40 +        $getid3->info['dts'] = array ();
  424.41 +        $info_dts = &$getid3->info['dts'];
  424.42 +
  424.43 +        $getid3->info['fileformat'] = 'dts';
  424.44 +
  424.45 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  424.46 +        $header = fread($getid3->fp, 16);
  424.47 +
  424.48 +        $fhBS = getid3_lib::BigEndian2Bin(substr($header, 4, 12));
  424.49 +        $bs_offset = 0;
  424.50 +        $info_dts['raw']['frame_type']             =        bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.51 +        $info_dts['raw']['deficit_samples']        =        bindec(substr($fhBS, $bs_offset,  5)); $bs_offset +=  5;
  424.52 +        $info_dts['flags']['crc_present']          = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.53 +        $info_dts['raw']['pcm_sample_blocks']      =        bindec(substr($fhBS, $bs_offset,  7)); $bs_offset +=  7;
  424.54 +        $info_dts['raw']['frame_byte_size']        =        bindec(substr($fhBS, $bs_offset, 14)); $bs_offset += 14;
  424.55 +        $info_dts['raw']['channel_arrangement']    =        bindec(substr($fhBS, $bs_offset,  6)); $bs_offset +=  6;
  424.56 +        $info_dts['raw']['sample_frequency']       =        bindec(substr($fhBS, $bs_offset,  4)); $bs_offset +=  4;
  424.57 +        $info_dts['raw']['bitrate']                =        bindec(substr($fhBS, $bs_offset,  5)); $bs_offset +=  5;
  424.58 +        $info_dts['flags']['embedded_downmix']     = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.59 +        $info_dts['flags']['dynamicrange']         = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.60 +        $info_dts['flags']['timestamp']            = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.61 +        $info_dts['flags']['auxdata']              = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.62 +        $info_dts['flags']['hdcd']                 = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.63 +        $info_dts['raw']['extension_audio']        =        bindec(substr($fhBS, $bs_offset,  3)); $bs_offset +=  3;
  424.64 +        $info_dts['flags']['extended_coding']      = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.65 +        $info_dts['flags']['audio_sync_insertion'] = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.66 +        $info_dts['raw']['lfe_effects']            =        bindec(substr($fhBS, $bs_offset,  2)); $bs_offset +=  2;
  424.67 +        $info_dts['flags']['predictor_history']    = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.68 +        if ($info_dts['flags']['crc_present']) {
  424.69 +            $info_dts['raw']['crc16']              =        bindec(substr($fhBS, $bs_offset, 16)); $bs_offset += 16;
  424.70 +        }
  424.71 +        $info_dts['flags']['mri_perfect_reconst']  = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.72 +        $info_dts['raw']['encoder_soft_version']   =        bindec(substr($fhBS, $bs_offset,  4)); $bs_offset +=  4;
  424.73 +        $info_dts['raw']['copy_history']           =        bindec(substr($fhBS, $bs_offset,  2)); $bs_offset +=  2;
  424.74 +        $info_dts['raw']['bits_per_sample']        =        bindec(substr($fhBS, $bs_offset,  2)); $bs_offset +=  2;
  424.75 +        $info_dts['flags']['surround_es']          = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.76 +        $info_dts['flags']['front_sum_diff']       = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.77 +        $info_dts['flags']['surround_sum_diff']    = (bool) bindec(substr($fhBS, $bs_offset,  1)); $bs_offset +=  1;
  424.78 +        $info_dts['raw']['dialog_normalization']   =        bindec(substr($fhBS, $bs_offset,  4)); $bs_offset +=  4;
  424.79 +
  424.80 +
  424.81 +        $info_dts['bitrate']              = $this->DTSbitrateLookup($info_dts['raw']['bitrate']);
  424.82 +        $info_dts['bits_per_sample']      = $this->DTSbitPerSampleLookup($info_dts['raw']['bits_per_sample']);
  424.83 +        $info_dts['sample_rate']          = $this->DTSsampleRateLookup($info_dts['raw']['sample_frequency']);
  424.84 +        $info_dts['dialog_normalization'] = $this->DTSdialogNormalization($info_dts['raw']['dialog_normalization'], $info_dts['raw']['encoder_soft_version']);
  424.85 +        $info_dts['flags']['lossless']    = (($info_dts['raw']['bitrate'] == 31) ? true  : false);
  424.86 +        $info_dts['bitrate_mode']         = (($info_dts['raw']['bitrate'] == 30) ? 'vbr' : 'cbr');
  424.87 +        $info_dts['channels']             = $this->DTSnumChannelsLookup($info_dts['raw']['channel_arrangement']);
  424.88 +        $info_dts['channel_arrangement']  = $this->DTSchannelArrangementLookup($info_dts['raw']['channel_arrangement']);
  424.89 +
  424.90 +        $getid3->info['audio']['dataformat']      = 'dts';
  424.91 +        $getid3->info['audio']['lossless']        = $info_dts['flags']['lossless'];
  424.92 +        $getid3->info['audio']['bitrate_mode']    = $info_dts['bitrate_mode'];
  424.93 +        $getid3->info['audio']['bits_per_sample'] = $info_dts['bits_per_sample'];
  424.94 +        $getid3->info['audio']['sample_rate']     = $info_dts['sample_rate'];
  424.95 +        $getid3->info['audio']['channels']        = $info_dts['channels'];
  424.96 +        $getid3->info['audio']['bitrate']         = $info_dts['bitrate'];
  424.97 +        $getid3->info['playtime_seconds']         = ($getid3->info['avdataend'] - $getid3->info['avdataoffset']) / ($info_dts['bitrate'] / 8);
  424.98 +
  424.99 +        return true;
 424.100 +    }
 424.101 +
 424.102 +
 424.103 +    public static function DTSbitrateLookup($index) {
 424.104 +        
 424.105 +        static $lookup = array (
 424.106 +            0  => 32000,
 424.107 +            1  => 56000,
 424.108 +            2  => 64000,
 424.109 +            3  => 96000,
 424.110 +            4  => 112000,
 424.111 +            5  => 128000,
 424.112 +            6  => 192000,
 424.113 +            7  => 224000,
 424.114 +            8  => 256000,
 424.115 +            9  => 320000,
 424.116 +            10 => 384000,
 424.117 +            11 => 448000,
 424.118 +            12 => 512000,
 424.119 +            13 => 576000,
 424.120 +            14 => 640000,
 424.121 +            15 => 768000,
 424.122 +            16 => 960000,
 424.123 +            17 => 1024000,
 424.124 +            18 => 1152000,
 424.125 +            19 => 1280000,
 424.126 +            20 => 1344000,
 424.127 +            21 => 1408000,
 424.128 +            22 => 1411200,
 424.129 +            23 => 1472000,
 424.130 +            24 => 1536000,
 424.131 +            25 => 1920000,
 424.132 +            26 => 2048000,
 424.133 +            27 => 3072000,
 424.134 +            28 => 3840000,
 424.135 +            29 => 'open',
 424.136 +            30 => 'variable',
 424.137 +            31 => 'lossless'
 424.138 +        );
 424.139 +        return @$lookup[$index];
 424.140 +    }
 424.141 +
 424.142 +    
 424.143 +    public static function DTSsampleRateLookup($index) {
 424.144 +        
 424.145 +        static $lookup = array (
 424.146 +            0  => 'invalid',
 424.147 +            1  => 8000,
 424.148 +            2  => 16000,
 424.149 +            3  => 32000,
 424.150 +            4  => 'invalid',
 424.151 +            5  => 'invalid',
 424.152 +            6  => 11025,
 424.153 +            7  => 22050,
 424.154 +            8  => 44100,
 424.155 +            9  => 'invalid',
 424.156 +            10 => 'invalid',
 424.157 +            11 => 12000,
 424.158 +            12 => 24000,
 424.159 +            13 => 48000,
 424.160 +            14 => 'invalid',
 424.161 +            15 => 'invalid'
 424.162 +        );
 424.163 +        return @$lookup[$index];
 424.164 +    }
 424.165 +
 424.166 +    
 424.167 +    public static function DTSbitPerSampleLookup($index) {
 424.168 +        
 424.169 +        static $lookup = array (
 424.170 +            0  => 16,
 424.171 +            1  => 20,
 424.172 +            2  => 24,
 424.173 +            3  => 24,
 424.174 +        );
 424.175 +        return @$lookup[$index];
 424.176 +    }
 424.177 +
 424.178 +    
 424.179 +    public static function DTSnumChannelsLookup($index) {
 424.180 +        
 424.181 +        switch ($index) {
 424.182 +            case 0:
 424.183 +                return 1;
 424.184 +                
 424.185 +            case 1:
 424.186 +            case 2:
 424.187 +            case 3:
 424.188 +            case 4:
 424.189 +                return 2;
 424.190 +                
 424.191 +            case 5:
 424.192 +            case 6:
 424.193 +                return 3;
 424.194 +                
 424.195 +            case 7:
 424.196 +            case 8:
 424.197 +                return 4;
 424.198 +                
 424.199 +            case 9:
 424.200 +                return 5;
 424.201 +                
 424.202 +            case 10:
 424.203 +            case 11:
 424.204 +            case 12:
 424.205 +                return 6;
 424.206 +                
 424.207 +            case 13:
 424.208 +                return 7;
 424.209 +                
 424.210 +            case 14:
 424.211 +            case 15:
 424.212 +                return 8;
 424.213 +        }
 424.214 +        return false;
 424.215 +    }
 424.216 +
 424.217 +    
 424.218 +    public static function DTSchannelArrangementLookup($index) {
 424.219 +        
 424.220 +        static $lookup = array (
 424.221 +            0  => 'A',
 424.222 +            1  => 'A + B (dual mono)',
 424.223 +            2  => 'L + R (stereo)',
 424.224 +            3  => '(L+R) + (L-R) (sum-difference)',
 424.225 +            4  => 'LT + RT (left and right total)',
 424.226 +            5  => 'C + L + R',
 424.227 +            6  => 'L + R + S',
 424.228 +            7  => 'C + L + R + S',
 424.229 +            8  => 'L + R + SL + SR',
 424.230 +            9  => 'C + L + R + SL + SR',
 424.231 +            10 => 'CL + CR + L + R + SL + SR',
 424.232 +            11 => 'C + L + R+ LR + RR + OV',
 424.233 +            12 => 'CF + CR + LF + RF + LR + RR',
 424.234 +            13 => 'CL + C + CR + L + R + SL + SR',
 424.235 +            14 => 'CL + CR + L + R + SL1 + SL2 + SR1 + SR2',
 424.236 +            15 => 'CL + C+ CR + L + R + SL + S + SR',
 424.237 +        );
 424.238 +        return (@$lookup[$index] ? @$lookup[$index] : 'user-defined');
 424.239 +    }
 424.240 +
 424.241 +    
 424.242 +    public static function DTSdialogNormalization($index, $version) {
 424.243 +        
 424.244 +        switch ($version) {
 424.245 +            case 7:
 424.246 +                return 0 - $index;
 424.247 +                
 424.248 +            case 6:
 424.249 +                return 0 - 16 - $index;
 424.250 +        }
 424.251 +        return false;
 424.252 +    }
 424.253 +
 424.254 +}
 424.255 +
 424.256 +
 424.257 +?>
 424.258 \ No newline at end of file
   425.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   425.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.la.php	Mon Feb 22 08:02:39 2010 -0500
   425.3 @@ -0,0 +1,196 @@
   425.4 +<?php
   425.5 +// +----------------------------------------------------------------------+
   425.6 +// | PHP version 5                                                        |
   425.7 +// +----------------------------------------------------------------------+
   425.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   425.9 +// +----------------------------------------------------------------------+
  425.10 +// | This source file is subject to version 2 of the GPL license,         |
  425.11 +// | that is bundled with this package in the file license.txt and is     |
  425.12 +// | available through the world-wide-web at the following url:           |
  425.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  425.14 +// +----------------------------------------------------------------------+
  425.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  425.16 +// +----------------------------------------------------------------------+
  425.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  425.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  425.19 +// +----------------------------------------------------------------------+
  425.20 +// | module.audio.la.php                                                  |
  425.21 +// | Module for analyzing LA udio files                                   |
  425.22 +// | dependencies: module.audio-video.riff.php                            |
  425.23 +// +----------------------------------------------------------------------+
  425.24 +//
  425.25 +// $Id: module.audio.la.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  425.26 +
  425.27 +        
  425.28 +        
  425.29 +class getid3_la extends getid3_handler
  425.30 +{
  425.31 +
  425.32 +    public function Analyze() {
  425.33 +        
  425.34 +        $getid3 = $this->getid3;
  425.35 +        
  425.36 +        $getid3->include_module('audio-video.riff');
  425.37 +        
  425.38 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  425.39 +        $raw_data = fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
  425.40 +    
  425.41 +        $getid3->info['fileformat']          = 'la';
  425.42 +        $getid3->info['audio']['dataformat'] = 'la';
  425.43 +        $getid3->info['audio']['lossless']   = true;
  425.44 +
  425.45 +        $getid3->info['la']['version_major'] = (int)$raw_data{2};
  425.46 +        $getid3->info['la']['version_minor'] = (int)$raw_data{3};
  425.47 +        $getid3->info['la']['version']       = (float)$getid3->info['la']['version_major'] + ($getid3->info['la']['version_minor'] / 10);
  425.48 +
  425.49 +        $getid3->info['la']['uncompressed_size'] = getid3_lib::LittleEndian2Int(substr($raw_data, 4, 4));
  425.50 +        
  425.51 +        $wave_chunk = substr($raw_data, 8, 4);
  425.52 +        if ($wave_chunk !== 'WAVE') {
  425.53 +            throw new getid3_exception('Expected "WAVE" ('.getid3_lib::PrintHexBytes('WAVE').') at offset 8, found "'.$wave_chunk.'" ('.getid3_lib::PrintHexBytes($wave_chunk).') instead.');
  425.54 +        }
  425.55 +        
  425.56 +        $offset = 12;
  425.57 +
  425.58 +        $getid3->info['la']['fmt_size'] = 24;
  425.59 +        if ($getid3->info['la']['version'] >= 0.3) {
  425.60 +
  425.61 +            $getid3->info['la']['fmt_size']    = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 4));
  425.62 +            $getid3->info['la']['header_size'] = 49 + $getid3->info['la']['fmt_size'] - 24;
  425.63 +            $offset += 4;
  425.64 +
  425.65 +        } else {
  425.66 +
  425.67 +            // version 0.2 didn't support additional data blocks
  425.68 +            $getid3->info['la']['header_size'] = 41;
  425.69 +        }
  425.70 +
  425.71 +        $fmt_chunk = substr($raw_data, $offset, 4);
  425.72 +        if ($fmt_chunk !== 'fmt ') {
  425.73 +            throw new getid3_exception('Expected "fmt " ('.getid3_lib::PrintHexBytes('fmt ').') at offset '.$offset.', found "'.$fmt_chunk.'" ('.getid3_lib::PrintHexBytes($fmt_chunk).') instead.');
  425.74 +        }
  425.75 +        $offset += 4;
  425.76 +        
  425.77 +        $fmt_size = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 4));
  425.78 +        $offset += 4;
  425.79 +
  425.80 +        $getid3->info['la']['raw']['format'] = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 2));
  425.81 +        $offset += 2;
  425.82 +        
  425.83 +        getid3_lib::ReadSequence('LittleEndian2Int', $getid3->info['la'], $raw_data, $offset,
  425.84 +            array (
  425.85 +                'channels'         => 2,
  425.86 +                'sample_rate'      => 4,
  425.87 +                'bytes_per_second' => 4,
  425.88 +                'bytes_per_sample' => 2,
  425.89 +                'bits_per_sample'  => 2,
  425.90 +                'samples'          => 4
  425.91 +            )
  425.92 +        );
  425.93 +        $offset += 18;
  425.94 +        
  425.95 +        $getid3->info['la']['raw']['flags'] = getid3_lib::LittleEndian2Int($raw_data{$offset++});
  425.96 +        
  425.97 +        $getid3->info['la']['flags']['seekable']             = (bool)($getid3->info['la']['raw']['flags'] & 0x01);
  425.98 +        if ($getid3->info['la']['version'] >= 0.4) {
  425.99 +            $getid3->info['la']['flags']['high_compression'] = (bool)($getid3->info['la']['raw']['flags'] & 0x02);
 425.100 +        }
 425.101 +
 425.102 +        $getid3->info['la']['original_crc'] = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 4));
 425.103 +        $offset += 4;
 425.104 +
 425.105 +        // mikeØbevin*de
 425.106 +        // Basically, the blocksize/seekevery are 61440/19 in La0.4 and 73728/16
 425.107 +        // in earlier versions. A seekpoint is added every blocksize * seekevery
 425.108 +        // samples, so 4 * int(totalSamples / (blockSize * seekEvery)) should
 425.109 +        // give the number of bytes used for the seekpoints. Of course, if seeking
 425.110 +        // is disabled, there are no seekpoints stored.
 425.111 +        
 425.112 +        if ($getid3->info['la']['version'] >= 0.4) {
 425.113 +            $getid3->info['la']['blocksize'] = 61440;
 425.114 +            $getid3->info['la']['seekevery'] = 19;
 425.115 +        } else {
 425.116 +            $getid3->info['la']['blocksize'] = 73728;
 425.117 +            $getid3->info['la']['seekevery'] = 16;
 425.118 +        }
 425.119 +
 425.120 +        $getid3->info['la']['seekpoint_count'] = 0;
 425.121 +        if ($getid3->info['la']['flags']['seekable']) {
 425.122 +            $getid3->info['la']['seekpoint_count'] = floor($getid3->info['la']['samples'] / ($getid3->info['la']['blocksize'] * $getid3->info['la']['seekevery']));
 425.123 +
 425.124 +            for ($i = 0; $i < $getid3->info['la']['seekpoint_count']; $i++) {
 425.125 +                $getid3->info['la']['seekpoints'][] = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 4));
 425.126 +                $offset += 4;
 425.127 +            }
 425.128 +        }
 425.129 +
 425.130 +        if ($getid3->info['la']['version'] >= 0.3) {
 425.131 +
 425.132 +            // Following the main header information, the program outputs all of the
 425.133 +            // seekpoints. Following these is what I called the 'footer start',
 425.134 +            // i.e. the position immediately after the La audio data is finished.
 425.135 +        
 425.136 +            $getid3->info['la']['footerstart'] = getid3_lib::LittleEndian2Int(substr($raw_data, $offset, 4));
 425.137 +            $offset += 4;
 425.138 +
 425.139 +            if ($getid3->info['la']['footerstart'] > $getid3->info['filesize']) {
 425.140 +                $getid3->warning('FooterStart value points to offset '.$getid3->info['la']['footerstart'].' which is beyond end-of-file ('.$getid3->info['filesize'].')');
 425.141 +                $getid3->info['la']['footerstart'] = $getid3->info['filesize'];
 425.142 +            }
 425.143 +
 425.144 +        } else {
 425.145 +
 425.146 +            // La v0.2 didn't have FooterStart value
 425.147 +            $getid3->info['la']['footerstart'] = $getid3->info['avdataend'];
 425.148 +
 425.149 +        }
 425.150 +
 425.151 +        if ($getid3->info['la']['footerstart'] < $getid3->info['avdataend']) {
 425.152 +        
 425.153 +            // Create riff header
 425.154 +            $riff_data = 'WAVE';
 425.155 +            if ($getid3->info['la']['version'] == 0.2) {
 425.156 +                $riff_data .= substr($raw_data, 12, 24);
 425.157 +            } else {
 425.158 +                $riff_data .= substr($raw_data, 16, 24);
 425.159 +            }
 425.160 +            if ($getid3->info['la']['footerstart'] < $getid3->info['avdataend']) {
 425.161 +                fseek($getid3->fp, $getid3->info['la']['footerstart'], SEEK_SET);
 425.162 +                $riff_data .= fread($getid3->fp, $getid3->info['avdataend'] - $getid3->info['la']['footerstart']);
 425.163 +            }
 425.164 +            $riff_data = 'RIFF'.getid3_lib::LittleEndian2String(strlen($riff_data), 4, false).$riff_data;
 425.165 +            
 425.166 +            // Clone getid3 - messing with offsets - better safe than sorry
 425.167 +            $clone = clone $getid3;
 425.168 +            
 425.169 +            // Analyze clone by string
 425.170 +            $riff = new getid3_riff($clone);
 425.171 +            $riff->AnalyzeString($riff_data);
 425.172 +            
 425.173 +            // Import from clone and destroy
 425.174 +            $getid3->info['riff']   = $clone->info['riff'];
 425.175 +            $getid3->warnings($clone->warnings());
 425.176 +            unset($clone);
 425.177 +        }
 425.178 +
 425.179 +        // $getid3->info['avdataoffset'] should be zero to begin with, but just in case it's not, include the addition anyway
 425.180 +        $getid3->info['avdataend']    = $getid3->info['avdataoffset'] + $getid3->info['la']['footerstart'];
 425.181 +        $getid3->info['avdataoffset'] = $getid3->info['avdataoffset'] + $offset;
 425.182 +
 425.183 +        $getid3->info['la']['compression_ratio']  = (float)(($getid3->info['avdataend'] - $getid3->info['avdataoffset']) / $getid3->info['la']['uncompressed_size']);
 425.184 +        $getid3->info['playtime_seconds']         = (float)($getid3->info['la']['samples'] / $getid3->info['la']['sample_rate']) / $getid3->info['la']['channels'];
 425.185 +
 425.186 +        $getid3->info['audio']['bitrate']         = ($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8 / $getid3->info['playtime_seconds'];
 425.187 +        $getid3->info['audio']['bits_per_sample'] = $getid3->info['la']['bits_per_sample'];
 425.188 +
 425.189 +        $getid3->info['audio']['channels']        = $getid3->info['la']['channels'];
 425.190 +        $getid3->info['audio']['sample_rate']     = (int)$getid3->info['la']['sample_rate'];
 425.191 +        $getid3->info['audio']['encoder']         = 'LA v'.$getid3->info['la']['version'];
 425.192 +
 425.193 +        return true;
 425.194 +    }
 425.195 +
 425.196 +}
 425.197 +
 425.198 +
 425.199 +?>
 425.200 \ No newline at end of file
   426.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   426.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.lpac.php	Mon Feb 22 08:02:39 2010 -0500
   426.3 @@ -0,0 +1,148 @@
   426.4 +<?php
   426.5 +// +----------------------------------------------------------------------+
   426.6 +// | PHP version 5                                                        |
   426.7 +// +----------------------------------------------------------------------+
   426.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   426.9 +// +----------------------------------------------------------------------+
  426.10 +// | This source file is subject to version 2 of the GPL license,         |
  426.11 +// | that is bundled with this package in the file license.txt and is     |
  426.12 +// | available through the world-wide-web at the following url:           |
  426.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  426.14 +// +----------------------------------------------------------------------+
  426.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  426.16 +// +----------------------------------------------------------------------+
  426.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  426.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  426.19 +// +----------------------------------------------------------------------+
  426.20 +// | module.audio.lpac.php                                                |
  426.21 +// | Module for analyzing LPAC Audio files                                |
  426.22 +// | dependencies: module.audio-video.riff.php                            |
  426.23 +// +----------------------------------------------------------------------+
  426.24 +//
  426.25 +// $Id: module.audio.lpac.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  426.26 +
  426.27 +        
  426.28 +        
  426.29 +class getid3_lpac extends getid3_handler
  426.30 +{
  426.31 +
  426.32 +    public function Analyze() {
  426.33 +        
  426.34 +        $getid3 = $this->getid3;
  426.35 +        
  426.36 +        $getid3->include_module('audio-video.riff');
  426.37 +        
  426.38 +        // Magic bytes - 'LPAC'
  426.39 +        
  426.40 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  426.41 +        $lpac_header = fread($getid3->fp, 14);
  426.42 +        
  426.43 +        $getid3->info['avdataoffset'] += 14;
  426.44 +        
  426.45 +        $getid3->info['lpac'] = array ();
  426.46 +        $info_lpac = &$getid3->info['lpac'];
  426.47 +
  426.48 +        $getid3->info['fileformat']               = 'lpac';
  426.49 +        $getid3->info['audio']['dataformat']      = 'lpac';
  426.50 +        $getid3->info['audio']['lossless']        = true;
  426.51 +        $getid3->info['audio']['bitrate_mode']    = 'vbr';
  426.52 +                                                  
  426.53 +        $info_lpac['file_version']     = getid3_lib::BigEndian2Int($lpac_header{4});
  426.54 +        $flags['audio_type']                      = getid3_lib::BigEndian2Int($lpac_header{5});
  426.55 +        $info_lpac['total_samples']    = getid3_lib::BigEndian2Int(substr($lpac_header,  6, 4));
  426.56 +        $flags['parameters']                      = getid3_lib::BigEndian2Int(substr($lpac_header, 10, 4));
  426.57 +
  426.58 +        $info_lpac['flags']['is_wave'] = (bool)($flags['audio_type'] & 0x40);
  426.59 +        $info_lpac['flags']['stereo']  = (bool)($flags['audio_type'] & 0x04);
  426.60 +        $info_lpac['flags']['24_bit']  = (bool)($flags['audio_type'] & 0x02);
  426.61 +        $info_lpac['flags']['16_bit']  = (bool)($flags['audio_type'] & 0x01);
  426.62 +
  426.63 +        if ($info_lpac['flags']['24_bit'] && $info_lpac['flags']['16_bit']) {
  426.64 +            $getid3->warning('24-bit and 16-bit flags cannot both be set');
  426.65 +        }
  426.66 +
  426.67 +        $info_lpac['flags']['fast_compress']             =   (bool)($flags['parameters'] & 0x40000000);
  426.68 +        $info_lpac['flags']['random_access']             =   (bool)($flags['parameters'] & 0x08000000);
  426.69 +        $info_lpac['block_length']                       = pow(2, (($flags['parameters'] & 0x07000000) >> 24)) * 256;
  426.70 +        $info_lpac['flags']['adaptive_prediction_order'] =   (bool)($flags['parameters'] & 0x00800000);
  426.71 +        $info_lpac['flags']['adaptive_quantization']     =   (bool)($flags['parameters'] & 0x00400000);
  426.72 +        $info_lpac['flags']['joint_stereo']              =   (bool)($flags['parameters'] & 0x00040000);
  426.73 +        $info_lpac['quantization']                       =         ($flags['parameters'] & 0x00001F00) >> 8;
  426.74 +        $info_lpac['max_prediction_order']               =         ($flags['parameters'] & 0x0000003F);
  426.75 +
  426.76 +        if ($info_lpac['flags']['fast_compress'] && ($info_lpac['max_prediction_order'] != 3)) {
  426.77 +            $getid3->warning('max_prediction_order expected to be "3" if fast_compress is true, actual value is "'.$info_lpac['max_prediction_order'].'"');
  426.78 +        }
  426.79 +        
  426.80 +        switch ($info_lpac['file_version']) {
  426.81 +        
  426.82 +            case 6:
  426.83 +                if ($info_lpac['flags']['adaptive_quantization']) {
  426.84 +                    $getid3->warning('adaptive_quantization expected to be false in LPAC file stucture v6, actually true');
  426.85 +                }
  426.86 +                if ($info_lpac['quantization'] != 20) {
  426.87 +                    $getid3->warning('Quantization expected to be 20 in LPAC file stucture v6, actually '.$info_lpac['flags']['Q']);
  426.88 +                }
  426.89 +                break;
  426.90 +
  426.91 +        
  426.92 +            default:
  426.93 +                //$getid3->warning('This version of getID3() only supports LPAC file format version 6, this file is version '.$info_lpac['file_version'].' - please report to info@getid3.org');
  426.94 +                break;
  426.95 +        }
  426.96 +
  426.97 +        // Clone getid3 - messing with something - better safe than sorry
  426.98 +        $clone = clone $getid3;
  426.99 +        
 426.100 +        // Analyze clone by fp
 426.101 +        $riff = new getid3_riff($clone);
 426.102 +        $riff->Analyze();
 426.103 +        
 426.104 +        // Import from clone and destroy
 426.105 +        $getid3->info['avdataoffset']                = $clone->info['avdataoffset'];
 426.106 +        $getid3->info['riff']                        = $clone->info['riff'];
 426.107 +        //$info_lpac['comments']['comment'] = $clone->info['comments'];
 426.108 +        $getid3->info['audio']['sample_rate']        = $clone->info['audio']['sample_rate'];
 426.109 +        $getid3->warnings($clone->warnings());
 426.110 +        unset($clone);
 426.111 +        
 426.112 +        $getid3->info['audio']['channels'] = ($info_lpac['flags']['stereo'] ? 2 : 1);
 426.113 +
 426.114 +        if ($info_lpac['flags']['24_bit']) {
 426.115 +            $getid3->info['audio']['bits_per_sample'] = $getid3->info['riff']['audio'][0]['bits_per_sample'];
 426.116 +        } elseif ($info_lpac['flags']['16_bit']) {
 426.117 +            $getid3->info['audio']['bits_per_sample'] = 16;
 426.118 +        } else {
 426.119 +            $getid3->info['audio']['bits_per_sample'] = 8;
 426.120 +        }
 426.121 +
 426.122 +        if ($info_lpac['flags']['fast_compress']) {
 426.123 +             // fast
 426.124 +            $getid3->info['audio']['encoder_options'] = '-1';
 426.125 +        } else {
 426.126 +            switch ($info_lpac['max_prediction_order']) {
 426.127 +                case 20: // simple
 426.128 +                    $getid3->info['audio']['encoder_options'] = '-2';
 426.129 +                    break;
 426.130 +                case 30: // medium
 426.131 +                    $getid3->info['audio']['encoder_options'] = '-3';
 426.132 +                    break;
 426.133 +                case 40: // high
 426.134 +                    $getid3->info['audio']['encoder_options'] = '-4';
 426.135 +                    break;
 426.136 +                case 60: // extrahigh
 426.137 +                    $getid3->info['audio']['encoder_options'] = '-5';
 426.138 +                    break;
 426.139 +            }
 426.140 +        }
 426.141 +
 426.142 +        $getid3->info['playtime_seconds'] = $info_lpac['total_samples'] / $getid3->info['audio']['sample_rate'];
 426.143 +        $getid3->info['audio']['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 426.144 +
 426.145 +        return true;
 426.146 +    }
 426.147 +
 426.148 +}
 426.149 +
 426.150 +
 426.151 +?>
 426.152 \ No newline at end of file
   427.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   427.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.midi.php	Mon Feb 22 08:02:39 2010 -0500
   427.3 @@ -0,0 +1,552 @@
   427.4 +<?php
   427.5 +// +----------------------------------------------------------------------+
   427.6 +// | PHP version 5                                                        |
   427.7 +// +----------------------------------------------------------------------+
   427.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   427.9 +// +----------------------------------------------------------------------+
  427.10 +// | This source file is subject to version 2 of the GPL license,         |
  427.11 +// | that is bundled with this package in the file license.txt and is     |
  427.12 +// | available through the world-wide-web at the following url:           |
  427.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  427.14 +// +----------------------------------------------------------------------+
  427.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  427.16 +// +----------------------------------------------------------------------+
  427.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  427.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  427.19 +// +----------------------------------------------------------------------+
  427.20 +// | module.audio.midi.php                                                |
  427.21 +// | Module for analyzing midi audio files                                |
  427.22 +// | dependencies: NONE                                                   |
  427.23 +// +----------------------------------------------------------------------+
  427.24 +//
  427.25 +// $Id: module.audio.midi.php,v 1.5 2006/11/02 10:48:01 ah Exp $
  427.26 +
  427.27 +        
  427.28 +        
  427.29 +class getid3_midi extends getid3_handler
  427.30 +{
  427.31 +
  427.32 +    public function Analyze() {
  427.33 +
  427.34 +        $getid3 = $this->getid3;
  427.35 +        
  427.36 +        $getid3->info['midi']['raw'] = array ();
  427.37 +        $info_midi     = &$getid3->info['midi'];
  427.38 +        $info_midi_raw = &$info_midi['raw'];
  427.39 +
  427.40 +        $getid3->info['fileformat']          = 'midi';
  427.41 +        $getid3->info['audio']['dataformat'] = 'midi';
  427.42 +
  427.43 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  427.44 +        $midi_data = fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
  427.45 +                
  427.46 +        // Magic bytes: 'MThd'
  427.47 +        
  427.48 +        getid3_lib::ReadSequence('BigEndian2Int', $info_midi_raw, $midi_data, 4, 
  427.49 +            array (
  427.50 +                'headersize'    => 4,
  427.51 +                'fileformat'    => 2,
  427.52 +                'tracks'        => 2,
  427.53 +                'ticksperqnote' => 2
  427.54 +            )
  427.55 +        );
  427.56 +        
  427.57 +        $offset = 14;
  427.58 +
  427.59 +        for ($i = 0; $i < $info_midi_raw['tracks']; $i++) {
  427.60 +            
  427.61 +            if ((strlen($midi_data) - $offset) < 8) {
  427.62 +                $midi_data .= fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
  427.63 +            }
  427.64 +            
  427.65 +            $track_id = substr($midi_data, $offset, 4);
  427.66 +            $offset += 4;
  427.67 +            
  427.68 +            if ($track_id != 'MTrk') {
  427.69 +                throw new getid3_exception('Expecting "MTrk" at '.$offset.', found '.$track_id.' instead');
  427.70 +            }
  427.71 +            
  427.72 +            $track_size = getid3_lib::BigEndian2Int(substr($midi_data, $offset, 4));
  427.73 +            $offset += 4;
  427.74 +                
  427.75 +            $track_data_array[$i] = substr($midi_data, $offset, $track_size);
  427.76 +            $offset += $track_size;
  427.77 +        }
  427.78 +
  427.79 +        if (!isset($track_data_array) || !is_array($track_data_array)) {
  427.80 +            throw new getid3_exception('Cannot find MIDI track information');
  427.81 +        }
  427.82 +
  427.83 +        
  427.84 +        $info_midi['totalticks']          = 0;
  427.85 +        $getid3->info['playtime_seconds'] = 0;
  427.86 +        $current_ms_per_beat              = 500000; // 120 beats per minute;  60,000,000 microseconds per minute -> 500,000 microseconds per beat
  427.87 +        $current_beats_per_min            = 120;    // 120 beats per minute;  60,000,000 microseconds per minute -> 500,000 microseconds per beat
  427.88 +        $ms_per_quarter_note_after        = array ();
  427.89 +
  427.90 +        foreach ($track_data_array as $track_number => $track_data) {
  427.91 +
  427.92 +            $events_offset = $last_issued_midi_command = $last_issued_midi_channel = $cumulative_delta_time = $ticks_at_current_bpm = 0;
  427.93 +            
  427.94 +            while ($events_offset < strlen($track_data)) {
  427.95 +                
  427.96 +                $event_id = 0;
  427.97 +                if (isset($midi_events[$track_number]) && is_array($midi_events[$track_number])) {
  427.98 +                    $event_id = count($midi_events[$track_number]);
  427.99 +                }
 427.100 +                $delta_time = 0;
 427.101 +                for ($i = 0; $i < 4; $i++) {
 427.102 +                    $delta_time_byte = ord($track_data{$events_offset++});
 427.103 +                    $delta_time = ($delta_time << 7) + ($delta_time_byte & 0x7F);
 427.104 +                    if ($delta_time_byte & 0x80) {
 427.105 +                        // another byte follows
 427.106 +                    } else {
 427.107 +                        break;
 427.108 +                    }
 427.109 +                }
 427.110 +                
 427.111 +                $cumulative_delta_time += $delta_time;
 427.112 +                $ticks_at_current_bpm  += $delta_time;
 427.113 +                
 427.114 +                $midi_events[$track_number][$event_id]['deltatime'] = $delta_time;
 427.115 +                
 427.116 +                $midi_event_channel                                 = ord($track_data{$events_offset++});
 427.117 +                
 427.118 +                // OK, normal event - MIDI command has MSB set
 427.119 +                if ($midi_event_channel & 0x80) {
 427.120 +                    $last_issued_midi_command = $midi_event_channel >> 4;
 427.121 +                    $last_issued_midi_channel = $midi_event_channel & 0x0F;
 427.122 +                } 
 427.123 +                
 427.124 +                // Running event - assume last command
 427.125 +                else {
 427.126 +                    $events_offset--;
 427.127 +                }
 427.128 +                
 427.129 +                $midi_events[$track_number][$event_id]['eventid'] = $last_issued_midi_command;
 427.130 +                $midi_events[$track_number][$event_id]['channel'] = $last_issued_midi_channel;
 427.131 +                
 427.132 +                switch ($midi_events[$track_number][$event_id]['eventid']) {
 427.133 +                    
 427.134 +                    case 0x8:       // Note off (key is released)
 427.135 +                    case 0x9:       // Note on (key is pressed)
 427.136 +                    case 0xA:       // Key after-touch
 427.137 +
 427.138 +                        //$notenumber = ord($track_data{$events_offset++});
 427.139 +                        //$velocity   = ord($track_data{$events_offset++});
 427.140 +                        $events_offset += 2;
 427.141 +                        break;
 427.142 +                        
 427.143 +                        
 427.144 +                    case 0xB:       // Control Change
 427.145 +                        
 427.146 +                        //$controllernum = ord($track_data{$events_offset++});
 427.147 +                        //$newvalue      = ord($track_data{$events_offset++});
 427.148 +                        $events_offset += 2;
 427.149 +                        break;
 427.150 +                        
 427.151 +                        
 427.152 +                    case 0xC:       // Program (patch) change
 427.153 +                    
 427.154 +                        $new_program_num = ord($track_data{$events_offset++});
 427.155 +
 427.156 +                        $info_midi_raw['track'][$track_number]['instrumentid'] = $new_program_num;
 427.157 +                        $info_midi_raw['track'][$track_number]['instrument']   = $track_number == 10 ? getid3_midi::GeneralMIDIpercussionLookup($new_program_num) : getid3_midi::GeneralMIDIinstrumentLookup($new_program_num);
 427.158 +                        break;
 427.159 +                        
 427.160 +                    
 427.161 +                    case 0xD:       // Channel after-touch
 427.162 +                        
 427.163 +                        //$channelnumber = ord($track_data{$events_offset++});
 427.164 +                        break;
 427.165 +                        
 427.166 +                        
 427.167 +                    case 0xE:       // Pitch wheel change (2000H is normal or no change)
 427.168 +
 427.169 +                        //$changeLSB = ord($track_data{$events_offset++});
 427.170 +                        //$changeMSB = ord($track_data{$events_offset++});
 427.171 +                        //$pitchwheelchange = (($changeMSB & 0x7F) << 7) & ($changeLSB & 0x7F);
 427.172 +                        $events_offset += 2;
 427.173 +                        break;
 427.174 +                        
 427.175 +    
 427.176 +                    case 0xF:
 427.177 +
 427.178 +                        if ($midi_events[$track_number][$event_id]['channel'] == 0xF) {
 427.179 +    
 427.180 +                            $meta_event_command = ord($track_data{$events_offset++});
 427.181 +                            $meta_event_length  = ord($track_data{$events_offset++});
 427.182 +                            $meta_event_data    = substr($track_data, $events_offset, $meta_event_length);
 427.183 +                            $events_offset += $meta_event_length;
 427.184 +                            
 427.185 +                            switch ($meta_event_command) {
 427.186 +                            
 427.187 +                                case 0x00: // Set track sequence number
 427.188 +    
 427.189 +                                    //$track_sequence_number = getid3_lib::BigEndian2Int(substr($meta_event_data, 0, $meta_event_length));
 427.190 +                                    //$info_midi_raw['events'][$track_number][$event_id]['seqno'] = $track_sequence_number;
 427.191 +                                    break;
 427.192 +    
 427.193 +    
 427.194 +                                case 0x01: // Text: generic
 427.195 +                                
 427.196 +                                    $text_generic = substr($meta_event_data, 0, $meta_event_length);
 427.197 +                                    //$info_midi_raw['events'][$track_number][$event_id]['text'] = $text_generic;
 427.198 +                                    $info_midi['comments']['comment'][] = $text_generic;
 427.199 +                                    break;
 427.200 +    
 427.201 +    
 427.202 +                                case 0x02: // Text: copyright
 427.203 +    
 427.204 +                                    $text_copyright = substr($meta_event_data, 0, $meta_event_length);
 427.205 +                                    //$info_midi_raw['events'][$track_number][$event_id]['copyright'] = $text_copyright;
 427.206 +                                    $info_midi['comments']['copyright'][] = $text_copyright;
 427.207 +                                    break;
 427.208 +    
 427.209 +    
 427.210 +                                case 0x03: // Text: track name
 427.211 +                                
 427.212 +                                    $text_trackname = substr($meta_event_data, 0, $meta_event_length);
 427.213 +                                    $info_midi_raw['track'][$track_number]['name'] = $text_trackname;
 427.214 +                                    break;
 427.215 +                                    
 427.216 +    
 427.217 +                                case 0x04: // Text: track instrument name
 427.218 +    
 427.219 +                                    //$text_instrument = substr($meta_event_data, 0, $meta_event_length);
 427.220 +                                    //$info_midi_raw['events'][$track_number][$event_id]['instrument'] = $text_instrument;
 427.221 +                                    break;
 427.222 +    
 427.223 +    
 427.224 +                                case 0x05: // Text: lyrics
 427.225 +    
 427.226 +                                    $text_lyrics = substr($meta_event_data, 0, $meta_event_length);
 427.227 +                                    //$info_midi_raw['events'][$track_number][$event_id]['lyrics'] = $text_lyrics;
 427.228 +                                    if (!isset($info_midi['lyrics'])) {
 427.229 +                                        $info_midi['lyrics'] = '';
 427.230 +                                    }
 427.231 +                                    $info_midi['lyrics'] .= $text_lyrics . "\n";
 427.232 +                                    break;
 427.233 +    
 427.234 +    
 427.235 +                                case 0x06: // Text: marker
 427.236 +    
 427.237 +                                    //$text_marker = substr($meta_event_data, 0, $meta_event_length);
 427.238 +                                    //$info_midi_raw['events'][$track_number][$event_id]['marker'] = $text_marker;
 427.239 +                                    break;
 427.240 +    
 427.241 +    
 427.242 +                                case 0x07: // Text: cue point
 427.243 +
 427.244 +                                    //$text_cuepoint = substr($meta_event_data, 0, $meta_event_length);
 427.245 +                                    //$info_midi_raw['events'][$track_number][$event_id]['cuepoint'] = $text_cuepoint;
 427.246 +                                    break;
 427.247 +
 427.248 +    
 427.249 +                                case 0x2F: // End Of Track
 427.250 +                                    
 427.251 +                                    //$info_midi_raw['events'][$track_number][$event_id]['EOT'] = $cumulative_delta_time;
 427.252 +                                    break;
 427.253 +    
 427.254 +    
 427.255 +                                case 0x51: // Tempo: microseconds / quarter note
 427.256 +    
 427.257 +                                    $current_ms_per_beat = getid3_lib::BigEndian2Int(substr($meta_event_data, 0, $meta_event_length));
 427.258 +                                    $info_midi_raw['events'][$track_number][$cumulative_delta_time]['us_qnote'] = $current_ms_per_beat;
 427.259 +                                    $current_beats_per_min = (1000000 / $current_ms_per_beat) * 60;
 427.260 +                                    $ms_per_quarter_note_after[$cumulative_delta_time] = $current_ms_per_beat;
 427.261 +                                    $ticks_at_current_bpm = 0;
 427.262 +                                    break;
 427.263 +    
 427.264 +    
 427.265 +                                case 0x58: // Time signature
 427.266 +                                    $timesig_numerator   = getid3_lib::BigEndian2Int($meta_event_data[0]);
 427.267 +                                    $timesig_denominator = pow(2, getid3_lib::BigEndian2Int($meta_event_data[1])); // $02 -> x/4, $03 -> x/8, etc
 427.268 +                                    //$timesig_32inqnote   = getid3_lib::BigEndian2Int($meta_event_data[2]);         // number of 32nd notes to the quarter note
 427.269 +                                    //$info_midi_raw['events'][$track_number][$event_id]['timesig_32inqnote']   = $timesig_32inqnote;
 427.270 +                                    //$info_midi_raw['events'][$track_number][$event_id]['timesig_numerator']   = $timesig_numerator;
 427.271 +                                    //$info_midi_raw['events'][$track_number][$event_id]['timesig_denominator'] = $timesig_denominator;
 427.272 +                                    //$info_midi_raw['events'][$track_number][$event_id]['timesig_text']        = $timesig_numerator.'/'.$timesig_denominator;
 427.273 +                                    $info_midi['timesignature'][] = $timesig_numerator.'/'.$timesig_denominator;
 427.274 +                                    break;
 427.275 +    
 427.276 +    
 427.277 +                                case 0x59: // Keysignature
 427.278 +                                    
 427.279 +                                    $keysig_sharpsflats = getid3_lib::BigEndian2Int($meta_event_data{0});
 427.280 +                                    if ($keysig_sharpsflats & 0x80) {
 427.281 +                                        // (-7 -> 7 flats, 0 ->key of C, 7 -> 7 sharps)
 427.282 +                                        $keysig_sharpsflats -= 256;
 427.283 +                                    }
 427.284 +    
 427.285 +                                    $keysig_majorminor  = getid3_lib::BigEndian2Int($meta_event_data{1}); // 0 -> major, 1 -> minor
 427.286 +                                    $keysigs = array (-7=>'Cb', -6=>'Gb', -5=>'Db', -4=>'Ab', -3=>'Eb', -2=>'Bb', -1=>'F', 0=>'C', 1=>'G', 2=>'D', 3=>'A', 4=>'E', 5=>'B', 6=>'F#', 7=>'C#');
 427.287 +                                    //$info_midi_raw['events'][$track_number][$event_id]['keysig_sharps'] = (($keysig_sharpsflats > 0) ? abs($keysig_sharpsflats) : 0);
 427.288 +                                    //$info_midi_raw['events'][$track_number][$event_id]['keysig_flats']  = (($keysig_sharpsflats < 0) ? abs($keysig_sharpsflats) : 0);
 427.289 +                                    //$info_midi_raw['events'][$track_number][$event_id]['keysig_minor']  = (bool)$keysig_majorminor;
 427.290 +                                    //$info_midi_raw['events'][$track_number][$event_id]['keysig_text']   = $keysigs[$keysig_sharpsflats].' '.($info_midi_raw['events'][$track_number][$event_id]['keysig_minor'] ? 'minor' : 'major');
 427.291 +    
 427.292 +                                    // $keysigs[$keysig_sharpsflats] gets an int key (correct) - $keysigs["$keysig_sharpsflats"] gets a string key (incorrect)
 427.293 +                                    $info_midi['keysignature'][] = $keysigs[$keysig_sharpsflats].' '.((bool)$keysig_majorminor ? 'minor' : 'major');
 427.294 +                                    break;
 427.295 +    
 427.296 +    
 427.297 +                                case 0x7F: // Sequencer specific information
 427.298 +    
 427.299 +                                    $custom_data = substr($meta_event_data, 0, $meta_event_length);
 427.300 +                                    break;
 427.301 +    
 427.302 +    
 427.303 +                                default:
 427.304 +    
 427.305 +                                    $getid3->warning('Unhandled META Event Command: '.$meta_event_command);
 427.306 +                            }
 427.307 +                        }
 427.308 +                        break;
 427.309 +                            
 427.310 +                            
 427.311 +                    default:                                
 427.312 +                        $getid3->warning('Unhandled MIDI Event ID: '.$midi_events[$track_number][$event_id]['eventid']);
 427.313 +                }
 427.314 +            }
 427.315 +            
 427.316 +            if (($track_number > 0) || (count($track_data_array) == 1)) {
 427.317 +                $info_midi['totalticks'] = max($info_midi['totalticks'], $cumulative_delta_time);
 427.318 +            }
 427.319 +        }
 427.320 +        
 427.321 +        $previous_tick_offset = null;
 427.322 +
 427.323 +        ksort($ms_per_quarter_note_after); 
 427.324 +        foreach ($ms_per_quarter_note_after as $tick_offset => $ms_per_beat) {
 427.325 +        
 427.326 +            if (is_null($previous_tick_offset)) {
 427.327 +                $prev_ms_per_beat     = $ms_per_beat;
 427.328 +                $previous_tick_offset = $tick_offset;
 427.329 +                continue;
 427.330 +            }
 427.331 +            
 427.332 +            if ($info_midi['totalticks'] > $tick_offset) {
 427.333 +                $getid3->info['playtime_seconds'] += (($tick_offset - $previous_tick_offset) / $info_midi_raw['ticksperqnote']) * ($prev_ms_per_beat / 1000000);
 427.334 +
 427.335 +                $prev_ms_per_beat     = $ms_per_beat;
 427.336 +                $previous_tick_offset = $tick_offset;
 427.337 +            }
 427.338 +        }
 427.339 +        
 427.340 +        if ($info_midi['totalticks'] > $previous_tick_offset) {
 427.341 +            $getid3->info['playtime_seconds'] += (($info_midi['totalticks'] - $previous_tick_offset) / $info_midi_raw['ticksperqnote']) * ($ms_per_beat / 1000000);
 427.342 +        }
 427.343 +
 427.344 +        if (@$getid3->info['playtime_seconds'] > 0) {
 427.345 +            $getid3->info['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 427.346 +        }
 427.347 +
 427.348 +        if (!empty($info_midi['lyrics'])) {
 427.349 +            $info_midi['comments']['lyrics'][] = $info_midi['lyrics'];
 427.350 +        }
 427.351 +
 427.352 +        return true;
 427.353 +    }
 427.354 +
 427.355 +
 427.356 +         
 427.357 +    public static function GeneralMIDIinstrumentLookup($instrument_id) {
 427.358 +
 427.359 +        static $lookup = array (
 427.360 +        
 427.361 +              0 => 'Acoustic Grand',
 427.362 +              1 => 'Bright Acoustic',
 427.363 +              2 => 'Electric Grand',
 427.364 +              3 => 'Honky-Tonk',
 427.365 +              4 => 'Electric Piano 1',
 427.366 +              5 => 'Electric Piano 2',
 427.367 +              6 => 'Harpsichord',
 427.368 +              7 => 'Clavier',
 427.369 +              8 => 'Celesta',
 427.370 +              9 => 'Glockenspiel',
 427.371 +             10 => 'Music Box',
 427.372 +             11 => 'Vibraphone',
 427.373 +             12 => 'Marimba',
 427.374 +             13 => 'Xylophone',
 427.375 +             14 => 'Tubular Bells',
 427.376 +             15 => 'Dulcimer',
 427.377 +             16 => 'Drawbar Organ',
 427.378 +             17 => 'Percussive Organ',
 427.379 +             18 => 'Rock Organ',
 427.380 +             19 => 'Church Organ',
 427.381 +             20 => 'Reed Organ',
 427.382 +             21 => 'Accordian',
 427.383 +             22 => 'Harmonica',
 427.384 +             23 => 'Tango Accordian',
 427.385 +             24 => 'Acoustic Guitar (nylon)',
 427.386 +             25 => 'Acoustic Guitar (steel)',
 427.387 +             26 => 'Electric Guitar (jazz)',
 427.388 +             27 => 'Electric Guitar (clean)',
 427.389 +             28 => 'Electric Guitar (muted)',
 427.390 +             29 => 'Overdriven Guitar',
 427.391 +             30 => 'Distortion Guitar',
 427.392 +             31 => 'Guitar Harmonics',
 427.393 +             32 => 'Acoustic Bass',
 427.394 +             33 => 'Electric Bass (finger)',
 427.395 +             34 => 'Electric Bass (pick)',
 427.396 +             35 => 'Fretless Bass',
 427.397 +             36 => 'Slap Bass 1',
 427.398 +             37 => 'Slap Bass 2',
 427.399 +             38 => 'Synth Bass 1',
 427.400 +             39 => 'Synth Bass 2',
 427.401 +             40 => 'Violin',
 427.402 +             41 => 'Viola',
 427.403 +             42 => 'Cello',
 427.404 +             43 => 'Contrabass',
 427.405 +             44 => 'Tremolo Strings',
 427.406 +             45 => 'Pizzicato Strings',
 427.407 +             46 => 'Orchestral Strings',
 427.408 +             47 => 'Timpani',
 427.409 +             48 => 'String Ensemble 1',
 427.410 +             49 => 'String Ensemble 2',
 427.411 +             50 => 'SynthStrings 1',
 427.412 +             51 => 'SynthStrings 2',
 427.413 +             52 => 'Choir Aahs',
 427.414 +             53 => 'Voice Oohs',
 427.415 +             54 => 'Synth Voice',
 427.416 +             55 => 'Orchestra Hit',
 427.417 +             56 => 'Trumpet',
 427.418 +             57 => 'Trombone',
 427.419 +             58 => 'Tuba',
 427.420 +             59 => 'Muted Trumpet',
 427.421 +             60 => 'French Horn',
 427.422 +             61 => 'Brass Section',
 427.423 +             62 => 'SynthBrass 1',
 427.424 +             63 => 'SynthBrass 2',
 427.425 +             64 => 'Soprano Sax',
 427.426 +             65 => 'Alto Sax',
 427.427 +             66 => 'Tenor Sax',
 427.428 +             67 => 'Baritone Sax',
 427.429 +             68 => 'Oboe',
 427.430 +             69 => 'English Horn',
 427.431 +             70 => 'Bassoon',
 427.432 +             71 => 'Clarinet',
 427.433 +             72 => 'Piccolo',
 427.434 +             73 => 'Flute',
 427.435 +             74 => 'Recorder',
 427.436 +             75 => 'Pan Flute',
 427.437 +             76 => 'Blown Bottle',
 427.438 +             77 => 'Shakuhachi',
 427.439 +             78 => 'Whistle',
 427.440 +             79 => 'Ocarina',
 427.441 +             80 => 'Lead 1 (square)',
 427.442 +             81 => 'Lead 2 (sawtooth)',
 427.443 +             82 => 'Lead 3 (calliope)',
 427.444 +             83 => 'Lead 4 (chiff)',
 427.445 +             84 => 'Lead 5 (charang)',
 427.446 +             85 => 'Lead 6 (voice)',
 427.447 +             86 => 'Lead 7 (fifths)',
 427.448 +             87 => 'Lead 8 (bass + lead)',
 427.449 +             88 => 'Pad 1 (new age)',
 427.450 +             89 => 'Pad 2 (warm)',
 427.451 +             90 => 'Pad 3 (polysynth)',
 427.452 +             91 => 'Pad 4 (choir)',
 427.453 +             92 => 'Pad 5 (bowed)',
 427.454 +             93 => 'Pad 6 (metallic)',
 427.455 +             94 => 'Pad 7 (halo)',
 427.456 +             95 => 'Pad 8 (sweep)',
 427.457 +             96 => 'FX 1 (rain)',
 427.458 +             97 => 'FX 2 (soundtrack)',
 427.459 +             98 => 'FX 3 (crystal)',
 427.460 +             99 => 'FX 4 (atmosphere)',
 427.461 +            100 => 'FX 5 (brightness)',
 427.462 +            101 => 'FX 6 (goblins)',
 427.463 +            102 => 'FX 7 (echoes)',
 427.464 +            103 => 'FX 8 (sci-fi)',
 427.465 +            104 => 'Sitar',
 427.466 +            105 => 'Banjo',
 427.467 +            106 => 'Shamisen',
 427.468 +            107 => 'Koto',
 427.469 +            108 => 'Kalimba',
 427.470 +            109 => 'Bagpipe',
 427.471 +            110 => 'Fiddle',
 427.472 +            111 => 'Shanai',
 427.473 +            112 => 'Tinkle Bell',
 427.474 +            113 => 'Agogo',
 427.475 +            114 => 'Steel Drums',
 427.476 +            115 => 'Woodblock',
 427.477 +            116 => 'Taiko Drum',
 427.478 +            117 => 'Melodic Tom',
 427.479 +            118 => 'Synth Drum',
 427.480 +            119 => 'Reverse Cymbal',
 427.481 +            120 => 'Guitar Fret Noise',
 427.482 +            121 => 'Breath Noise',
 427.483 +            122 => 'Seashore',
 427.484 +            123 => 'Bird Tweet',
 427.485 +            124 => 'Telephone Ring',
 427.486 +            125 => 'Helicopter',
 427.487 +            126 => 'Applause',
 427.488 +            127 => 'Gunshot'
 427.489 +        );
 427.490 +
 427.491 +        return @$lookup[$instrument_id];
 427.492 +    }   
 427.493 +   
 427.494 +        
 427.495 +        
 427.496 +    public static function GeneralMIDIpercussionLookup($instrument_id) {
 427.497 +        
 427.498 +        static $lookup = array (
 427.499 +        
 427.500 +            35 => 'Acoustic Bass Drum',
 427.501 +            36 => 'Bass Drum 1',
 427.502 +            37 => 'Side Stick',
 427.503 +            38 => 'Acoustic Snare',
 427.504 +            39 => 'Hand Clap',
 427.505 +            40 => 'Electric Snare',
 427.506 +            41 => 'Low Floor Tom',
 427.507 +            42 => 'Closed Hi-Hat',
 427.508 +            43 => 'High Floor Tom',
 427.509 +            44 => 'Pedal Hi-Hat',
 427.510 +            45 => 'Low Tom',
 427.511 +            46 => 'Open Hi-Hat',
 427.512 +            47 => 'Low-Mid Tom',
 427.513 +            48 => 'Hi-Mid Tom',
 427.514 +            49 => 'Crash Cymbal 1',
 427.515 +            50 => 'High Tom',
 427.516 +            51 => 'Ride Cymbal 1',
 427.517 +            52 => 'Chinese Cymbal',
 427.518 +            53 => 'Ride Bell',
 427.519 +            54 => 'Tambourine',
 427.520 +            55 => 'Splash Cymbal',
 427.521 +            56 => 'Cowbell',
 427.522 +            57 => 'Crash Cymbal 2',
 427.523 +            59 => 'Ride Cymbal 2',
 427.524 +            60 => 'Hi Bongo',
 427.525 +            61 => 'Low Bongo',
 427.526 +            62 => 'Mute Hi Conga',
 427.527 +            63 => 'Open Hi Conga',
 427.528 +            64 => 'Low Conga',
 427.529 +            65 => 'High Timbale',
 427.530 +            66 => 'Low Timbale',
 427.531 +            67 => 'High Agogo',
 427.532 +            68 => 'Low Agogo',
 427.533 +            69 => 'Cabasa',
 427.534 +            70 => 'Maracas',
 427.535 +            71 => 'Short Whistle',
 427.536 +            72 => 'Long Whistle',
 427.537 +            73 => 'Short Guiro',
 427.538 +            74 => 'Long Guiro',
 427.539 +            75 => 'Claves',
 427.540 +            76 => 'Hi Wood Block',
 427.541 +            77 => 'Low Wood Block',
 427.542 +            78 => 'Mute Cuica',
 427.543 +            79 => 'Open Cuica',
 427.544 +            80 => 'Mute Triangle',
 427.545 +            81 => 'Open Triangle'
 427.546 +        );
 427.547 +
 427.548 +        return @$lookup[$instrument_id];
 427.549 +    }   
 427.550 +
 427.551 +        
 427.552 +}       
 427.553 +        
 427.554 +        
 427.555 +?>
 427.556 \ No newline at end of file
   428.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   428.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.monkey.php	Mon Feb 22 08:02:39 2010 -0500
   428.3 @@ -0,0 +1,216 @@
   428.4 +<?php
   428.5 +// +----------------------------------------------------------------------+
   428.6 +// | PHP version 5                                                        |
   428.7 +// +----------------------------------------------------------------------+
   428.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   428.9 +// +----------------------------------------------------------------------+
  428.10 +// | This source file is subject to version 2 of the GPL license,         |
  428.11 +// | that is bundled with this package in the file license.txt and is     |
  428.12 +// | available through the world-wide-web at the following url:           |
  428.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  428.14 +// +----------------------------------------------------------------------+
  428.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  428.16 +// +----------------------------------------------------------------------+
  428.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  428.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  428.19 +// +----------------------------------------------------------------------+
  428.20 +// | module.audio.monkey.php                                              |
  428.21 +// | Module for analyzing Monkey's Audio files                            |
  428.22 +// | dependencies: NONE                                                   |
  428.23 +// +----------------------------------------------------------------------+
  428.24 +//
  428.25 +// $Id: module.audio.monkey.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  428.26 +
  428.27 +        
  428.28 +        
  428.29 +class getid3_monkey extends getid3_handler
  428.30 +{
  428.31 +
  428.32 +    public function Analyze() {
  428.33 +
  428.34 +        $getid3 = $this->getid3;
  428.35 +
  428.36 +        // based loosely on code from TMonkey by Jurgen Faul <jfaulØgmx*de>
  428.37 +        // http://jfaul.de/atl  or  http://j-faul.virtualave.net/atl/atl.html
  428.38 +        
  428.39 +        $getid3->info['fileformat']            = 'mac';
  428.40 +        $getid3->info['audio']['dataformat']   = 'mac';
  428.41 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  428.42 +        $getid3->info['audio']['lossless']     = true;
  428.43 +
  428.44 +        $getid3->info['monkeys_audio']['raw']  = array ();
  428.45 +        $info_monkeys_audio                    = &$getid3->info['monkeys_audio'];
  428.46 +        $info_monkeys_audio_raw                = &$info_monkeys_audio['raw'];
  428.47 +
  428.48 +        // Read file header
  428.49 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  428.50 +        $mac_header_data = fread($getid3->fp, 74);
  428.51 +
  428.52 +        $info_monkeys_audio_raw['magic'] = 'MAC ';  // Magic bytes
  428.53 +
  428.54 +        // Read MAC version
  428.55 +        $info_monkeys_audio_raw['nVersion'] = getid3_lib::LittleEndian2Int(substr($mac_header_data, 4, 2)); // appears to be uint32 in 3.98+
  428.56 +        
  428.57 +        // Parse MAC Header < v3980
  428.58 +        if ($info_monkeys_audio_raw['nVersion'] < 3980) {
  428.59 +        
  428.60 +            getid3_lib::ReadSequence("LittleEndian2Int", $info_monkeys_audio_raw, $mac_header_data, 6,
  428.61 +                array (
  428.62 +                    'nCompressionLevel'     => 2,  
  428.63 +                    'nFormatFlags'          => 2,
  428.64 +                    'nChannels'             => 2,
  428.65 +                    'nSampleRate'           => 4,
  428.66 +                    'nHeaderDataBytes'      => 4,   
  428.67 +                    'nWAVTerminatingBytes'  => 4,
  428.68 +                    'nTotalFrames'          => 4,       
  428.69 +                    'nFinalFrameSamples'    => 4, 
  428.70 +                    'nPeakLevel'            => 4,         
  428.71 +                    'IGNORE-1'              => 2, 
  428.72 +                    'nSeekElements'         => 2
  428.73 +                )
  428.74 +            );
  428.75 +        } 
  428.76 +        
  428.77 +        // Parse MAC Header >= v3980
  428.78 +        else {
  428.79 +
  428.80 +            getid3_lib::ReadSequence("LittleEndian2Int", $info_monkeys_audio_raw, $mac_header_data, 8, 
  428.81 +                array (
  428.82 +                    // APE_DESCRIPTOR
  428.83 +                    'nDescriptorBytes'      => 4,
  428.84 +                    'nHeaderBytes'          => 4, 
  428.85 +                    'nSeekTableBytes'       => 4, 
  428.86 +                    'nHeaderDataBytes'      => 4, 
  428.87 +                    'nAPEFrameDataBytes'    => 4, 
  428.88 +                    'nAPEFrameDataBytesHigh'=> 4, 
  428.89 +                    'nTerminatingDataBytes' => 4, 
  428.90 +                    
  428.91 +                    // MD5 - string
  428.92 +                    'cFileMD5'              => -16, 
  428.93 +                    
  428.94 +                    // APE_HEADER
  428.95 +                    'nCompressionLevel'     => 2,
  428.96 +                    'nFormatFlags'          => 2,
  428.97 +                    'nBlocksPerFrame'       => 4,
  428.98 +                    'nFinalFrameBlocks'     => 4,
  428.99 +                    'nTotalFrames'          => 4,
 428.100 +                    'nBitsPerSample'        => 2,
 428.101 +                    'nChannels'             => 2,
 428.102 +                    'nSampleRate'           => 4
 428.103 +                )
 428.104 +            );
 428.105 +        }
 428.106 +        
 428.107 +        // Process data
 428.108 +        $info_monkeys_audio['flags']['8-bit']         = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0001);
 428.109 +        $info_monkeys_audio['flags']['crc-32']        = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0002);
 428.110 +        $info_monkeys_audio['flags']['peak_level']    = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0004);
 428.111 +        $info_monkeys_audio['flags']['24-bit']        = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0008);
 428.112 +        $info_monkeys_audio['flags']['seek_elements'] = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0010);
 428.113 +        $info_monkeys_audio['flags']['no_wav_header'] = (bool)($info_monkeys_audio_raw['nFormatFlags'] & 0x0020);
 428.114 +        
 428.115 +        $info_monkeys_audio['version']                = $info_monkeys_audio_raw['nVersion'] / 1000;
 428.116 +        
 428.117 +        $info_monkeys_audio['compression']            = getid3_monkey::MonkeyCompressionLevelNameLookup($info_monkeys_audio_raw['nCompressionLevel']);
 428.118 +        
 428.119 +        $info_monkeys_audio['bits_per_sample']        = ($info_monkeys_audio['flags']['24-bit'] ? 24 : ($info_monkeys_audio['flags']['8-bit'] ? 8 : 16));
 428.120 +        
 428.121 +        $info_monkeys_audio['channels']               = $info_monkeys_audio_raw['nChannels'];
 428.122 +        
 428.123 +        $getid3->info['audio']['channels']            = $info_monkeys_audio['channels'];
 428.124 +        
 428.125 +        $info_monkeys_audio['sample_rate']            = $info_monkeys_audio_raw['nSampleRate'];
 428.126 +        
 428.127 +        $getid3->info['audio']['sample_rate']         = $info_monkeys_audio['sample_rate'];
 428.128 +        
 428.129 +        if ($info_monkeys_audio['flags']['peak_level']) {
 428.130 +            $info_monkeys_audio['peak_level']         = $info_monkeys_audio_raw['nPeakLevel'];
 428.131 +            $info_monkeys_audio['peak_ratio']         = $info_monkeys_audio['peak_level'] / pow(2, $info_monkeys_audio['bits_per_sample'] - 1);
 428.132 +        }
 428.133 +        
 428.134 +        // MAC >= v3980
 428.135 +        if ($info_monkeys_audio_raw['nVersion'] >= 3980) {
 428.136 +            $info_monkeys_audio['samples']            = (($info_monkeys_audio_raw['nTotalFrames'] - 1) * $info_monkeys_audio_raw['nBlocksPerFrame']) + $info_monkeys_audio_raw['nFinalFrameBlocks'];
 428.137 +        } 
 428.138 +        
 428.139 +        // MAC < v3980
 428.140 +        else {
 428.141 +            $info_monkeys_audio['samples_per_frame']  = getid3_monkey::MonkeySamplesPerFrame($info_monkeys_audio_raw['nVersion'], $info_monkeys_audio_raw['nCompressionLevel']);
 428.142 +            $info_monkeys_audio['samples']            = (($info_monkeys_audio_raw['nTotalFrames'] - 1) * $info_monkeys_audio['samples_per_frame']) + $info_monkeys_audio_raw['nFinalFrameSamples'];
 428.143 +        }
 428.144 +        
 428.145 +        $info_monkeys_audio['playtime']               = $info_monkeys_audio['samples'] / $info_monkeys_audio['sample_rate'];
 428.146 +        
 428.147 +        $getid3->info['playtime_seconds']             = $info_monkeys_audio['playtime'];
 428.148 +
 428.149 +        $info_monkeys_audio['compressed_size']        = $getid3->info['avdataend'] - $getid3->info['avdataoffset'];
 428.150 +        $info_monkeys_audio['uncompressed_size']      = $info_monkeys_audio['samples'] * $info_monkeys_audio['channels'] * ($info_monkeys_audio['bits_per_sample'] / 8);
 428.151 +        $info_monkeys_audio['compression_ratio']      = $info_monkeys_audio['compressed_size'] / ($info_monkeys_audio['uncompressed_size'] + $info_monkeys_audio_raw['nHeaderDataBytes']);
 428.152 +        $info_monkeys_audio['bitrate']                = (($info_monkeys_audio['samples'] * $info_monkeys_audio['channels'] * $info_monkeys_audio['bits_per_sample']) / $info_monkeys_audio['playtime']) * $info_monkeys_audio['compression_ratio'];
 428.153 +
 428.154 +        $getid3->info['audio']['bitrate']             = $info_monkeys_audio['bitrate'];
 428.155 +        
 428.156 +        $getid3->info['audio']['bits_per_sample']     = $info_monkeys_audio['bits_per_sample'];
 428.157 +        $getid3->info['audio']['encoder']             = 'MAC v'.number_format($info_monkeys_audio['version'], 2);
 428.158 +        $getid3->info['audio']['encoder_options']     = ucfirst($info_monkeys_audio['compression']).' compression';
 428.159 +        
 428.160 +        // MAC >= v3980 - get avdataoffsets from MAC header
 428.161 +        if ($info_monkeys_audio_raw['nVersion'] >= 3980) {
 428.162 +            $getid3->info['avdataoffset'] += $info_monkeys_audio_raw['nDescriptorBytes'] + $info_monkeys_audio_raw['nHeaderBytes'] + $info_monkeys_audio_raw['nSeekTableBytes'] + $info_monkeys_audio_raw['nHeaderDataBytes'];
 428.163 +            $getid3->info['avdataend']    -= $info_monkeys_audio_raw['nTerminatingDataBytes'];
 428.164 +        } 
 428.165 +        
 428.166 +        // MAC < v3980 Add size of MAC header to avdataoffset
 428.167 +        else {
 428.168 +            $getid3->info['avdataoffset'] += 8;
 428.169 +        }
 428.170 +
 428.171 +        // Convert md5sum to 32 byte string
 428.172 +        if (@$info_monkeys_audio_raw['cFileMD5']) {
 428.173 +            if ($info_monkeys_audio_raw['cFileMD5'] !== str_repeat("\x00", 16)) {
 428.174 +                $getid3->info['md5_data_source'] = '';
 428.175 +                $md5 = $info_monkeys_audio_raw['cFileMD5'];
 428.176 +                for ($i = 0; $i < strlen($md5); $i++) {
 428.177 +                    $getid3->info['md5_data_source'] .= str_pad(dechex(ord($md5{$i})), 2, '00', STR_PAD_LEFT);
 428.178 +                }
 428.179 +                if (!preg_match('/^[0-9a-f]{32}$/', $getid3->info['md5_data_source'])) {
 428.180 +                    unset($getid3->info['md5_data_source']);
 428.181 +                }
 428.182 +            }
 428.183 +        }
 428.184 +        
 428.185 +
 428.186 +        return true;
 428.187 +    }
 428.188 +
 428.189 +    
 428.190 +    
 428.191 +    public static function MonkeyCompressionLevelNameLookup($compression_level) {
 428.192 +        
 428.193 +        static $lookup = array (
 428.194 +            0     => 'unknown',
 428.195 +            1000  => 'fast',
 428.196 +            2000  => 'normal',
 428.197 +            3000  => 'high',
 428.198 +            4000  => 'extra-high',
 428.199 +            5000  => 'insane'
 428.200 +        );
 428.201 +        return (isset($lookup[$compression_level]) ? $lookup[$compression_level] : 'invalid');
 428.202 +    }
 428.203 +
 428.204 +    
 428.205 +    
 428.206 +    public static function MonkeySamplesPerFrame($version_id, $compression_level) {
 428.207 +
 428.208 +        if ($version_id >= 3950) {
 428.209 +            return 73728 * 4;
 428.210 +        } 
 428.211 +        if (($version_id >= 3900)  || (($version_id >= 3800) && ($compression_level == 4000))) {
 428.212 +            return 73728;
 428.213 +        }
 428.214 +        return 9216;
 428.215 +    }
 428.216 +
 428.217 +}
 428.218 +
 428.219 +?>
 428.220 \ No newline at end of file
   429.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   429.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mp3.php	Mon Feb 22 08:02:39 2010 -0500
   429.3 @@ -0,0 +1,1696 @@
   429.4 +<?php
   429.5 +// +----------------------------------------------------------------------+
   429.6 +// | PHP version 5                                                        |
   429.7 +// +----------------------------------------------------------------------+
   429.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   429.9 +// +----------------------------------------------------------------------+
  429.10 +// | This source file is subject to version 2 of the GPL license,         |
  429.11 +// | that is bundled with this package in the file license.txt and is     |
  429.12 +// | available through the world-wide-web at the following url:           |
  429.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  429.14 +// +----------------------------------------------------------------------+
  429.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  429.16 +// +----------------------------------------------------------------------+
  429.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  429.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  429.19 +// +----------------------------------------------------------------------+
  429.20 +// | module.audio.mp3.php                                                 |
  429.21 +// | Module for analyzing MPEG Audio Layer 1,2,3 files.                   |
  429.22 +// | dependencies: none                                                   |
  429.23 +// +----------------------------------------------------------------------+
  429.24 +//
  429.25 +// $Id: module.audio.mp3.php,v 1.10 2006/11/16 22:57:57 ah Exp $
  429.26 +
  429.27 +
  429.28 +
  429.29 +class getid3_mp3 extends getid3_handler
  429.30 +{
  429.31 +    // Number of frames to scan to determine if MPEG-audio sequence is valid.
  429.32 +    // Lower this number to 5-20 for faster scanning
  429.33 +    // Increase this number to 50+ for most accurate detection of valid VBR/CBR mpeg-audio streams
  429.34 +    const VALID_CHECK_FRAMES = 35;
  429.35 +    
  429.36 +
  429.37 +    public function Analyze() {
  429.38 +
  429.39 +        $this->getAllMPEGInfo($this->getid3->fp, $this->getid3->info);
  429.40 +
  429.41 +        return true;   
  429.42 +    }
  429.43 +    
  429.44 +    
  429.45 +    public function AnalyzeMPEGaudioInfo() {
  429.46 +        
  429.47 +        $this->getOnlyMPEGaudioInfo($this->getid3->fp, $this->getid3->info, $this->getid3->info['avdataoffset'], false);
  429.48 +    }
  429.49 +
  429.50 +
  429.51 +    public function getAllMPEGInfo(&$fd, &$info) {
  429.52 +
  429.53 +        $this->getOnlyMPEGaudioInfo($fd, $info, 0 + $info['avdataoffset']);
  429.54 +
  429.55 +        if (isset($info['mpeg']['audio']['bitrate_mode'])) {
  429.56 +            $info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
  429.57 +        }
  429.58 +
  429.59 +        if (((isset($info['id3v2']['headerlength']) && ($info['avdataoffset'] > $info['id3v2']['headerlength'])) || (!isset($info['id3v2']) && ($info['avdataoffset'] > 0)))) {
  429.60 +
  429.61 +            $synch_offset_warning = 'Unknown data before synch ';
  429.62 +            if (isset($info['id3v2']['headerlength'])) {
  429.63 +                $synch_offset_warning .= '(ID3v2 header ends at '.$info['id3v2']['headerlength'].', then '.($info['avdataoffset'] - $info['id3v2']['headerlength']).' bytes garbage, ';
  429.64 +            } else {
  429.65 +                $synch_offset_warning .= '(should be at beginning of file, ';
  429.66 +            }
  429.67 +            $synch_offset_warning .= 'synch detected at '.$info['avdataoffset'].')';
  429.68 +            if ($info['audio']['bitrate_mode'] == 'cbr') {
  429.69 +
  429.70 +                if (!empty($info['id3v2']['headerlength']) && (($info['avdataoffset'] - $info['id3v2']['headerlength']) == $info['mpeg']['audio']['framelength'])) {
  429.71 +
  429.72 +                    $synch_offset_warning .= '. This is a known problem with some versions of LAME (3.90-3.92) DLL in CBR mode.';
  429.73 +                    $info['audio']['codec'] = 'LAME';
  429.74 +                    $current_data_lame_version_string = 'LAME3.';
  429.75 +
  429.76 +                } elseif (empty($info['id3v2']['headerlength']) && ($info['avdataoffset'] == $info['mpeg']['audio']['framelength'])) {
  429.77 +
  429.78 +                    $synch_offset_warning .= '. This is a known problem with some versions of LAME (3.90 - 3.92) DLL in CBR mode.';
  429.79 +                    $info['audio']['codec'] = 'LAME';
  429.80 +                    $current_data_lame_version_string = 'LAME3.';
  429.81 +
  429.82 +                }
  429.83 +
  429.84 +            }
  429.85 +            $this->getid3->warning($synch_offset_warning);
  429.86 +
  429.87 +        }
  429.88 +
  429.89 +        if (isset($info['mpeg']['audio']['LAME'])) {
  429.90 +            $info['audio']['codec'] = 'LAME';
  429.91 +            if (!empty($info['mpeg']['audio']['LAME']['long_version'])) {
  429.92 +                $info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['long_version'], "\x00");
  429.93 +            } elseif (!empty($info['mpeg']['audio']['LAME']['short_version'])) {
  429.94 +                $info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['short_version'], "\x00");
  429.95 +            }
  429.96 +        }
  429.97 +
  429.98 +        $current_data_lame_version_string = (!empty($current_data_lame_version_string) ? $current_data_lame_version_string : @$info['audio']['encoder']);
  429.99 +        if (!empty($current_data_lame_version_string) && (substr($current_data_lame_version_string, 0, 6) == 'LAME3.') && !preg_match('[0-9\)]', substr($current_data_lame_version_string, -1))) {
 429.100 +            // a version number of LAME that does not end with a number like "LAME3.92"
 429.101 +            // or with a closing parenthesis like "LAME3.88 (alpha)"
 429.102 +            // or a version of LAME with the LAMEtag-not-filled-in-DLL-mode bug (3.90-3.92)
 429.103 +
 429.104 +            // not sure what the actual last frame length will be, but will be less than or equal to 1441
 429.105 +            $possibly_longer_lame_version_frame_length = 1441;
 429.106 +
 429.107 +            // Not sure what version of LAME this is - look in padding of last frame for longer version string
 429.108 +            $possible_lame_version_string_offset = $info['avdataend'] - $possibly_longer_lame_version_frame_length;
 429.109 +            fseek($fd, $possible_lame_version_string_offset);
 429.110 +            $possibly_longer_lame_version_data = fread($fd, $possibly_longer_lame_version_frame_length);
 429.111 +            switch (substr($current_data_lame_version_string, -1)) {
 429.112 +                case 'a':
 429.113 +                case 'b':
 429.114 +                    // "LAME3.94a" will have a longer version string of "LAME3.94 (alpha)" for example
 429.115 +                    // need to trim off "a" to match longer string
 429.116 +                    $current_data_lame_version_string = substr($current_data_lame_version_string, 0, -1);
 429.117 +                    break;
 429.118 +            }
 429.119 +            if (($possibly_longer_lame_version_string = strstr($possibly_longer_lame_version_data, $current_data_lame_version_string)) !== false) {
 429.120 +                if (substr($possibly_longer_lame_version_string, 0, strlen($current_data_lame_version_string)) == $current_data_lame_version_string) {
 429.121 +                    $possibly_longer_lame_version_new_string = substr($possibly_longer_lame_version_string, 0, strspn($possibly_longer_lame_version_string, 'LAME0123456789., (abcdefghijklmnopqrstuvwxyzJFSOND)')); //"LAME3.90.3"  "LAME3.87 (beta 1, Sep 27 2000)" "LAME3.88 (beta)"
 429.122 +                    if (strlen($possibly_longer_lame_version_new_string) > strlen(@$info['audio']['encoder'])) {
 429.123 +                        $info['audio']['encoder'] = $possibly_longer_lame_version_new_string;
 429.124 +                    }
 429.125 +                }
 429.126 +            }
 429.127 +        }
 429.128 +        if (!empty($info['audio']['encoder'])) {
 429.129 +            $info['audio']['encoder'] = rtrim($info['audio']['encoder'], "\x00 ");
 429.130 +        }
 429.131 +
 429.132 +        switch (@$info['mpeg']['audio']['layer']) {
 429.133 +            case 1:
 429.134 +            case 2:
 429.135 +                $info['audio']['dataformat'] = 'mp'.$info['mpeg']['audio']['layer'];
 429.136 +                break;
 429.137 +        }
 429.138 +        if (@$info['fileformat'] == 'mp3') {
 429.139 +            switch ($info['audio']['dataformat']) {
 429.140 +                case 'mp1':
 429.141 +                case 'mp2':
 429.142 +                case 'mp3':
 429.143 +                    $info['fileformat'] = $info['audio']['dataformat'];
 429.144 +                    break;
 429.145 +
 429.146 +                default:
 429.147 +                    $this->getid3->warning('Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"');
 429.148 +                    break;
 429.149 +            }
 429.150 +        }
 429.151 +        
 429.152 +        $info['mime_type']         = 'audio/mpeg';
 429.153 +        $info['audio']['lossless'] = false;
 429.154 +
 429.155 +        // Calculate playtime
 429.156 +        if (!isset($info['playtime_seconds']) && isset($info['audio']['bitrate']) && ($info['audio']['bitrate'] > 0)) {
 429.157 +            $info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) * 8 / $info['audio']['bitrate'];
 429.158 +        }
 429.159 +
 429.160 +        $info['audio']['encoder_options'] = getid3_mp3::GuessEncoderOptions($info);
 429.161 +
 429.162 +        return true;
 429.163 +    }
 429.164 +
 429.165 +
 429.166 +
 429.167 +    public static function GuessEncoderOptions(&$info) {
 429.168 +        // shortcuts
 429.169 +        if (!empty($info['mpeg']['audio'])) {
 429.170 +            $thisfile_mpeg_audio = &$info['mpeg']['audio'];
 429.171 +            if (!empty($thisfile_mpeg_audio['LAME'])) {
 429.172 +                $thisfile_mpeg_audio_lame = &$thisfile_mpeg_audio['LAME'];
 429.173 +            }
 429.174 +        }
 429.175 +
 429.176 +        $encoder_options = '';
 429.177 +        static $named_preset_bitrates = array (16, 24, 40, 56, 112, 128, 160, 192, 256);
 429.178 +
 429.179 +        if ((@$thisfile_mpeg_audio['VBR_method'] == 'Fraunhofer') && !empty($thisfile_mpeg_audio['VBR_quality'])) {
 429.180 +
 429.181 +            $encoder_options = 'VBR q'.$thisfile_mpeg_audio['VBR_quality'];
 429.182 +
 429.183 +        } elseif (!empty($thisfile_mpeg_audio_lame['preset_used']) && (!in_array($thisfile_mpeg_audio_lame['preset_used_id'], $named_preset_bitrates))) {
 429.184 +
 429.185 +            $encoder_options = $thisfile_mpeg_audio_lame['preset_used'];
 429.186 +
 429.187 +        } elseif (!empty($thisfile_mpeg_audio_lame['vbr_quality'])) {
 429.188 +
 429.189 +            static $known_encoder_values = array ();
 429.190 +            if (empty($known_encoder_values)) {
 429.191 +
 429.192 +                //$known_encoder_values[abrbitrate_minbitrate][vbr_quality][raw_vbr_method][raw_noise_shaping][raw_stereo_mode][ath_type][lowpass_frequency] = 'preset name';
 429.193 +                $known_encoder_values[0xFF][58][1][1][3][2][20500] = '--alt-preset insane';        // 3.90,   3.90.1, 3.92
 429.194 +                $known_encoder_values[0xFF][58][1][1][3][2][20600] = '--alt-preset insane';        // 3.90.2, 3.90.3, 3.91
 429.195 +                $known_encoder_values[0xFF][57][1][1][3][4][20500] = '--alt-preset insane';        // 3.94,   3.95
 429.196 +                $known_encoder_values['**'][78][3][2][3][2][19500] = '--alt-preset extreme';       // 3.90,   3.90.1, 3.92
 429.197 +                $known_encoder_values['**'][78][3][2][3][2][19600] = '--alt-preset extreme';       // 3.90.2, 3.91
 429.198 +                $known_encoder_values['**'][78][3][1][3][2][19600] = '--alt-preset extreme';       // 3.90.3
 429.199 +                $known_encoder_values['**'][78][4][2][3][2][19500] = '--alt-preset fast extreme';  // 3.90,   3.90.1, 3.92
 429.200 +                $known_encoder_values['**'][78][4][2][3][2][19600] = '--alt-preset fast extreme';  // 3.90.2, 3.90.3, 3.91
 429.201 +                $known_encoder_values['**'][78][3][2][3][4][19000] = '--alt-preset standard';      // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
 429.202 +                $known_encoder_values['**'][78][3][1][3][4][19000] = '--alt-preset standard';      // 3.90.3
 429.203 +                $known_encoder_values['**'][78][4][2][3][4][19000] = '--alt-preset fast standard'; // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
 429.204 +                $known_encoder_values['**'][78][4][1][3][4][19000] = '--alt-preset fast standard'; // 3.90.3
 429.205 +                $known_encoder_values['**'][88][4][1][3][3][19500] = '--r3mix';                    // 3.90,   3.90.1, 3.92
 429.206 +                $known_encoder_values['**'][88][4][1][3][3][19600] = '--r3mix';                    // 3.90.2, 3.90.3, 3.91
 429.207 +                $known_encoder_values['**'][67][4][1][3][4][18000] = '--r3mix';                    // 3.94,   3.95
 429.208 +                $known_encoder_values['**'][68][3][2][3][4][18000] = '--alt-preset medium';        // 3.90.3
 429.209 +                $known_encoder_values['**'][68][4][2][3][4][18000] = '--alt-preset fast medium';   // 3.90.3
 429.210 +
 429.211 +                $known_encoder_values[0xFF][99][1][1][1][2][0]     = '--preset studio';            // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
 429.212 +                $known_encoder_values[0xFF][58][2][1][3][2][20600] = '--preset studio';            // 3.90.3, 3.93.1
 429.213 +                $known_encoder_values[0xFF][58][2][1][3][2][20500] = '--preset studio';            // 3.93
 429.214 +                $known_encoder_values[0xFF][57][2][1][3][4][20500] = '--preset studio';            // 3.94,   3.95
 429.215 +                $known_encoder_values[0xC0][88][1][1][1][2][0]     = '--preset cd';                // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
 429.216 +                $known_encoder_values[0xC0][58][2][2][3][2][19600] = '--preset cd';                // 3.90.3, 3.93.1
 429.217 +                $known_encoder_values[0xC0][58][2][2][3][2][19500] = '--preset cd';                // 3.93
 429.218 +                $known_encoder_values[0xC0][57][2][1][3][4][19500] = '--preset cd';                // 3.94,   3.95
 429.219 +                $known_encoder_values[0xA0][78][1][1][3][2][18000] = '--preset hifi';              // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
 429.220 +                $known_encoder_values[0xA0][58][2][2][3][2][18000] = '--preset hifi';              // 3.90.3, 3.93,   3.93.1
 429.221 +                $known_encoder_values[0xA0][57][2][1][3][4][18000] = '--preset hifi';              // 3.94,   3.95
 429.222 +                $known_encoder_values[0x80][67][1][1][3][2][18000] = '--preset tape';              // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
 429.223 +                $known_encoder_values[0x80][67][1][1][3][2][15000] = '--preset radio';             // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
 429.224 +                $known_encoder_values[0x70][67][1][1][3][2][15000] = '--preset fm';                // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
 429.225 +                $known_encoder_values[0x70][58][2][2][3][2][16000] = '--preset tape/radio/fm';     // 3.90.3, 3.93,   3.93.1
 429.226 +                $known_encoder_values[0x70][57][2][1][3][4][16000] = '--preset tape/radio/fm';     // 3.94,   3.95
 429.227 +                $known_encoder_values[0x38][58][2][2][0][2][10000] = '--preset voice';             // 3.90.3, 3.93,   3.93.1
 429.228 +                $known_encoder_values[0x38][57][2][1][0][4][15000] = '--preset voice';             // 3.94,   3.95
 429.229 +                $known_encoder_values[0x38][57][2][1][0][4][16000] = '--preset voice';             // 3.94a14
 429.230 +                $known_encoder_values[0x28][65][1][1][0][2][7500]  = '--preset mw-us';             // 3.90,   3.90.1, 3.92
 429.231 +                $known_encoder_values[0x28][65][1][1][0][2][7600]  = '--preset mw-us';             // 3.90.2, 3.91
 429.232 +                $known_encoder_values[0x28][58][2][2][0][2][7000]  = '--preset mw-us';             // 3.90.3, 3.93,   3.93.1
 429.233 +                $known_encoder_values[0x28][57][2][1][0][4][10500] = '--preset mw-us';             // 3.94,   3.95
 429.234 +                $known_encoder_values[0x28][57][2][1][0][4][11200] = '--preset mw-us';             // 3.94a14
 429.235 +                $known_encoder_values[0x28][57][2][1][0][4][8800]  = '--preset mw-us';             // 3.94a15
 429.236 +                $known_encoder_values[0x18][58][2][2][0][2][4000]  = '--preset phon+/lw/mw-eu/sw'; // 3.90.3, 3.93.1
 429.237 +                $known_encoder_values[0x18][58][2][2][0][2][3900]  = '--preset phon+/lw/mw-eu/sw'; // 3.93
 429.238 +                $known_encoder_values[0x18][57][2][1][0][4][5900]  = '--preset phon+/lw/mw-eu/sw'; // 3.94,   3.95
 429.239 +                $known_encoder_values[0x18][57][2][1][0][4][6200]  = '--preset phon+/lw/mw-eu/sw'; // 3.94a14
 429.240 +                $known_encoder_values[0x18][57][2][1][0][4][3200]  = '--preset phon+/lw/mw-eu/sw'; // 3.94a15
 429.241 +                $known_encoder_values[0x10][58][2][2][0][2][3800]  = '--preset phone';             // 3.90.3, 3.93.1
 429.242 +                $known_encoder_values[0x10][58][2][2][0][2][3700]  = '--preset phone';             // 3.93
 429.243 +                $known_encoder_values[0x10][57][2][1][0][4][5600]  = '--preset phone';             // 3.94,   3.95
 429.244 +            }
 429.245 +
 429.246 +            if (isset($known_encoder_values[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) {
 429.247 +
 429.248 +                $encoder_options = $known_encoder_values[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']];
 429.249 +
 429.250 +            } elseif (isset($known_encoder_values['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) {
 429.251 +
 429.252 +                $encoder_options = $known_encoder_values['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']];
 429.253 +
 429.254 +            } elseif ($info['audio']['bitrate_mode'] == 'vbr') {
 429.255 +
 429.256 +                // http://gabriel.mp3-tech.org/mp3infotag.html
 429.257 +                // int    Quality = (100 - 10 * gfp->VBR_q - gfp->quality)h
 429.258 +
 429.259 +
 429.260 +                $lame_v_value = 10 - ceil($thisfile_mpeg_audio_lame['vbr_quality'] / 10);
 429.261 +                $lame_q_value = 100 - $thisfile_mpeg_audio_lame['vbr_quality'] - ($lame_v_value * 10);
 429.262 +                $encoder_options = '-V'.$lame_v_value.' -q'.$lame_q_value;
 429.263 +
 429.264 +            } elseif ($info['audio']['bitrate_mode'] == 'cbr') {
 429.265 +
 429.266 +                $encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000);
 429.267 +
 429.268 +            } else {
 429.269 +
 429.270 +                $encoder_options = strtoupper($info['audio']['bitrate_mode']);
 429.271 +
 429.272 +            }
 429.273 +
 429.274 +        } elseif (!empty($thisfile_mpeg_audio_lame['bitrate_abr'])) {
 429.275 +
 429.276 +            $encoder_options = 'ABR'.$thisfile_mpeg_audio_lame['bitrate_abr'];
 429.277 +
 429.278 +        } elseif (!empty($info['audio']['bitrate'])) {
 429.279 +
 429.280 +            if ($info['audio']['bitrate_mode'] == 'cbr') {
 429.281 +                $encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000);
 429.282 +            } else {
 429.283 +                $encoder_options = strtoupper($info['audio']['bitrate_mode']);
 429.284 +            }
 429.285 +
 429.286 +        }
 429.287 +        if (!empty($thisfile_mpeg_audio_lame['bitrate_min'])) {
 429.288 +            $encoder_options .= ' -b'.$thisfile_mpeg_audio_lame['bitrate_min'];
 429.289 +        }
 429.290 +
 429.291 +        if (@$thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev'] || @$thisfile_mpeg_audio_lame['encoding_flags']['nogap_next']) {
 429.292 +            $encoder_options .= ' --nogap';
 429.293 +        }
 429.294 +
 429.295 +        if (!empty($thisfile_mpeg_audio_lame['lowpass_frequency'])) {
 429.296 +            $exploded_options = explode(' ', $encoder_options, 4);
 429.297 +            if ($exploded_options[0] == '--r3mix') {
 429.298 +                $exploded_options[1] = 'r3mix';
 429.299 +            }
 429.300 +            switch ($exploded_options[0]) {
 429.301 +                case '--preset':
 429.302 +                case '--alt-preset':
 429.303 +                case '--r3mix':
 429.304 +                    if ($exploded_options[1] == 'fast') {
 429.305 +                        $exploded_options[1] .= ' '.$exploded_options[2];
 429.306 +                    }
 429.307 +                    switch ($exploded_options[1]) {
 429.308 +                        case 'portable':
 429.309 +                        case 'medium':
 429.310 +                        case 'standard':
 429.311 +                        case 'extreme':
 429.312 +                        case 'insane':
 429.313 +                        case 'fast portable':
 429.314 +                        case 'fast medium':
 429.315 +                        case 'fast standard':
 429.316 +                        case 'fast extreme':
 429.317 +                        case 'fast insane':
 429.318 +                        case 'r3mix':
 429.319 +                            static $expected_lowpass = array (
 429.320 +                                    'insane|20500'        => 20500,
 429.321 +                                    'insane|20600'        => 20600,  // 3.90.2, 3.90.3, 3.91
 429.322 +                                    'medium|18000'        => 18000,
 429.323 +                                    'fast medium|18000'   => 18000,
 429.324 +                                    'extreme|19500'       => 19500,  // 3.90,   3.90.1, 3.92, 3.95
 429.325 +                                    'extreme|19600'       => 19600,  // 3.90.2, 3.90.3, 3.91, 3.93.1
 429.326 +                                    'fast extreme|19500'  => 19500,  // 3.90,   3.90.1, 3.92, 3.95
 429.327 +                                    'fast extreme|19600'  => 19600,  // 3.90.2, 3.90.3, 3.91, 3.93.1
 429.328 +                                    'standard|19000'      => 19000,
 429.329 +                                    'fast standard|19000' => 19000,
 429.330 +                                    'r3mix|19500'         => 19500,  // 3.90,   3.90.1, 3.92
 429.331 +                                    'r3mix|19600'         => 19600,  // 3.90.2, 3.90.3, 3.91
 429.332 +                                    'r3mix|18000'         => 18000,  // 3.94,   3.95
 429.333 +                                );
 429.334 +                            if (!isset($expected_lowpass[$exploded_options[1].'|'.$thisfile_mpeg_audio_lame['lowpass_frequency']]) && ($thisfile_mpeg_audio_lame['lowpass_frequency'] < 22050) && (round($thisfile_mpeg_audio_lame['lowpass_frequency'] / 1000) < round($thisfile_mpeg_audio['sample_rate'] / 2000))) {
 429.335 +                                $encoder_options .= ' --lowpass '.$thisfile_mpeg_audio_lame['lowpass_frequency'];
 429.336 +                            }
 429.337 +                            break;
 429.338 +
 429.339 +                        default:
 429.340 +                            break;
 429.341 +                    }
 429.342 +                    break;
 429.343 +            }
 429.344 +        }
 429.345 +
 429.346 +        if (isset($thisfile_mpeg_audio_lame['raw']['source_sample_freq'])) {
 429.347 +            if (($thisfile_mpeg_audio['sample_rate'] == 44100) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 1)) {
 429.348 +                $encoder_options .= ' --resample 44100';
 429.349 +            } elseif (($thisfile_mpeg_audio['sample_rate'] == 48000) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 2)) {
 429.350 +                $encoder_options .= ' --resample 48000';
 429.351 +            } elseif ($thisfile_mpeg_audio['sample_rate'] < 44100) {
 429.352 +                switch ($thisfile_mpeg_audio_lame['raw']['source_sample_freq']) {
 429.353 +                    case 0: // <= 32000
 429.354 +                        // may or may not be same as source frequency - ignore
 429.355 +                        break;
 429.356 +                    case 1: // 44100
 429.357 +                    case 2: // 48000
 429.358 +                    case 3: // 48000+
 429.359 +                        $exploded_options = explode(' ', $encoder_options, 4);
 429.360 +                        switch ($exploded_options[0]) {
 429.361 +                            case '--preset':
 429.362 +                            case '--alt-preset':
 429.363 +                                switch ($exploded_options[1]) {
 429.364 +                                    case 'fast':
 429.365 +                                    case 'portable':
 429.366 +                                    case 'medium':
 429.367 +                                    case 'standard':
 429.368 +                                    case 'extreme':
 429.369 +                                    case 'insane':
 429.370 +                                        $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
 429.371 +                                        break;
 429.372 +
 429.373 +                                    default:
 429.374 +                                        static $expected_resampled_rate = array (
 429.375 +                                                'phon+/lw/mw-eu/sw|16000' => 16000,
 429.376 +                                                'mw-us|24000'             => 24000, // 3.95
 429.377 +                                                'mw-us|32000'             => 32000, // 3.93
 429.378 +                                                'mw-us|16000'             => 16000, // 3.92
 429.379 +                                                'phone|16000'             => 16000,
 429.380 +                                                'phone|11025'             => 11025, // 3.94a15
 429.381 +                                                'radio|32000'             => 32000, // 3.94a15
 429.382 +                                                'fm/radio|32000'          => 32000, // 3.92
 429.383 +                                                'fm|32000'                => 32000, // 3.90
 429.384 +                                                'voice|32000'             => 32000);
 429.385 +                                        if (!isset($expected_resampled_rate[$exploded_options[1].'|'.$thisfile_mpeg_audio['sample_rate']])) {
 429.386 +                                            $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
 429.387 +                                        }
 429.388 +                                        break;
 429.389 +                                }
 429.390 +                                break;
 429.391 +
 429.392 +                            case '--r3mix':
 429.393 +                            default:
 429.394 +                                $encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
 429.395 +                                break;
 429.396 +                        }
 429.397 +                        break;
 429.398 +                }
 429.399 +            }
 429.400 +        }
 429.401 +        if (empty($encoder_options) && !empty($info['audio']['bitrate']) && !empty($info['audio']['bitrate_mode'])) {
 429.402 +            //$encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000);
 429.403 +            $encoder_options = strtoupper($info['audio']['bitrate_mode']);
 429.404 +        }
 429.405 +
 429.406 +        return $encoder_options;
 429.407 +    }
 429.408 +
 429.409 +
 429.410 +    
 429.411 +    public function decodeMPEGaudioHeader($fd, $offset, &$info, $recursive_search=true, $scan_as_cbr=false, $fast_mpeg_header_scan=false) {
 429.412 +
 429.413 +        static $mpeg_audio_version_lookup;
 429.414 +        static $mpeg_audio_layer_lookup;
 429.415 +        static $mpeg_audio_bitrate_lookup;
 429.416 +        static $mpeg_audio_frequency_lookup;
 429.417 +        static $mpeg_audio_channel_mode_lookup;
 429.418 +        static $mpeg_audio_mode_extension_lookup;
 429.419 +        static $mpeg_audio_emphasis_lookup;
 429.420 +        if (empty($mpeg_audio_version_lookup)) {
 429.421 +            $mpeg_audio_version_lookup        = getid3_mp3::MPEGaudioVersionarray();
 429.422 +            $mpeg_audio_layer_lookup          = getid3_mp3::MPEGaudioLayerarray();
 429.423 +            $mpeg_audio_bitrate_lookup        = getid3_mp3::MPEGaudioBitratearray();
 429.424 +            $mpeg_audio_frequency_lookup      = getid3_mp3::MPEGaudioFrequencyarray();
 429.425 +            $mpeg_audio_channel_mode_lookup   = getid3_mp3::MPEGaudioChannelModearray();
 429.426 +            $mpeg_audio_mode_extension_lookup = getid3_mp3::MPEGaudioModeExtensionarray();
 429.427 +            $mpeg_audio_emphasis_lookup       = getid3_mp3::MPEGaudioEmphasisarray();
 429.428 +        }
 429.429 +
 429.430 +        if ($offset >= $info['avdataend']) {
 429.431 +
 429.432 +            // non-fatal error: 'end of file encounter looking for MPEG synch'
 429.433 +            return;
 429.434 +            
 429.435 +        }
 429.436 +        fseek($fd, $offset, SEEK_SET);
 429.437 +        $header_string = fread($fd, 226); // LAME header at offset 36 + 190 bytes of Xing/LAME data
 429.438 +
 429.439 +        // MP3 audio frame structure:
 429.440 +        // $aa $aa $aa $aa [$bb $bb] $cc...
 429.441 +        // where $aa..$aa is the four-byte mpeg-audio header (below)
 429.442 +        // $bb $bb is the optional 2-byte CRC
 429.443 +        // and $cc... is the audio data
 429.444 +
 429.445 +        $head4 = substr($header_string, 0, 4);
 429.446 +
 429.447 +        if (isset($mpeg_audio_header_decode_cache[$head4])) {
 429.448 +            $mpeg_header_raw_array= $mpeg_audio_header_decode_cache[$head4];
 429.449 +        } else {
 429.450 +            $mpeg_header_raw_array = getid3_mp3::MPEGaudioHeaderDecode($head4);
 429.451 +            $mpeg_audio_header_decode_cache[$head4] = $mpeg_header_raw_array;
 429.452 +        }
 429.453 +
 429.454 +        // Not in cache
 429.455 +        if (!isset($mpeg_audio_header_valid_cache[$head4])) {
 429.456 +            $mpeg_audio_header_valid_cache[$head4] = getid3_mp3::MPEGaudioHeaderValid($mpeg_header_raw_array, false, false);
 429.457 +        }
 429.458 +
 429.459 +        // shortcut
 429.460 +        if (!isset($info['mpeg']['audio'])) {
 429.461 +            $info['mpeg']['audio'] = array ();
 429.462 +        }
 429.463 +        $thisfile_mpeg_audio = &$info['mpeg']['audio'];
 429.464 +
 429.465 +
 429.466 +        if ($mpeg_audio_header_valid_cache[$head4]) {
 429.467 +            $thisfile_mpeg_audio['raw'] = $mpeg_header_raw_array;
 429.468 +        } else {
 429.469 +            
 429.470 +            // non-fatal error: Invalid MPEG audio header at offset $offset
 429.471 +            return;
 429.472 +        }
 429.473 +
 429.474 +        if (!$fast_mpeg_header_scan) {
 429.475 +
 429.476 +            $thisfile_mpeg_audio['version']       = $mpeg_audio_version_lookup[$thisfile_mpeg_audio['raw']['version']];
 429.477 +            $thisfile_mpeg_audio['layer']         = $mpeg_audio_layer_lookup[$thisfile_mpeg_audio['raw']['layer']];
 429.478 +
 429.479 +            $thisfile_mpeg_audio['channelmode']   = $mpeg_audio_channel_mode_lookup[$thisfile_mpeg_audio['raw']['channelmode']];
 429.480 +            $thisfile_mpeg_audio['channels']      = (($thisfile_mpeg_audio['channelmode'] == 'mono') ? 1 : 2);
 429.481 +            $thisfile_mpeg_audio['sample_rate']   = $mpeg_audio_frequency_lookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['raw']['sample_rate']];
 429.482 +            $thisfile_mpeg_audio['protection']    = !$thisfile_mpeg_audio['raw']['protection'];
 429.483 +            $thisfile_mpeg_audio['private']       = (bool) $thisfile_mpeg_audio['raw']['private'];
 429.484 +            $thisfile_mpeg_audio['modeextension'] = $mpeg_audio_mode_extension_lookup[$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['modeextension']];
 429.485 +            $thisfile_mpeg_audio['copyright']     = (bool) $thisfile_mpeg_audio['raw']['copyright'];
 429.486 +            $thisfile_mpeg_audio['original']      = (bool) $thisfile_mpeg_audio['raw']['original'];
 429.487 +            $thisfile_mpeg_audio['emphasis']      = $mpeg_audio_emphasis_lookup[$thisfile_mpeg_audio['raw']['emphasis']];
 429.488 +
 429.489 +            $info['audio']['channels']    = $thisfile_mpeg_audio['channels'];
 429.490 +            $info['audio']['sample_rate'] = $thisfile_mpeg_audio['sample_rate'];
 429.491 +
 429.492 +            if ($thisfile_mpeg_audio['protection']) {
 429.493 +                $thisfile_mpeg_audio['crc'] = getid3_lib::BigEndian2Int(substr($header_string, 4, 2));
 429.494 +            }
 429.495 +
 429.496 +        }
 429.497 +
 429.498 +        if ($thisfile_mpeg_audio['raw']['bitrate'] == 15) {
 429.499 +            // http://www.hydrogenaudio.org/?act=ST&f=16&t=9682&st=0
 429.500 +            $this->getid3->warning('Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1');
 429.501 +            $thisfile_mpeg_audio['raw']['bitrate'] = 0;
 429.502 +        }
 429.503 +        $thisfile_mpeg_audio['padding'] = (bool) $thisfile_mpeg_audio['raw']['padding'];
 429.504 +        $thisfile_mpeg_audio['bitrate'] = $mpeg_audio_bitrate_lookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['bitrate']];
 429.505 +
 429.506 +        if (($thisfile_mpeg_audio['bitrate'] == 'free') && ($offset == $info['avdataoffset'])) {
 429.507 +            // only skip multiple frame check if free-format bitstream found at beginning of file
 429.508 +            // otherwise is quite possibly simply corrupted data
 429.509 +            $recursive_search = false;
 429.510 +        }
 429.511 +
 429.512 +        // For Layer 2 there are some combinations of bitrate and mode which are not allowed.
 429.513 +        if (!$fast_mpeg_header_scan && ($thisfile_mpeg_audio['layer'] == '2')) {
 429.514 +
 429.515 +            $info['audio']['dataformat'] = 'mp2';
 429.516 +            switch ($thisfile_mpeg_audio['channelmode']) {
 429.517 +
 429.518 +                case 'mono':
 429.519 +                    if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] <= 192000)) {
 429.520 +                        // these are ok
 429.521 +                    } else {
 429.522 +                        
 429.523 +                        // non-fatal error: bitrate not allowed in Layer 2/mono
 429.524 +                        return;
 429.525 +                    }
 429.526 +                    break;
 429.527 +
 429.528 +                case 'stereo':
 429.529 +                case 'joint stereo':
 429.530 +                case 'dual channel':
 429.531 +                    if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] == 64000) || ($thisfile_mpeg_audio['bitrate'] >= 96000)) {
 429.532 +                        // these are ok
 429.533 +                    } else {
 429.534 +                        
 429.535 +                        // non-fatal error: bitrate not allowed in Layer 2/stereo/joint stereo/dual channel
 429.536 +                        return;
 429.537 +                    }
 429.538 +                    break;
 429.539 +
 429.540 +            }
 429.541 +
 429.542 +        }
 429.543 +
 429.544 +
 429.545 +        if ($info['audio']['sample_rate'] > 0) {
 429.546 +            $thisfile_mpeg_audio['framelength'] = getid3_mp3::MPEGaudioFrameLength($thisfile_mpeg_audio['bitrate'], $thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['layer'], (int) $thisfile_mpeg_audio['padding'], $info['audio']['sample_rate']);
 429.547 +        }
 429.548 +
 429.549 +        $next_frame_test_offset = $offset + 1;
 429.550 +        if ($thisfile_mpeg_audio['bitrate'] != 'free') {
 429.551 +
 429.552 +            $info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];
 429.553 +
 429.554 +            if (isset($thisfile_mpeg_audio['framelength'])) {
 429.555 +                $next_frame_test_offset = $offset + $thisfile_mpeg_audio['framelength'];
 429.556 +            } else {
 429.557 +
 429.558 +                // non-fatal error: Frame at offset('.$offset.') is has an invalid frame length.
 429.559 +                return;
 429.560 +            }
 429.561 +
 429.562 +        }
 429.563 +
 429.564 +        $expected_number_of_audio_bytes = 0;
 429.565 +
 429.566 +        ////////////////////////////////////////////////////////////////////////////////////
 429.567 +        // Variable-bitrate headers
 429.568 +
 429.569 +        if (substr($header_string, 4 + 32, 4) == 'VBRI') {
 429.570 +            // Fraunhofer VBR header is hardcoded 'VBRI' at offset 0x24 (36)
 429.571 +            // specs taken from http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html
 429.572 +
 429.573 +            $thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
 429.574 +            $thisfile_mpeg_audio['VBR_method']   = 'Fraunhofer';
 429.575 +            $info['audio']['codec']                = 'Fraunhofer';
 429.576 +
 429.577 +            $side_info_data = substr($header_string, 4 + 2, 32);
 429.578 +
 429.579 +            $fraunhofer_vbr_offset = 36;
 429.580 +
 429.581 +            $thisfile_mpeg_audio['VBR_encoder_version']     = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset +  4, 2)); // VbriVersion
 429.582 +            $thisfile_mpeg_audio['VBR_encoder_delay']       = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset +  6, 2)); // VbriDelay
 429.583 +            $thisfile_mpeg_audio['VBR_quality']             = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset +  8, 2)); // VbriQuality
 429.584 +            $thisfile_mpeg_audio['VBR_bytes']               = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 10, 4)); // VbriStreamBytes
 429.585 +            $thisfile_mpeg_audio['VBR_frames']              = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 14, 4)); // VbriStreamFrames
 429.586 +            $thisfile_mpeg_audio['VBR_seek_offsets']        = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 18, 2)); // VbriTableSize
 429.587 +            $thisfile_mpeg_audio['VBR_seek_scale']          = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 20, 2)); // VbriTableScale
 429.588 +            $thisfile_mpeg_audio['VBR_entry_bytes']         = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 22, 2)); // VbriEntryBytes
 429.589 +            $thisfile_mpeg_audio['VBR_entry_frames']        = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset + 24, 2)); // VbriEntryFrames
 429.590 +
 429.591 +            $expected_number_of_audio_bytes = $thisfile_mpeg_audio['VBR_bytes'];
 429.592 +
 429.593 +            $previous_byte_offset = $offset;
 429.594 +            for ($i = 0; $i < $thisfile_mpeg_audio['VBR_seek_offsets']; $i++) {
 429.595 +                $fraunhofer_offset_n = getid3_lib::BigEndian2Int(substr($header_string, $fraunhofer_vbr_offset, $thisfile_mpeg_audio['VBR_entry_bytes']));
 429.596 +                $fraunhofer_vbr_offset += $thisfile_mpeg_audio['VBR_entry_bytes'];
 429.597 +                $thisfile_mpeg_audio['VBR_offsets_relative'][$i] = ($fraunhofer_offset_n * $thisfile_mpeg_audio['VBR_seek_scale']);
 429.598 +                $thisfile_mpeg_audio['VBR_offsets_absolute'][$i] = ($fraunhofer_offset_n * $thisfile_mpeg_audio['VBR_seek_scale']) + $previous_byte_offset;
 429.599 +                $previous_byte_offset += $fraunhofer_offset_n;
 429.600 +            }
 429.601 +
 429.602 +
 429.603 +        } else {
 429.604 +
 429.605 +            // Xing VBR header is hardcoded 'Xing' at a offset 0x0D (13), 0x15 (21) or 0x24 (36)
 429.606 +            // depending on MPEG layer and number of channels
 429.607 +
 429.608 +            $vbr_id_offset = getid3_mp3::XingVBRidOffset($thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['channelmode']);
 429.609 +            $side_info_data = substr($header_string, 4 + 2, $vbr_id_offset - 4);
 429.610 +
 429.611 +            if ((substr($header_string, $vbr_id_offset, strlen('Xing')) == 'Xing') || (substr($header_string, $vbr_id_offset, strlen('Info')) == 'Info')) {
 429.612 +                // 'Xing' is traditional Xing VBR frame
 429.613 +                // 'Info' is LAME-encoded CBR (This was done to avoid CBR files to be recognized as traditional Xing VBR files by some decoders.)
 429.614 +                // 'Info' *can* legally be used to specify a VBR file as well, however.
 429.615 +
 429.616 +                // http://www.multiweb.cz/twoinches/MP3inside.htm
 429.617 +                //00..03 = "Xing" or "Info"
 429.618 +                //04..07 = Flags:
 429.619 +                //  0x01  Frames Flag     set if value for number of frames in file is stored
 429.620 +                //  0x02  Bytes Flag      set if value for filesize in bytes is stored
 429.621 +                //  0x04  TOC Flag        set if values for TOC are stored
 429.622 +                //  0x08  VBR Scale Flag  set if values for VBR scale is stored
 429.623 +                //08..11  Frames: Number of frames in file (including the first Xing/Info one)
 429.624 +                //12..15  Bytes:  File length in Bytes
 429.625 +                //16..115  TOC (Table of Contents):
 429.626 +                //  Contains of 100 indexes (one Byte length) for easier lookup in file. Approximately solves problem with moving inside file.
 429.627 +                //  Each Byte has a value according this formula:
 429.628 +                //  (TOC[i] / 256) * fileLenInBytes
 429.629 +                //  So if song lasts eg. 240 sec. and you want to jump to 60. sec. (and file is 5 000 000 Bytes length) you can use:
 429.630 +                //  TOC[(60/240)*100] = TOC[25]
 429.631 +                //  and corresponding Byte in file is then approximately at:
 429.632 +                //  (TOC[25]/256) * 5000000
 429.633 +                //116..119  VBR Scale
 429.634 +
 429.635 +
 429.636 +                // should be safe to leave this at 'vbr' and let it be overriden to 'cbr' if a CBR preset/mode is used by LAME
 429.637 +                $thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
 429.638 +                $thisfile_mpeg_audio['VBR_method']   = 'Xing';
 429.639 +
 429.640 +                $thisfile_mpeg_audio['xing_flags_raw'] = getid3_lib::BigEndian2Int(substr($header_string, $vbr_id_offset + 4, 4));
 429.641 +
 429.642 +                $thisfile_mpeg_audio['xing_flags']['frames']    = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000001);
 429.643 +                $thisfile_mpeg_audio['xing_flags']['bytes']     = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000002);
 429.644 +                $thisfile_mpeg_audio['xing_flags']['toc']       = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000004);
 429.645 +                $thisfile_mpeg_audio['xing_flags']['vbr_scale'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000008);
 429.646 +
 429.647 +                if ($thisfile_mpeg_audio['xing_flags']['frames']) {
 429.648 +                    $thisfile_mpeg_audio['VBR_frames'] = getid3_lib::BigEndian2Int(substr($header_string, $vbr_id_offset +  8, 4));
 429.649 +                }
 429.650 +                if ($thisfile_mpeg_audio['xing_flags']['bytes']) {
 429.651 +                    $thisfile_mpeg_audio['VBR_bytes']  = getid3_lib::BigEndian2Int(substr($header_string, $vbr_id_offset + 12, 4));
 429.652 +                }
 429.653 +
 429.654 +                if (!empty($thisfile_mpeg_audio['VBR_frames']) && !empty($thisfile_mpeg_audio['VBR_bytes'])) {
 429.655 +
 429.656 +                    $frame_lengthfloat = $thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames'];
 429.657 +
 429.658 +                    if ($thisfile_mpeg_audio['layer'] == '1') {
 429.659 +                        // BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12
 429.660 +                        $info['audio']['bitrate'] = ($frame_lengthfloat / 4) * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 12;
 429.661 +                    } else {
 429.662 +                        // Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144
 429.663 +                        $info['audio']['bitrate'] = $frame_lengthfloat * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 144;
 429.664 +                    }
 429.665 +                    $thisfile_mpeg_audio['framelength'] = floor($frame_lengthfloat);
 429.666 +                }
 429.667 +
 429.668 +                if ($thisfile_mpeg_audio['xing_flags']['toc']) {
 429.669 +                    $lame_toc_data = substr($header_string, $vbr_id_offset + 16, 100);
 429.670 +                    for ($i = 0; $i < 100; $i++) {
 429.671 +                        $thisfile_mpeg_audio['toc'][$i] = ord($lame_toc_data{$i});
 429.672 +                    }
 429.673 +                }
 429.674 +                if ($thisfile_mpeg_audio['xing_flags']['vbr_scale']) {
 429.675 +                    $thisfile_mpeg_audio['VBR_scale'] = getid3_lib::BigEndian2Int(substr($header_string, $vbr_id_offset + 116, 4));
 429.676 +                }
 429.677 +
 429.678 +
 429.679 +                // http://gabriel.mp3-tech.org/mp3infotag.html
 429.680 +                if (substr($header_string, $vbr_id_offset + 120, 4) == 'LAME') {
 429.681 +
 429.682 +                    // shortcut
 429.683 +                    $thisfile_mpeg_audio['LAME'] = array ();
 429.684 +                    $thisfile_mpeg_audio_lame    = &$thisfile_mpeg_audio['LAME'];
 429.685 +
 429.686 +
 429.687 +                    $thisfile_mpeg_audio_lame['long_version']  = substr($header_string, $vbr_id_offset + 120, 20);
 429.688 +                    $thisfile_mpeg_audio_lame['short_version'] = substr($thisfile_mpeg_audio_lame['long_version'], 0, 9);
 429.689 +
 429.690 +                    if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
 429.691 +
 429.692 +                        // extra 11 chars are not part of version string when LAMEtag present
 429.693 +                        unset($thisfile_mpeg_audio_lame['long_version']);
 429.694 +
 429.695 +                        // It the LAME tag was only introduced in LAME v3.90
 429.696 +                        // http://www.hydrogenaudio.org/?act=ST&f=15&t=9933
 429.697 +
 429.698 +                        // Offsets of various bytes in http://gabriel.mp3-tech.org/mp3infotag.html
 429.699 +                        // are assuming a 'Xing' identifier offset of 0x24, which is the case for
 429.700 +                        // MPEG-1 non-mono, but not for other combinations
 429.701 +                        $lame_tag_offset_contant = $vbr_id_offset - 0x24;
 429.702 +
 429.703 +                        // shortcuts
 429.704 +                        $thisfile_mpeg_audio_lame['RGAD']    = array ('track'=>array(), 'album'=>array());
 429.705 +                        $thisfile_mpeg_audio_lame_rgad       = &$thisfile_mpeg_audio_lame['RGAD'];
 429.706 +                        $thisfile_mpeg_audio_lame_rgad_track = &$thisfile_mpeg_audio_lame_rgad['track'];
 429.707 +                        $thisfile_mpeg_audio_lame_rgad_album = &$thisfile_mpeg_audio_lame_rgad['album'];
 429.708 +                        $thisfile_mpeg_audio_lame['raw']     = array ();
 429.709 +                        $thisfile_mpeg_audio_lame_raw        = &$thisfile_mpeg_audio_lame['raw'];
 429.710 +
 429.711 +                        // byte $9B  VBR Quality
 429.712 +                        // This field is there to indicate a quality level, although the scale was not precised in the original Xing specifications.
 429.713 +                        // Actually overwrites original Xing bytes
 429.714 +                        unset($thisfile_mpeg_audio['VBR_scale']);
 429.715 +                        $thisfile_mpeg_audio_lame['vbr_quality'] = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0x9B, 1));
 429.716 +
 429.717 +                        // bytes $9C-$A4  Encoder short VersionString
 429.718 +                        $thisfile_mpeg_audio_lame['short_version'] = substr($header_string, $lame_tag_offset_contant + 0x9C, 9);
 429.719 +
 429.720 +                        // byte $A5  Info Tag revision + VBR method
 429.721 +                        $lame_tagRevisionVBRmethod = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xA5, 1));
 429.722 +
 429.723 +                        $thisfile_mpeg_audio_lame['tag_revision']      = ($lame_tagRevisionVBRmethod & 0xF0) >> 4;
 429.724 +                        $thisfile_mpeg_audio_lame_raw['vbr_method'] =  $lame_tagRevisionVBRmethod & 0x0F;
 429.725 +                        $thisfile_mpeg_audio_lame['vbr_method']        = getid3_mp3::LAMEvbrMethodLookup($thisfile_mpeg_audio_lame_raw['vbr_method']);
 429.726 +                        $thisfile_mpeg_audio['bitrate_mode']           = substr($thisfile_mpeg_audio_lame['vbr_method'], 0, 3); // usually either 'cbr' or 'vbr', but truncates 'vbr-old / vbr-rh' to 'vbr'
 429.727 +
 429.728 +                        // byte $A6  Lowpass filter value
 429.729 +                        $thisfile_mpeg_audio_lame['lowpass_frequency'] = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xA6, 1)) * 100;
 429.730 +
 429.731 +                        // bytes $A7-$AE  Replay Gain
 429.732 +                        // http://privatewww.essex.ac.uk/~djmrob/replaygain/rg_data_format.html
 429.733 +                        // bytes $A7-$AA : 32 bit floating point "Peak signal amplitude"
 429.734 +                        if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.94b') {
 429.735 +                            // LAME 3.94a16 and later - 9.23 fixed point
 429.736 +                            // ie 0x0059E2EE / (2^23) = 5890798 / 8388608 = 0.7022378444671630859375
 429.737 +                            $thisfile_mpeg_audio_lame_rgad['peak_amplitude'] = (float) ((getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xA7, 4))) / 8388608);
 429.738 +                        } else {
 429.739 +                            // LAME 3.94a15 and earlier - 32-bit floating point
 429.740 +                            // Actually 3.94a16 will fall in here too and be WRONG, but is hard to detect 3.94a16 vs 3.94a15
 429.741 +                            $thisfile_mpeg_audio_lame_rgad['peak_amplitude'] = getid3_lib::LittleEndian2Float(substr($header_string, $lame_tag_offset_contant + 0xA7, 4));
 429.742 +                        }
 429.743 +                        if ($thisfile_mpeg_audio_lame_rgad['peak_amplitude'] == 0) {
 429.744 +                            unset($thisfile_mpeg_audio_lame_rgad['peak_amplitude']);
 429.745 +                        } else {
 429.746 +                            $thisfile_mpeg_audio_lame_rgad['peak_db'] = 20 * log10($thisfile_mpeg_audio_lame_rgad['peak_amplitude']);
 429.747 +                        }
 429.748 +
 429.749 +                        $thisfile_mpeg_audio_lame_raw['RGAD_track']      =   getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xAB, 2));
 429.750 +                        $thisfile_mpeg_audio_lame_raw['RGAD_album']      =   getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xAD, 2));
 429.751 +
 429.752 +
 429.753 +                        if ($thisfile_mpeg_audio_lame_raw['RGAD_track'] != 0) {
 429.754 +
 429.755 +                            $thisfile_mpeg_audio_lame_rgad_track['raw']['name']        = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0xE000) >> 13;
 429.756 +                            $thisfile_mpeg_audio_lame_rgad_track['raw']['originator']  = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x1C00) >> 10;
 429.757 +                            $thisfile_mpeg_audio_lame_rgad_track['raw']['sign_bit']    = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x0200) >> 9;
 429.758 +                            $thisfile_mpeg_audio_lame_rgad_track['raw']['gain_adjust'] =  $thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x01FF;
 429.759 +                            $thisfile_mpeg_audio_lame_rgad_track['name']       = getid3_lib_replaygain::NameLookup($thisfile_mpeg_audio_lame_rgad_track['raw']['name']);
 429.760 +                            $thisfile_mpeg_audio_lame_rgad_track['originator'] = getid3_lib_replaygain::OriginatorLookup($thisfile_mpeg_audio_lame_rgad_track['raw']['originator']);
 429.761 +                            $thisfile_mpeg_audio_lame_rgad_track['gain_db']    = getid3_lib_replaygain::AdjustmentLookup($thisfile_mpeg_audio_lame_rgad_track['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_rgad_track['raw']['sign_bit']);
 429.762 +
 429.763 +                            if (!empty($thisfile_mpeg_audio_lame_rgad['peak_amplitude'])) {
 429.764 +                                $info['replay_gain']['track']['peak']   = $thisfile_mpeg_audio_lame_rgad['peak_amplitude'];
 429.765 +                            }
 429.766 +                            $info['replay_gain']['track']['originator'] = $thisfile_mpeg_audio_lame_rgad_track['originator'];
 429.767 +                            $info['replay_gain']['track']['adjustment'] = $thisfile_mpeg_audio_lame_rgad_track['gain_db'];
 429.768 +                        } else {
 429.769 +                            unset($thisfile_mpeg_audio_lame_rgad['track']);
 429.770 +                        }
 429.771 +                        if ($thisfile_mpeg_audio_lame_raw['RGAD_album'] != 0) {
 429.772 +
 429.773 +                            $thisfile_mpeg_audio_lame_rgad_album['raw']['name']        = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0xE000) >> 13;
 429.774 +                            $thisfile_mpeg_audio_lame_rgad_album['raw']['originator']  = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x1C00) >> 10;
 429.775 +                            $thisfile_mpeg_audio_lame_rgad_album['raw']['sign_bit']    = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x0200) >> 9;
 429.776 +                            $thisfile_mpeg_audio_lame_rgad_album['raw']['gain_adjust'] =  $thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x01FF;
 429.777 +                            $thisfile_mpeg_audio_lame_rgad_album['name']       = getid3_lib_replaygain::NameLookup($thisfile_mpeg_audio_lame_rgad_album['raw']['name']);
 429.778 +                            $thisfile_mpeg_audio_lame_rgad_album['originator'] = getid3_lib_replaygain::OriginatorLookup($thisfile_mpeg_audio_lame_rgad_album['raw']['originator']);
 429.779 +                            $thisfile_mpeg_audio_lame_rgad_album['gain_db']    = getid3_lib_replaygain::AdjustmentLookup($thisfile_mpeg_audio_lame_rgad_album['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_rgad_album['raw']['sign_bit']);
 429.780 +
 429.781 +                            if (!empty($thisfile_mpeg_audio_lame_rgad['peak_amplitude'])) {
 429.782 +                                $info['replay_gain']['album']['peak']   = $thisfile_mpeg_audio_lame_rgad['peak_amplitude'];
 429.783 +                            }
 429.784 +                            $info['replay_gain']['album']['originator'] = $thisfile_mpeg_audio_lame_rgad_album['originator'];
 429.785 +                            $info['replay_gain']['album']['adjustment'] = $thisfile_mpeg_audio_lame_rgad_album['gain_db'];
 429.786 +                        } else {
 429.787 +                            unset($thisfile_mpeg_audio_lame_rgad['album']);
 429.788 +                        }
 429.789 +                        if (empty($thisfile_mpeg_audio_lame_rgad)) {
 429.790 +                            unset($thisfile_mpeg_audio_lame['RGAD']);
 429.791 +                        }
 429.792 +
 429.793 +
 429.794 +                        // byte $AF  Encoding flags + ATH Type
 429.795 +                        $encoding_flags_ath_type = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xAF, 1));
 429.796 +                        $thisfile_mpeg_audio_lame['encoding_flags']['nspsytune']   = (bool) ($encoding_flags_ath_type & 0x10);
 429.797 +                        $thisfile_mpeg_audio_lame['encoding_flags']['nssafejoint'] = (bool) ($encoding_flags_ath_type & 0x20);
 429.798 +                        $thisfile_mpeg_audio_lame['encoding_flags']['nogap_next']  = (bool) ($encoding_flags_ath_type & 0x40);
 429.799 +                        $thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev']  = (bool) ($encoding_flags_ath_type & 0x80);
 429.800 +                        $thisfile_mpeg_audio_lame['ath_type']                      =         $encoding_flags_ath_type & 0x0F;
 429.801 +
 429.802 +                        // byte $B0  if ABR {specified bitrate} else {minimal bitrate}
 429.803 +                        $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB0, 1));
 429.804 +                        if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 2) { // Average BitRate (ABR)
 429.805 +                            $thisfile_mpeg_audio_lame['bitrate_abr'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'];
 429.806 +                        } elseif ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) { // Constant BitRate (CBR)
 429.807 +                            // ignore
 429.808 +                        } elseif ($thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] > 0) { // Variable BitRate (VBR) - minimum bitrate
 429.809 +                            $thisfile_mpeg_audio_lame['bitrate_min'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'];
 429.810 +                        }
 429.811 +
 429.812 +                        // bytes $B1-$B3  Encoder delays
 429.813 +                        $encoder_delays = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB1, 3));
 429.814 +                        $thisfile_mpeg_audio_lame['encoder_delay'] = ($encoder_delays & 0xFFF000) >> 12;
 429.815 +                        $thisfile_mpeg_audio_lame['end_padding']   =  $encoder_delays & 0x000FFF;
 429.816 +
 429.817 +                        // byte $B4  Misc
 429.818 +                        $misc_byte = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB4, 1));
 429.819 +                        $thisfile_mpeg_audio_lame_raw['noise_shaping']       = ($misc_byte & 0x03);
 429.820 +                        $thisfile_mpeg_audio_lame_raw['stereo_mode']         = ($misc_byte & 0x1C) >> 2;
 429.821 +                        $thisfile_mpeg_audio_lame_raw['not_optimal_quality'] = ($misc_byte & 0x20) >> 5;
 429.822 +                        $thisfile_mpeg_audio_lame_raw['source_sample_freq']  = ($misc_byte & 0xC0) >> 6;
 429.823 +                        $thisfile_mpeg_audio_lame['noise_shaping']           = $thisfile_mpeg_audio_lame_raw['noise_shaping'];
 429.824 +                        $thisfile_mpeg_audio_lame['stereo_mode']             = getid3_mp3::LAMEmiscStereoModeLookup($thisfile_mpeg_audio_lame_raw['stereo_mode']);
 429.825 +                        $thisfile_mpeg_audio_lame['not_optimal_quality']     = (bool) $thisfile_mpeg_audio_lame_raw['not_optimal_quality'];
 429.826 +                        $thisfile_mpeg_audio_lame['source_sample_freq']      = getid3_mp3::LAMEmiscSourceSampleFrequencyLookup($thisfile_mpeg_audio_lame_raw['source_sample_freq']);
 429.827 +
 429.828 +                        // byte $B5  MP3 Gain
 429.829 +                        $thisfile_mpeg_audio_lame_raw['mp3_gain']   = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB5, 1), false, true);
 429.830 +                        $thisfile_mpeg_audio_lame['mp3_gain_db']     = (20 * log10(2) / 4) * $thisfile_mpeg_audio_lame_raw['mp3_gain'];
 429.831 +                        $thisfile_mpeg_audio_lame['mp3_gain_factor'] = pow(2, ($thisfile_mpeg_audio_lame['mp3_gain_db'] / 6));
 429.832 +
 429.833 +                        // bytes $B6-$B7  Preset and surround info
 429.834 +                        $PresetSurroundBytes = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB6, 2));
 429.835 +                        // Reserved                                                    = ($PresetSurroundBytes & 0xC000);
 429.836 +                        $thisfile_mpeg_audio_lame_raw['surround_info'] = ($PresetSurroundBytes & 0x3800);
 429.837 +                        $thisfile_mpeg_audio_lame['surround_info']     = getid3_mp3::LAMEsurroundInfoLookup($thisfile_mpeg_audio_lame_raw['surround_info']);
 429.838 +                        $thisfile_mpeg_audio_lame['preset_used_id']    = ($PresetSurroundBytes & 0x07FF);
 429.839 +                        $thisfile_mpeg_audio_lame['preset_used']       = getid3_mp3::LAMEpresetUsedLookup($thisfile_mpeg_audio_lame);
 429.840 +                        if (!empty($thisfile_mpeg_audio_lame['preset_used_id']) && empty($thisfile_mpeg_audio_lame['preset_used'])) {
 429.841 +                            $this->getid3->warning('Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org');
 429.842 +                        }
 429.843 +                        if (($thisfile_mpeg_audio_lame['short_version'] == 'LAME3.90.') && !empty($thisfile_mpeg_audio_lame['preset_used_id'])) {
 429.844 +                            // this may change if 3.90.4 ever comes out
 429.845 +                            $thisfile_mpeg_audio_lame['short_version'] = 'LAME3.90.3';
 429.846 +                        }
 429.847 +
 429.848 +                        // bytes $B8-$BB  MusicLength
 429.849 +                        $thisfile_mpeg_audio_lame['audio_bytes'] = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xB8, 4));
 429.850 +                        $expected_number_of_audio_bytes = (($thisfile_mpeg_audio_lame['audio_bytes'] > 0) ? $thisfile_mpeg_audio_lame['audio_bytes'] : $thisfile_mpeg_audio['VBR_bytes']);
 429.851 +
 429.852 +                        // bytes $BC-$BD  MusicCRC
 429.853 +                        $thisfile_mpeg_audio_lame['music_crc']    = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xBC, 2));
 429.854 +
 429.855 +                        // bytes $BE-$BF  CRC-16 of Info Tag
 429.856 +                        $thisfile_mpeg_audio_lame['lame_tag_crc'] = getid3_lib::BigEndian2Int(substr($header_string, $lame_tag_offset_contant + 0xBE, 2));
 429.857 +
 429.858 +
 429.859 +                        // LAME CBR
 429.860 +                        if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) {
 429.861 +
 429.862 +                            $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
 429.863 +                            $thisfile_mpeg_audio['bitrate'] = getid3_mp3::ClosestStandardMP3Bitrate($thisfile_mpeg_audio['bitrate']);
 429.864 +                            $info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];
 429.865 +
 429.866 +                        }
 429.867 +
 429.868 +                    }
 429.869 +                }
 429.870 +
 429.871 +            } else {
 429.872 +
 429.873 +                // not Fraunhofer or Xing VBR methods, most likely CBR (but could be VBR with no header)
 429.874 +                $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
 429.875 +                if ($recursive_search) {
 429.876 +                    $thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
 429.877 +                    if (getid3_mp3::RecursiveFrameScanning($fd, $info, $offset, $next_frame_test_offset, true)) {
 429.878 +                        $recursive_search = false;
 429.879 +                        $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
 429.880 +                    }
 429.881 +                    if ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') {
 429.882 +                        $this->getid3->warning('VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.');
 429.883 +                    }
 429.884 +                }
 429.885 +
 429.886 +            }
 429.887 +
 429.888 +        }
 429.889 +
 429.890 +        if (($expected_number_of_audio_bytes > 0) && ($expected_number_of_audio_bytes != ($info['avdataend'] - $info['avdataoffset']))) {
 429.891 +            if ($expected_number_of_audio_bytes > ($info['avdataend'] - $info['avdataoffset'])) {
 429.892 +                if (($expected_number_of_audio_bytes - ($info['avdataend'] - $info['avdataoffset'])) == 1) {
 429.893 +                    $this->getid3->warning('Last byte of data truncated (this is a known bug in Meracl ID3 Tag Writer before v1.3.5)');
 429.894 +                } else {
 429.895 +                    $this->getid3->warning('Probable truncated file: expecting '.$expected_number_of_audio_bytes.' bytes of audio data, only found '.($info['avdataend'] - $info['avdataoffset']).' (short by '.($expected_number_of_audio_bytes - ($info['avdataend'] - $info['avdataoffset'])).' bytes)');
 429.896 +                }
 429.897 +            } else {
 429.898 +                if ((($info['avdataend'] - $info['avdataoffset']) - $expected_number_of_audio_bytes) == 1) {
 429.899 +                        $info['avdataend']--;
 429.900 +                } else {
 429.901 +                    $this->getid3->warning('Too much data in file: expecting '.$expected_number_of_audio_bytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $expected_number_of_audio_bytes).' bytes too many)');
 429.902 +                }
 429.903 +            }
 429.904 +        }
 429.905 +
 429.906 +        if (($thisfile_mpeg_audio['bitrate'] == 'free') && empty($info['audio']['bitrate'])) {
 429.907 +            if (($offset == $info['avdataoffset']) && empty($thisfile_mpeg_audio['VBR_frames'])) {
 429.908 +                $frame_byte_length = getid3_mp3::FreeFormatFrameLength($fd, $offset, $info, true);
 429.909 +                if ($frame_byte_length > 0) {
 429.910 +                    $thisfile_mpeg_audio['framelength'] = $frame_byte_length;
 429.911 +                    if ($thisfile_mpeg_audio['layer'] == '1') {
 429.912 +                        // BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12
 429.913 +                        $info['audio']['bitrate'] = ((($frame_byte_length / 4) - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 12;
 429.914 +                    } else {
 429.915 +                        // Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144
 429.916 +                        $info['audio']['bitrate'] = (($frame_byte_length - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 144;
 429.917 +                    }
 429.918 +                } else {
 429.919 +                    
 429.920 +                    // non-fatal error: Error calculating frame length of free-format MP3 without Xing/LAME header.
 429.921 +                    return;
 429.922 +                }
 429.923 +            }
 429.924 +        }
 429.925 +
 429.926 +        if (@$thisfile_mpeg_audio['VBR_frames']) {
 429.927 +            switch ($thisfile_mpeg_audio['bitrate_mode']) {
 429.928 +                case 'vbr':
 429.929 +                case 'abr':
 429.930 +                    if (($thisfile_mpeg_audio['version'] == '1') && ($thisfile_mpeg_audio['layer'] == 1)) {
 429.931 +                        $thisfile_mpeg_audio['VBR_bitrate'] = ((@$thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($info['audio']['sample_rate'] / 384);
 429.932 +                    } elseif ((($thisfile_mpeg_audio['version'] == '2') || ($thisfile_mpeg_audio['version'] == '2.5')) && ($thisfile_mpeg_audio['layer'] == 3)) {
 429.933 +                        $thisfile_mpeg_audio['VBR_bitrate'] = ((@$thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($info['audio']['sample_rate'] / 576);
 429.934 +                    } else {
 429.935 +                        $thisfile_mpeg_audio['VBR_bitrate'] = ((@$thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($info['audio']['sample_rate'] / 1152);
 429.936 +                    }
 429.937 +                    if ($thisfile_mpeg_audio['VBR_bitrate'] > 0) {
 429.938 +                        $info['audio']['bitrate']         = $thisfile_mpeg_audio['VBR_bitrate'];
 429.939 +                        $thisfile_mpeg_audio['bitrate'] = $thisfile_mpeg_audio['VBR_bitrate']; // to avoid confusion
 429.940 +                    }
 429.941 +                    break;
 429.942 +            }
 429.943 +        }
 429.944 +
 429.945 +        // End variable-bitrate headers
 429.946 +        ////////////////////////////////////////////////////////////////////////////////////
 429.947 +
 429.948 +        if ($recursive_search) {
 429.949 +
 429.950 +            if (!getid3_mp3::RecursiveFrameScanning($fd, $info, $offset, $next_frame_test_offset, $scan_as_cbr)) {
 429.951 +                return false;
 429.952 +            }
 429.953 +
 429.954 +        }
 429.955 +
 429.956 +        return true;
 429.957 +    }
 429.958 +
 429.959 +    
 429.960 +    
 429.961 +    public function RecursiveFrameScanning(&$fd, &$info, &$offset, &$next_frame_test_offset, $scan_as_cbr) {
 429.962 +        for ($i = 0; $i < getid3_mp3::VALID_CHECK_FRAMES; $i++) {
 429.963 +            // check next getid3_mp3::VALID_CHECK_FRAMES frames for validity, to make sure we haven't run across a false synch
 429.964 +            if (($next_frame_test_offset + 4) >= $info['avdataend']) {
 429.965 +                // end of file
 429.966 +                return true;
 429.967 +            }
 429.968 +
 429.969 +            $next_frame_test_array = array ('avdataend' => $info['avdataend'], 'avdataoffset' => $info['avdataoffset']);
 429.970 +            if ($this->decodeMPEGaudioHeader($fd, $next_frame_test_offset, $next_frame_test_array, false)) {
 429.971 +                if ($scan_as_cbr) {
 429.972 +                    // force CBR mode, used for trying to pick out invalid audio streams with
 429.973 +                    // valid(?) VBR headers, or VBR streams with no VBR header
 429.974 +                    if (!isset($next_frame_test_array['mpeg']['audio']['bitrate']) || !isset($info['mpeg']['audio']['bitrate']) || ($next_frame_test_array['mpeg']['audio']['bitrate'] != $info['mpeg']['audio']['bitrate'])) {
 429.975 +                        return false;
 429.976 +                    }
 429.977 +                }
 429.978 +
 429.979 +
 429.980 +                // next frame is OK, get ready to check the one after that
 429.981 +                if (isset($next_frame_test_array['mpeg']['audio']['framelength']) && ($next_frame_test_array['mpeg']['audio']['framelength'] > 0)) {
 429.982 +                    $next_frame_test_offset += $next_frame_test_array['mpeg']['audio']['framelength'];
 429.983 +                } else {
 429.984 +                    
 429.985 +                    // non-fatal error: Frame at offset $offset has an invalid frame length.
 429.986 +                    return;
 429.987 +                }
 429.988 +
 429.989 +            } else {
 429.990 +
 429.991 +                // non-fatal error: Next frame is not valid.
 429.992 +                return;
 429.993 +            }
 429.994 +        }
 429.995 +        return true;
 429.996 +    }
 429.997 +
 429.998 +    
 429.999 +    
429.1000 +    public function FreeFormatFrameLength($fd, $offset, &$info, $deep_scan=false) {
429.1001 +        fseek($fd, $offset, SEEK_SET);
429.1002 +        $mpeg_audio_data = fread($fd, 32768);
429.1003 +
429.1004 +        $sync_pattern1 = substr($mpeg_audio_data, 0, 4);
429.1005 +        // may be different pattern due to padding
429.1006 +        $sync_pattern2 = $sync_pattern1{0}.$sync_pattern1{1}.chr(ord($sync_pattern1{2}) | 0x02).$sync_pattern1{3};
429.1007 +        if ($sync_pattern2 === $sync_pattern1) {
429.1008 +            $sync_pattern2 = $sync_pattern1{0}.$sync_pattern1{1}.chr(ord($sync_pattern1{2}) & 0xFD).$sync_pattern1{3};
429.1009 +        }
429.1010 +
429.1011 +        $frame_length = false;
429.1012 +        $frame_length1 = strpos($mpeg_audio_data, $sync_pattern1, 4);
429.1013 +        $frame_length2 = strpos($mpeg_audio_data, $sync_pattern2, 4);
429.1014 +        if ($frame_length1 > 4) {
429.1015 +            $frame_length = $frame_length1;
429.1016 +        }
429.1017 +        if (($frame_length2 > 4) && ($frame_length2 < $frame_length1)) {
429.1018 +            $frame_length = $frame_length2;
429.1019 +        }
429.1020 +        if (!$frame_length) {
429.1021 +
429.1022 +            // LAME 3.88 has a different value for modeextension on the first frame vs the rest
429.1023 +            $frame_length1 = strpos($mpeg_audio_data, substr($sync_pattern1, 0, 3), 4);
429.1024 +            $frame_length2 = strpos($mpeg_audio_data, substr($sync_pattern2, 0, 3), 4);
429.1025 +
429.1026 +            if ($frame_length1 > 4) {
429.1027 +                $frame_length = $frame_length1;
429.1028 +            }
429.1029 +            if (($frame_length2 > 4) && ($frame_length2 < $frame_length1)) {
429.1030 +                $frame_length = $frame_length2;
429.1031 +            }
429.1032 +            if (!$frame_length) {
429.1033 +                throw new getid3_exception('Cannot find next free-format synch pattern ('.getid3_lib::PrintHexBytes($sync_pattern1).' or '.getid3_lib::PrintHexBytes($sync_pattern2).') after offset '.$offset);
429.1034 +            } else {
429.1035 +                $this->getid3->warning('ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)');
429.1036 +                $info['audio']['codec']   = 'LAME';
429.1037 +                $info['audio']['encoder'] = 'LAME3.88';
429.1038 +                $sync_pattern1 = substr($sync_pattern1, 0, 3);
429.1039 +                $sync_pattern2 = substr($sync_pattern2, 0, 3);
429.1040 +            }
429.1041 +        }
429.1042 +
429.1043 +        if ($deep_scan) {
429.1044 +
429.1045 +            $actual_frame_length_values = array ();
429.1046 +            $next_offset = $offset + $frame_length;
429.1047 +            while ($next_offset < ($info['avdataend'] - 6)) {
429.1048 +                fseek($fd, $next_offset - 1, SEEK_SET);
429.1049 +                $NextSyncPattern = fread($fd, 6);
429.1050 +                if ((substr($NextSyncPattern, 1, strlen($sync_pattern1)) == $sync_pattern1) || (substr($NextSyncPattern, 1, strlen($sync_pattern2)) == $sync_pattern2)) {
429.1051 +                    // good - found where expected
429.1052 +                    $actual_frame_length_values[] = $frame_length;
429.1053 +                } elseif ((substr($NextSyncPattern, 0, strlen($sync_pattern1)) == $sync_pattern1) || (substr($NextSyncPattern, 0, strlen($sync_pattern2)) == $sync_pattern2)) {
429.1054 +                    // ok - found one byte earlier than expected (last frame wasn't padded, first frame was)
429.1055 +                    $actual_frame_length_values[] = ($frame_length - 1);
429.1056 +                    $next_offset--;
429.1057 +                } elseif ((substr($NextSyncPattern, 2, strlen($sync_pattern1)) == $sync_pattern1) || (substr($NextSyncPattern, 2, strlen($sync_pattern2)) == $sync_pattern2)) {
429.1058 +                    // ok - found one byte later than expected (last frame was padded, first frame wasn't)
429.1059 +                    $actual_frame_length_values[] = ($frame_length + 1);
429.1060 +                    $next_offset++;
429.1061 +                } else {
429.1062 +                    throw new getid3_exception('Did not find expected free-format sync pattern at offset '.$next_offset);
429.1063 +                }
429.1064 +                $next_offset += $frame_length;
429.1065 +            }
429.1066 +            if (count($actual_frame_length_values) > 0) {
429.1067 +                $frame_length = intval(round(array_sum($actual_frame_length_values) / count($actual_frame_length_values)));
429.1068 +            }
429.1069 +        }
429.1070 +        return $frame_length;
429.1071 +    }
429.1072 +
429.1073 +    
429.1074 +
429.1075 +    public function getOnlyMPEGaudioInfo($fd, &$info, $avdata_offset, $bit_rate_histogram=false) {
429.1076 +
429.1077 +        // looks for synch, decodes MPEG audio header
429.1078 +     
429.1079 +        fseek($fd, $avdata_offset, SEEK_SET);
429.1080 +        
429.1081 +        $sync_seek_buffer_size = min(128 * 1024, $info['avdataend'] - $avdata_offset);
429.1082 +        $header = fread($fd, $sync_seek_buffer_size);
429.1083 +        $sync_seek_buffer_size = strlen($header);
429.1084 +        $synch_seek_offset = 0;
429.1085 +        
429.1086 +        static $mpeg_audio_version_lookup;
429.1087 +        static $mpeg_audio_layer_lookup;
429.1088 +        static $mpeg_audio_bitrate_lookup;
429.1089 +        if (empty($mpeg_audio_version_lookup)) {
429.1090 +            $mpeg_audio_version_lookup = getid3_mp3::MPEGaudioVersionarray();
429.1091 +            $mpeg_audio_layer_lookup   = getid3_mp3::MPEGaudioLayerarray();
429.1092 +            $mpeg_audio_bitrate_lookup = getid3_mp3::MPEGaudioBitratearray();
429.1093 +
429.1094 +        }
429.1095 +
429.1096 +        while ($synch_seek_offset < $sync_seek_buffer_size) {
429.1097 +     
429.1098 +            if ((($avdata_offset + $synch_seek_offset)  < $info['avdataend']) && !feof($fd)) {
429.1099 +     
429.1100 +                // if a synch's not found within the first 128k bytes, then give up               
429.1101 +                if ($synch_seek_offset > $sync_seek_buffer_size) {
429.1102 +                    throw new getid3_exception('Could not find valid MPEG audio synch within the first '.round($sync_seek_buffer_size / 1024).'kB');
429.1103 +                } 
429.1104 +              
429.1105 +                if (feof($fd)) {
429.1106 +                    throw new getid3_exception('Could not find valid MPEG audio synch before end of file');
429.1107 +                }
429.1108 +            }
429.1109 +     
429.1110 +           if (($synch_seek_offset + 1) >= strlen($header)) {
429.1111 +                throw new getid3_exception('Could not find valid MPEG synch before end of file');
429.1112 +           }
429.1113 +     
429.1114 +           if (($header{$synch_seek_offset} == "\xFF") && ($header{($synch_seek_offset + 1)} > "\xE0")) { // synch detected 
429.1115 +
429.1116 +                if (!isset($first_frame_info) && !isset($info['mpeg']['audio'])) {
429.1117 +                    $first_frame_info = $info;
429.1118 +                    $first_frame_avdata_offset = $avdata_offset + $synch_seek_offset;
429.1119 +                    if (!getid3_mp3::decodeMPEGaudioHeader($fd, $avdata_offset + $synch_seek_offset, $first_frame_info, false)) {
429.1120 +                        // if this is the first valid MPEG-audio frame, save it in case it's a VBR header frame and there's
429.1121 +                        // garbage between this frame and a valid sequence of MPEG-audio frames, to be restored below
429.1122 +                        unset($first_frame_info);
429.1123 +                    }
429.1124 +                }
429.1125 +
429.1126 +                $dummy = $info; // only overwrite real data if valid header found
429.1127 +                if (getid3_mp3::decodeMPEGaudioHeader($fd, $avdata_offset + $synch_seek_offset, $dummy, true)) {
429.1128 +                    $info = $dummy;
429.1129 +                    $info['avdataoffset'] = $avdata_offset + $synch_seek_offset;
429.1130 +                    
429.1131 +                    switch (@$info['fileformat']) {
429.1132 +                        case '':
429.1133 +                        case 'mp3':
429.1134 +                            $info['fileformat']          = 'mp3';
429.1135 +                            $info['audio']['dataformat'] = 'mp3';
429.1136 +                            break;
429.1137 +                    }
429.1138 +                    if (isset($first_frame_info['mpeg']['audio']['bitrate_mode']) && ($first_frame_info['mpeg']['audio']['bitrate_mode'] == 'vbr')) {
429.1139 +                        if (!(abs($info['audio']['bitrate'] - $first_frame_info['audio']['bitrate']) <= 1)) {
429.1140 +                            // If there is garbage data between a valid VBR header frame and a sequence
429.1141 +                            // of valid MPEG-audio frames the VBR data is no longer discarded.
429.1142 +                            $info = $first_frame_info;
429.1143 +                            $info['avdataoffset']        = $first_frame_avdata_offset;
429.1144 +                            $info['fileformat']          = 'mp3';
429.1145 +                            $info['audio']['dataformat'] = 'mp3';
429.1146 +                            $dummy                               = $info;
429.1147 +                            unset($dummy['mpeg']['audio']);
429.1148 +                            $GarbageOffsetStart = $first_frame_avdata_offset + $first_frame_info['mpeg']['audio']['framelength'];
429.1149 +                            $GarbageOffsetEnd   = $avdata_offset + $synch_seek_offset;
429.1150 +                            if (getid3_mp3::decodeMPEGaudioHeader($fd, $GarbageOffsetEnd, $dummy, true, true)) {
429.1151 +
429.1152 +                                $info = $dummy;
429.1153 +                                $info['avdataoffset'] = $GarbageOffsetEnd;
429.1154 +                                $this->getid3->warning('apparently-valid VBR header not used because could not find '.getid3_mp3::VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd);
429.1155 +
429.1156 +                            } else {
429.1157 +
429.1158 +                                $this->getid3->warning('using data from VBR header even though could not find '.getid3_mp3::VALID_CHECK_FRAMES.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')');
429.1159 +
429.1160 +                            }
429.1161 +                        }
429.1162 +                    }
429.1163 +                    if (isset($info['mpeg']['audio']['bitrate_mode']) && ($info['mpeg']['audio']['bitrate_mode'] == 'vbr') && !isset($info['mpeg']['audio']['VBR_method'])) {
429.1164 +                        // VBR file with no VBR header
429.1165 +                        $bit_rate_histogram = true;
429.1166 +                    }
429.1167 +
429.1168 +                    if ($bit_rate_histogram) {
429.1169 +
429.1170 +                        $info['mpeg']['audio']['stereo_distribution']  = array ('stereo'=>0, 'joint stereo'=>0, 'dual channel'=>0, 'mono'=>0);
429.1171 +                        $info['mpeg']['audio']['version_distribution'] = array ('1'=>0, '2'=>0, '2.5'=>0);
429.1172 +
429.1173 +                        if ($info['mpeg']['audio']['version'] == '1') {
429.1174 +                            if ($info['mpeg']['audio']['layer'] == 3) {
429.1175 +                                $info['mpeg']['audio']['bitrate_distribution'] = array ('free'=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0);
429.1176 +                            } elseif ($info['mpeg']['audio']['layer'] == 2) {
429.1177 +                                $info['mpeg']['audio']['bitrate_distribution'] = array ('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0, 384000=>0);
429.1178 +                            } elseif ($info['mpeg']['audio']['layer'] == 1) {
429.1179 +                                $info['mpeg']['audio']['bitrate_distribution'] = array ('free'=>0, 32000=>0, 64000=>0, 96000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 288000=>0, 320000=>0, 352000=>0, 384000=>0, 416000=>0, 448000=>0);
429.1180 +                            }
429.1181 +                        } elseif ($info['mpeg']['audio']['layer'] == 1) {
429.1182 +                            $info['mpeg']['audio']['bitrate_distribution'] = array ('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0, 176000=>0, 192000=>0, 224000=>0, 256000=>0);
429.1183 +                        } else {
429.1184 +                            $info['mpeg']['audio']['bitrate_distribution'] = array ('free'=>0, 8000=>0, 16000=>0, 24000=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0);
429.1185 +                        }
429.1186 +
429.1187 +                        $dummy = array ('avdataend' => $info['avdataend'], 'avdataoffset' => $info['avdataoffset']);
429.1188 +                        $synch_start_offset = $info['avdataoffset'];
429.1189 +
429.1190 +                        $fast_mode = false;
429.1191 +                        $synch_errors_found = 0;
429.1192 +                        while ($this->decodeMPEGaudioHeader($fd, $synch_start_offset, $dummy, false, false, $fast_mode)) {
429.1193 +                            $fast_mode = true;
429.1194 +                            $thisframebitrate = $mpeg_audio_bitrate_lookup[$mpeg_audio_version_lookup[$dummy['mpeg']['audio']['raw']['version']]][$mpeg_audio_layer_lookup[$dummy['mpeg']['audio']['raw']['layer']]][$dummy['mpeg']['audio']['raw']['bitrate']];
429.1195 +
429.1196 +                            if (empty($dummy['mpeg']['audio']['framelength'])) {
429.1197 +                                $synch_errors_found++;
429.1198 +                            } 
429.1199 +                            else {
429.1200 +                                @$info['mpeg']['audio']['bitrate_distribution'][$thisframebitrate]++;
429.1201 +                                @$info['mpeg']['audio']['stereo_distribution'][$dummy['mpeg']['audio']['channelmode']]++;
429.1202 +                                @$info['mpeg']['audio']['version_distribution'][$dummy['mpeg']['audio']['version']]++;
429.1203 +
429.1204 +                                $synch_start_offset += $dummy['mpeg']['audio']['framelength'];
429.1205 +                            }
429.1206 +                        }
429.1207 +                        if ($synch_errors_found > 0) {
429.1208 +                            $this->getid3->warning('Found '.$synch_errors_found.' synch errors in histogram analysis');
429.1209 +                        }
429.1210 +
429.1211 +                        $bit_total     = 0;
429.1212 +                        $frame_counter = 0;
429.1213 +                        foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bit_rate_value => $bit_rate_count) {
429.1214 +                            $frame_counter += $bit_rate_count;
429.1215 +                            if ($bit_rate_value != 'free') {
429.1216 +                                $bit_total += ($bit_rate_value * $bit_rate_count);
429.1217 +                            }
429.1218 +                        }
429.1219 +                        if ($frame_counter == 0) {
429.1220 +                            throw new getid3_exception('Corrupt MP3 file: framecounter == zero');
429.1221 +                        }
429.1222 +                        $info['mpeg']['audio']['frame_count'] = $frame_counter;
429.1223 +                        $info['mpeg']['audio']['bitrate']     = ($bit_total / $frame_counter);
429.1224 +
429.1225 +                        $info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate'];
429.1226 +
429.1227 +
429.1228 +                        // Definitively set VBR vs CBR, even if the Xing/LAME/VBRI header says differently
429.1229 +                        $distinct_bit_rates = 0;
429.1230 +                        foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bit_rate_value => $bit_rate_count) {
429.1231 +                            if ($bit_rate_count > 0) {
429.1232 +                                $distinct_bit_rates++;
429.1233 +                            }
429.1234 +                        }
429.1235 +                        if ($distinct_bit_rates > 1) {
429.1236 +                            $info['mpeg']['audio']['bitrate_mode'] = 'vbr';
429.1237 +                        } else {
429.1238 +                            $info['mpeg']['audio']['bitrate_mode'] = 'cbr';
429.1239 +                        }
429.1240 +                        $info['audio']['bitrate_mode'] = $info['mpeg']['audio']['bitrate_mode'];
429.1241 +
429.1242 +                    }
429.1243 +
429.1244 +                    break; // exit while()
429.1245 +                }
429.1246 +            }
429.1247 +
429.1248 +            $synch_seek_offset++;
429.1249 +            if (($avdata_offset + $synch_seek_offset) >= $info['avdataend']) {
429.1250 +                // end of file/data
429.1251 +
429.1252 +                if (empty($info['mpeg']['audio'])) {
429.1253 +
429.1254 +                    throw new getid3_exception('could not find valid MPEG synch before end of file');
429.1255 +                }
429.1256 +                break;
429.1257 +            }
429.1258 +
429.1259 +        }
429.1260 +        
429.1261 +        $info['audio']['channels']        = $info['mpeg']['audio']['channels'];
429.1262 +        $info['audio']['channelmode']     = $info['mpeg']['audio']['channelmode'];
429.1263 +        $info['audio']['sample_rate']     = $info['mpeg']['audio']['sample_rate'];
429.1264 +        return true;
429.1265 +    }
429.1266 +
429.1267 +
429.1268 +
429.1269 +    public static function MPEGaudioVersionarray() {
429.1270 +        
429.1271 +        static $array = array ('2.5', false, '2', '1');
429.1272 +        return $array;
429.1273 +    }
429.1274 +
429.1275 +
429.1276 +
429.1277 +    public static function MPEGaudioLayerarray() {
429.1278 +        
429.1279 +        static $array = array (false, 3, 2, 1);
429.1280 +        return $array;
429.1281 +    }
429.1282 +
429.1283 +
429.1284 +
429.1285 +    public static function MPEGaudioBitratearray() {
429.1286 +        
429.1287 +        static $array;
429.1288 +        if (empty($array)) {
429.1289 +            $array = array (
429.1290 +                '1'  =>  array (1 => array ('free', 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000),
429.1291 +                                2 => array ('free', 32000, 48000, 56000,  64000,  80000,  96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000),
429.1292 +                                3 => array ('free', 32000, 40000, 48000,  56000,  64000,  80000,  96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000)
429.1293 +                               ),
429.1294 +
429.1295 +                '2'  =>  array (1 => array ('free', 32000, 48000, 56000,  64000,  80000,  96000, 112000, 128000, 144000, 160000, 176000, 192000, 224000, 256000),
429.1296 +                                2 => array ('free',  8000, 16000, 24000,  32000,  40000,  48000,  56000,  64000,  80000,  96000, 112000, 128000, 144000, 160000),
429.1297 +                               )
429.1298 +            );
429.1299 +            $array['2'][3] = $array['2'][2];
429.1300 +            $array['2.5']  = $array['2'];
429.1301 +        }
429.1302 +        return $array;
429.1303 +    }
429.1304 +
429.1305 +
429.1306 +
429.1307 +    public static function MPEGaudioFrequencyarray() {
429.1308 +        
429.1309 +        static $array = array (
429.1310 +                '1'   => array (44100, 48000, 32000),
429.1311 +                '2'   => array (22050, 24000, 16000),
429.1312 +                '2.5' => array (11025, 12000,  8000)
429.1313 +        );
429.1314 +        return $array;
429.1315 +    }
429.1316 +
429.1317 +
429.1318 +
429.1319 +    public static function MPEGaudioChannelModearray() {
429.1320 +        
429.1321 +        static $array = array ('stereo', 'joint stereo', 'dual channel', 'mono');
429.1322 +        return $array;
429.1323 +    }
429.1324 +
429.1325 +
429.1326 +
429.1327 +    public static function MPEGaudioModeExtensionarray() {
429.1328 +        
429.1329 +        static $array = array (
429.1330 +                1 => array ('4-31', '8-31', '12-31', '16-31'),
429.1331 +                2 => array ('4-31', '8-31', '12-31', '16-31'),
429.1332 +                3 => array ('', 'IS', 'MS', 'IS+MS')
429.1333 +        );
429.1334 +        return $array;
429.1335 +    }
429.1336 +
429.1337 +
429.1338 +
429.1339 +    public static function MPEGaudioEmphasisarray() {
429.1340 +        
429.1341 +        static $array = array ('none', '50/15ms', false, 'CCIT J.17');
429.1342 +        return $array;
429.1343 +    }
429.1344 +
429.1345 +
429.1346 +
429.1347 +    public static function MPEGaudioHeaderBytesValid($head4, $allow_bitrate_15=false) {
429.1348 +        
429.1349 +        return getid3_mp3::MPEGaudioHeaderValid(getid3_mp3::MPEGaudioHeaderDecode($head4), false, $allow_bitrate_15);
429.1350 +    }
429.1351 +
429.1352 +
429.1353 +
429.1354 +    public static function MPEGaudioHeaderValid($raw_array, $echo_errors=false, $allow_bitrate_15=false) {
429.1355 +        
429.1356 +        if (($raw_array['synch'] & 0x0FFE) != 0x0FFE) {
429.1357 +            return false;
429.1358 +        }
429.1359 +
429.1360 +        static $mpeg_audio_version_lookup;
429.1361 +        static $mpeg_audio_layer_lookup;
429.1362 +        static $mpeg_audio_bitrate_lookup;
429.1363 +        static $mpeg_audio_frequency_lookup;
429.1364 +        static $mpeg_audio_channel_mode_lookup;
429.1365 +        static $mpeg_audio_mode_extension_lookup;
429.1366 +        static $mpeg_audio_emphasis_lookup;
429.1367 +        if (empty($mpeg_audio_version_lookup)) {
429.1368 +            $mpeg_audio_version_lookup        = getid3_mp3::MPEGaudioVersionarray();
429.1369 +            $mpeg_audio_layer_lookup          = getid3_mp3::MPEGaudioLayerarray();
429.1370 +            $mpeg_audio_bitrate_lookup        = getid3_mp3::MPEGaudioBitratearray();
429.1371 +            $mpeg_audio_frequency_lookup      = getid3_mp3::MPEGaudioFrequencyarray();
429.1372 +            $mpeg_audio_channel_mode_lookup   = getid3_mp3::MPEGaudioChannelModearray();
429.1373 +            $mpeg_audio_mode_extension_lookup = getid3_mp3::MPEGaudioModeExtensionarray();
429.1374 +            $mpeg_audio_emphasis_lookup       = getid3_mp3::MPEGaudioEmphasisarray();
429.1375 +        }
429.1376 +
429.1377 +        if (isset($mpeg_audio_version_lookup[$raw_array['version']])) {
429.1378 +            $decodedVersion = $mpeg_audio_version_lookup[$raw_array['version']];
429.1379 +        } else {
429.1380 +            echo ($echo_errors ? "\n".'invalid Version ('.$raw_array['version'].')' : '');
429.1381 +            return false;
429.1382 +        }
429.1383 +        if (isset($mpeg_audio_layer_lookup[$raw_array['layer']])) {
429.1384 +            $decodedLayer = $mpeg_audio_layer_lookup[$raw_array['layer']];
429.1385 +        } else {
429.1386 +            echo ($echo_errors ? "\n".'invalid Layer ('.$raw_array['layer'].')' : '');
429.1387 +            return false;
429.1388 +        }
429.1389 +        if (!isset($mpeg_audio_bitrate_lookup[$decodedVersion][$decodedLayer][$raw_array['bitrate']])) {
429.1390 +            echo ($echo_errors ? "\n".'invalid Bitrate ('.$raw_array['bitrate'].')' : '');
429.1391 +            if ($raw_array['bitrate'] == 15) {
429.1392 +                // known issue in LAME 3.90 - 3.93.1 where free-format has bitrate ID of 15 instead of 0
429.1393 +                // let it go through here otherwise file will not be identified
429.1394 +                if (!$allow_bitrate_15) {
429.1395 +                    return false;
429.1396 +                }
429.1397 +            } else {
429.1398 +                return false;
429.1399 +            }
429.1400 +        }
429.1401 +        if (!isset($mpeg_audio_frequency_lookup[$decodedVersion][$raw_array['sample_rate']])) {
429.1402 +            echo ($echo_errors ? "\n".'invalid Frequency ('.$raw_array['sample_rate'].')' : '');
429.1403 +            return false;
429.1404 +        }
429.1405 +        if (!isset($mpeg_audio_channel_mode_lookup[$raw_array['channelmode']])) {
429.1406 +            echo ($echo_errors ? "\n".'invalid ChannelMode ('.$raw_array['channelmode'].')' : '');
429.1407 +            return false;
429.1408 +        }
429.1409 +        if (!isset($mpeg_audio_mode_extension_lookup[$decodedLayer][$raw_array['modeextension']])) {
429.1410 +            echo ($echo_errors ? "\n".'invalid Mode Extension ('.$raw_array['modeextension'].')' : '');
429.1411 +            return false;
429.1412 +        }
429.1413 +        if (!isset($mpeg_audio_emphasis_lookup[$raw_array['emphasis']])) {
429.1414 +            echo ($echo_errors ? "\n".'invalid Emphasis ('.$raw_array['emphasis'].')' : '');
429.1415 +            return false;
429.1416 +        }
429.1417 +        // These are just either set or not set, you can't mess that up :)
429.1418 +        // $raw_array['protection'];
429.1419 +        // $raw_array['padding'];
429.1420 +        // $raw_array['private'];
429.1421 +        // $raw_array['copyright'];
429.1422 +        // $raw_array['original'];
429.1423 +
429.1424 +        return true;
429.1425 +    }
429.1426 +
429.1427 +
429.1428 +
429.1429 +    public static function MPEGaudioHeaderDecode($header_four_bytes) {
429.1430 +        // AAAA AAAA  AAAB BCCD  EEEE FFGH  IIJJ KLMM
429.1431 +        // A - Frame sync (all bits set)
429.1432 +        // B - MPEG Audio version ID
429.1433 +        // C - Layer description
429.1434 +        // D - Protection bit
429.1435 +        // E - Bitrate index
429.1436 +        // F - Sampling rate frequency index
429.1437 +        // G - Padding bit
429.1438 +        // H - Private bit
429.1439 +        // I - Channel Mode
429.1440 +        // J - Mode extension (Only if Joint stereo)
429.1441 +        // K - Copyright
429.1442 +        // L - Original
429.1443 +        // M - Emphasis
429.1444 +
429.1445 +        if (strlen($header_four_bytes) != 4) {
429.1446 +            return false;
429.1447 +        }
429.1448 +
429.1449 +        $mpeg_raw_header['synch']         = (getid3_lib::BigEndian2Int(substr($header_four_bytes, 0, 2)) & 0xFFE0) >> 4;
429.1450 +        $mpeg_raw_header['version']       = (ord($header_four_bytes{1}) & 0x18) >> 3; //    BB
429.1451 +        $mpeg_raw_header['layer']         = (ord($header_four_bytes{1}) & 0x06) >> 1; //      CC
429.1452 +        $mpeg_raw_header['protection']    = (ord($header_four_bytes{1}) & 0x01);      //        D
429.1453 +        $mpeg_raw_header['bitrate']       = (ord($header_four_bytes{2}) & 0xF0) >> 4; // EEEE
429.1454 +        $mpeg_raw_header['sample_rate']   = (ord($header_four_bytes{2}) & 0x0C) >> 2; //     FF
429.1455 +        $mpeg_raw_header['padding']       = (ord($header_four_bytes{2}) & 0x02) >> 1; //       G
429.1456 +        $mpeg_raw_header['private']       = (ord($header_four_bytes{2}) & 0x01);      //        H
429.1457 +        $mpeg_raw_header['channelmode']   = (ord($header_four_bytes{3}) & 0xC0) >> 6; // II
429.1458 +        $mpeg_raw_header['modeextension'] = (ord($header_four_bytes{3}) & 0x30) >> 4; //   JJ
429.1459 +        $mpeg_raw_header['copyright']     = (ord($header_four_bytes{3}) & 0x08) >> 3; //     K
429.1460 +        $mpeg_raw_header['original']      = (ord($header_four_bytes{3}) & 0x04) >> 2; //      L
429.1461 +        $mpeg_raw_header['emphasis']      = (ord($header_four_bytes{3}) & 0x03);      //       MM
429.1462 +
429.1463 +        return $mpeg_raw_header;
429.1464 +    }
429.1465 +
429.1466 +
429.1467 +
429.1468 +    public static function MPEGaudioFrameLength(&$bit_rate, &$version, &$layer, $padding, &$sample_rate) {
429.1469 +        
429.1470 +        if (!isset($cache[$bit_rate][$version][$layer][$padding][$sample_rate])) {
429.1471 +            $cache[$bit_rate][$version][$layer][$padding][$sample_rate] = false;
429.1472 +            if ($bit_rate != 'free') {
429.1473 +
429.1474 +                if ($version == '1') {
429.1475 +
429.1476 +                    if ($layer == '1') {
429.1477 +
429.1478 +                        // For Layer I slot is 32 bits long
429.1479 +                        $frame_length_coefficient = 48;
429.1480 +                        $slot_length = 4;
429.1481 +
429.1482 +                    } else { // Layer 2 / 3
429.1483 +
429.1484 +                        // for Layer 2 and Layer 3 slot is 8 bits long.
429.1485 +                        $frame_length_coefficient = 144;
429.1486 +                        $slot_length = 1;
429.1487 +
429.1488 +                    }
429.1489 +
429.1490 +                } else { // MPEG-2 / MPEG-2.5
429.1491 +
429.1492 +                    if ($layer == '1') {
429.1493 +
429.1494 +                        // For Layer I slot is 32 bits long
429.1495 +                        $frame_length_coefficient = 24;
429.1496 +                        $slot_length = 4;
429.1497 +
429.1498 +                    } elseif ($layer == '2') {
429.1499 +
429.1500 +                        // for Layer 2 and Layer 3 slot is 8 bits long.
429.1501 +                        $frame_length_coefficient = 144;
429.1502 +                        $slot_length = 1;
429.1503 +
429.1504 +                    } else { // layer 3
429.1505 +
429.1506 +                        // for Layer 2 and Layer 3 slot is 8 bits long.
429.1507 +                        $frame_length_coefficient = 72;
429.1508 +                        $slot_length = 1;
429.1509 +
429.1510 +                    }
429.1511 +
429.1512 +                }
429.1513 +
429.1514 +                // FrameLengthInBytes = ((Coefficient * BitRate) / SampleRate) + Padding
429.1515 +                if ($sample_rate > 0) {
429.1516 +                    $new_frame_length  = ($frame_length_coefficient * $bit_rate) / $sample_rate;
429.1517 +                    $new_frame_length  = floor($new_frame_length / $slot_length) * $slot_length; // round to next-lower multiple of SlotLength (1 byte for Layer 2/3, 4 bytes for Layer I)
429.1518 +                    if ($padding) {
429.1519 +                        $new_frame_length += $slot_length;
429.1520 +                    }
429.1521 +                    $cache[$bit_rate][$version][$layer][$padding][$sample_rate] = (int) $new_frame_length;
429.1522 +                }
429.1523 +            }
429.1524 +        }
429.1525 +        return $cache[$bit_rate][$version][$layer][$padding][$sample_rate];
429.1526 +    }
429.1527 +
429.1528 +
429.1529 +
429.1530 +    public static function ClosestStandardMP3Bitrate($bit_rate) {
429.1531 +        
429.1532 +        static $standard_bit_rates = array (320000, 256000, 224000, 192000, 160000, 128000, 112000, 96000, 80000, 64000, 56000, 48000, 40000, 32000, 24000, 16000, 8000);
429.1533 +        static $bit_rate_table = array (0=>'-');
429.1534 +        $round_bit_rate = intval(round($bit_rate, -3));
429.1535 +        if (!isset($bit_rate_table[$round_bit_rate])) {
429.1536 +            if ($round_bit_rate > 320000) {
429.1537 +                $bit_rate_table[$round_bit_rate] = round($bit_rate, -4);
429.1538 +            } else {
429.1539 +                $last_bit_rate = 320000;
429.1540 +                foreach ($standard_bit_rates as $standard_bit_rate) {
429.1541 +                    $bit_rate_table[$round_bit_rate] = $standard_bit_rate;
429.1542 +                    if ($round_bit_rate >= $standard_bit_rate - (($last_bit_rate - $standard_bit_rate) / 2)) {
429.1543 +                        break;
429.1544 +                    }
429.1545 +                    $last_bit_rate = $standard_bit_rate;
429.1546 +                }
429.1547 +            }
429.1548 +        }
429.1549 +        return $bit_rate_table[$round_bit_rate];
429.1550 +    }
429.1551 +
429.1552 +
429.1553 +
429.1554 +    public static function XingVBRidOffset($version, $channel_mode) {
429.1555 +        
429.1556 +        static $lookup = array (
429.1557 +                '1'   => array ('mono'          => 0x15, // 4 + 17 = 21
429.1558 +                                'stereo'        => 0x24, // 4 + 32 = 36
429.1559 +                                'joint stereo'  => 0x24,
429.1560 +                                'dual channel'  => 0x24
429.1561 +                               ),
429.1562 +
429.1563 +                '2'   => array ('mono'          => 0x0D, // 4 +  9 = 13
429.1564 +                                'stereo'        => 0x15, // 4 + 17 = 21
429.1565 +                                'joint stereo'  => 0x15,
429.1566 +                                'dual channel'  => 0x15
429.1567 +                               ),
429.1568 +
429.1569 +                '2.5' => array ('mono'          => 0x15,
429.1570 +                                'stereo'        => 0x15,
429.1571 +                                'joint stereo'  => 0x15,
429.1572 +                                'dual channel'  => 0x15
429.1573 +                               )
429.1574 +        );
429.1575 +        
429.1576 +        return $lookup[$version][$channel_mode];
429.1577 +    }
429.1578 +
429.1579 +
429.1580 +
429.1581 +    public static function LAMEvbrMethodLookup($vbr_method_id) {
429.1582 +        
429.1583 +        static $lookup = array (
429.1584 +            0x00 => 'unknown',
429.1585 +            0x01 => 'cbr',
429.1586 +            0x02 => 'abr',
429.1587 +            0x03 => 'vbr-old / vbr-rh',
429.1588 +            0x04 => 'vbr-new / vbr-mtrh',
429.1589 +            0x05 => 'vbr-mt',
429.1590 +            0x06 => 'Full VBR Method 4',
429.1591 +            0x08 => 'constant bitrate 2 pass',
429.1592 +            0x09 => 'abr 2 pass',
429.1593 +            0x0F => 'reserved'
429.1594 +        );
429.1595 +        return (isset($lookup[$vbr_method_id]) ? $lookup[$vbr_method_id] : '');
429.1596 +    }
429.1597 +
429.1598 +
429.1599 +
429.1600 +    public static function LAMEmiscStereoModeLookup($stereo_mode_id) {
429.1601 +    
429.1602 +        static $lookup = array (
429.1603 +            0 => 'mono',
429.1604 +            1 => 'stereo',
429.1605 +            2 => 'dual mono',
429.1606 +            3 => 'joint stereo',
429.1607 +            4 => 'forced stereo',
429.1608 +            5 => 'auto',
429.1609 +            6 => 'intensity stereo',
429.1610 +            7 => 'other'
429.1611 +        );
429.1612 +        return (isset($lookup[$stereo_mode_id]) ? $lookup[$stereo_mode_id] : '');
429.1613 +    }
429.1614 +
429.1615 +
429.1616 +
429.1617 +    public static function LAMEmiscSourceSampleFrequencyLookup($source_sample_frequency_id) {
429.1618 +        
429.1619 +        static $lookup = array (
429.1620 +            0 => '<= 32 kHz',
429.1621 +            1 => '44.1 kHz',
429.1622 +            2 => '48 kHz',
429.1623 +            3 => '> 48kHz'
429.1624 +        );
429.1625 +        return (isset($lookup[$source_sample_frequency_id]) ? $lookup[$source_sample_frequency_id] : '');
429.1626 +    }
429.1627 +
429.1628 +
429.1629 +
429.1630 +    public static function LAMEsurroundInfoLookup($surround_info_id) {
429.1631 +        
429.1632 +        static $lookup = array (
429.1633 +            0 => 'no surround info',
429.1634 +            1 => 'DPL encoding',
429.1635 +            2 => 'DPL2 encoding',
429.1636 +            3 => 'Ambisonic encoding'
429.1637 +        );
429.1638 +        return (isset($lookup[$surround_info_id]) ? $lookup[$surround_info_id] : 'reserved');
429.1639 +    }
429.1640 +
429.1641 +
429.1642 +
429.1643 +    public static function LAMEpresetUsedLookup($lame_tag) {
429.1644 +        
429.1645 +        if ($lame_tag['preset_used_id'] == 0) {
429.1646 +            // no preset used (LAME >=3.93)
429.1647 +            // no preset recorded (LAME <3.93)
429.1648 +            return '';
429.1649 +        }
429.1650 +        
429.1651 +        $lame_preset_used_lookup = array ();
429.1652 +        
429.1653 +        for ($i = 8; $i <= 320; $i++) {
429.1654 +            switch ($lame_tag['vbr_method']) {
429.1655 +                case 'cbr':
429.1656 +                    $lame_preset_used_lookup[$i] = '--alt-preset '.$lame_tag['vbr_method'].' '.$i;
429.1657 +                    break;
429.1658 +                case 'abr':
429.1659 +                default: // other VBR modes shouldn't be here(?)
429.1660 +                    $lame_preset_used_lookup[$i] = '--alt-preset '.$i;
429.1661 +                    break;
429.1662 +            }
429.1663 +        }
429.1664 +
429.1665 +        // named old-style presets (studio, phone, voice, etc) are handled in GuessEncoderOptions()
429.1666 +
429.1667 +        // named alt-presets
429.1668 +        $lame_preset_used_lookup[1000] = '--r3mix';
429.1669 +        $lame_preset_used_lookup[1001] = '--alt-preset standard';
429.1670 +        $lame_preset_used_lookup[1002] = '--alt-preset extreme';
429.1671 +        $lame_preset_used_lookup[1003] = '--alt-preset insane';
429.1672 +        $lame_preset_used_lookup[1004] = '--alt-preset fast standard';
429.1673 +        $lame_preset_used_lookup[1005] = '--alt-preset fast extreme';
429.1674 +        $lame_preset_used_lookup[1006] = '--alt-preset medium';
429.1675 +        $lame_preset_used_lookup[1007] = '--alt-preset fast medium';
429.1676 +
429.1677 +        // LAME 3.94 additions/changes
429.1678 +        $lame_preset_used_lookup[1010] = '--preset portable';                                                            // 3.94a15 Oct 21 2003
429.1679 +        $lame_preset_used_lookup[1015] = '--preset radio';                                                               // 3.94a15 Oct 21 2003
429.1680 +
429.1681 +        $lame_preset_used_lookup[320]  = '--preset insane';                                                              // 3.94a15 Nov 12 2003
429.1682 +        $lame_preset_used_lookup[410]  = '-V9';
429.1683 +        $lame_preset_used_lookup[420]  = '-V8';
429.1684 +        $lame_preset_used_lookup[430]  = '--preset radio';                                                               // 3.94a15 Nov 12 2003
429.1685 +        $lame_preset_used_lookup[440]  = '-V6';
429.1686 +        $lame_preset_used_lookup[450]  = '--preset '.(($lame_tag['raw']['vbr_method'] == 4) ? 'fast ' : '').'portable';  // 3.94a15 Nov 12 2003
429.1687 +        $lame_preset_used_lookup[460]  = '--preset '.(($lame_tag['raw']['vbr_method'] == 4) ? 'fast ' : '').'medium';    // 3.94a15 Nov 12 2003
429.1688 +        $lame_preset_used_lookup[470]  = '--r3mix';                                                                      // 3.94b1  Dec 18 2003
429.1689 +        $lame_preset_used_lookup[480]  = '--preset '.(($lame_tag['raw']['vbr_method'] == 4) ? 'fast ' : '').'standard';  // 3.94a15 Nov 12 2003
429.1690 +        $lame_preset_used_lookup[490]  = '-V1';
429.1691 +        $lame_preset_used_lookup[500]  = '--preset '.(($lame_tag['raw']['vbr_method'] == 4) ? 'fast ' : '').'extreme';   // 3.94a15 Nov 12 2003
429.1692 +        
429.1693 +        return (isset($lame_preset_used_lookup[$lame_tag['preset_used_id']]) ? $lame_preset_used_lookup[$lame_tag['preset_used_id']] : 'new/unknown preset: '.$lame_tag['preset_used_id'].' - report to info@getid3.org');
429.1694 +    }
429.1695 +	
429.1696 +	
429.1697 +}
429.1698 +
429.1699 +?>
429.1700 \ No newline at end of file
   430.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   430.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mpc.php	Mon Feb 22 08:02:39 2010 -0500
   430.3 @@ -0,0 +1,211 @@
   430.4 +<?php
   430.5 +// +----------------------------------------------------------------------+
   430.6 +// | PHP version 5                                                        |
   430.7 +// +----------------------------------------------------------------------+
   430.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   430.9 +// +----------------------------------------------------------------------+
  430.10 +// | This source file is subject to version 2 of the GPL license,         |
  430.11 +// | that is bundled with this package in the file license.txt and is     |
  430.12 +// | available through the world-wide-web at the following url:           |
  430.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  430.14 +// +----------------------------------------------------------------------+
  430.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  430.16 +// +----------------------------------------------------------------------+
  430.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  430.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  430.19 +// +----------------------------------------------------------------------+
  430.20 +// | module.audio.mpc.php                                                 |
  430.21 +// | Module for analyzing Musepack/MPEG+ Audio files                      |
  430.22 +// | dependencies: NONE                                                   |
  430.23 +// +----------------------------------------------------------------------+
  430.24 +//
  430.25 +// $Id: module.audio.mpc.php,v 1.3 2006/11/02 10:48:01 ah Exp $
  430.26 +
  430.27 +        
  430.28 +        
  430.29 +class getid3_mpc extends getid3_handler
  430.30 +{
  430.31 +
  430.32 +    public function Analyze() {
  430.33 +
  430.34 +        $getid3 = $this->getid3;
  430.35 +        
  430.36 +        // http://www.uni-jena.de/~pfk/mpp/sv8/header.html
  430.37 +
  430.38 +        $getid3->info['fileformat']            = 'mpc';
  430.39 +        $getid3->info['audio']['dataformat']   = 'mpc';
  430.40 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  430.41 +        $getid3->info['audio']['channels']     = 2;  // the format appears to be hardcoded for stereo only
  430.42 +        $getid3->info['audio']['lossless']     = false;
  430.43 +        
  430.44 +        $getid3->info['mpc']['header'] = array ();
  430.45 +        $info_mpc_header = &$getid3->info['mpc']['header'];
  430.46 +        $info_mpc_header['size'] = 28;
  430.47 +        $info_mpc_header['raw']['preamble'] = 'MP+';    // Magic bytes
  430.48 +        
  430.49 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  430.50 +        $mpc_header_data = fread($getid3->fp, 28);
  430.51 +        
  430.52 +        $stream_version_byte = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 3, 1));
  430.53 +        $info_mpc_header['stream_major_version'] = ($stream_version_byte & 0x0F);
  430.54 +        $info_mpc_header['stream_minor_version'] = ($stream_version_byte & 0xF0) >> 4;
  430.55 +        if ($info_mpc_header['stream_major_version'] != 7) {
  430.56 +            throw new getid3_exception('Only Musepack SV7 supported');
  430.57 +        }
  430.58 +            
  430.59 +        $info_mpc_header['frame_count'] = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 4, 4));
  430.60 +        
  430.61 +        $info_mpc_header['raw']['title_peak']      = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 12, 2));
  430.62 +        $info_mpc_header['raw']['title_gain']      = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 14, 2), true);
  430.63 +        $info_mpc_header['raw']['album_peak']      = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 16, 2));
  430.64 +        $info_mpc_header['raw']['album_gain']      = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 18, 2), true);
  430.65 +        
  430.66 +        $info_mpc_header['raw']['not_sure_what']   = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 24, 3));
  430.67 +        $info_mpc_header['raw']['encoder_version'] = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 27, 1));
  430.68 +        
  430.69 +        $flags_dword1                              = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 8, 4));
  430.70 +        $flags_dword2                              = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 20, 4));
  430.71 +        
  430.72 +        $info_mpc_header['intensity_stereo']   = (bool)(($flags_dword1 & 0x80000000) >> 31);
  430.73 +        $info_mpc_header['mid_side_stereo']    = (bool)(($flags_dword1 & 0x40000000) >> 30);
  430.74 +        $info_mpc_header['max_subband']        =         ($flags_dword1 & 0x3F000000) >> 24;
  430.75 +        $info_mpc_header['raw']['profile']     =         ($flags_dword1 & 0x00F00000) >> 20;
  430.76 +        $info_mpc_header['begin_loud']         = (bool)(($flags_dword1 & 0x00080000) >> 19);
  430.77 +        $info_mpc_header['end_loud']           = (bool)(($flags_dword1 & 0x00040000) >> 18);
  430.78 +        $info_mpc_header['raw']['sample_rate'] =         ($flags_dword1 & 0x00030000) >> 16;
  430.79 +        $info_mpc_header['max_level']          =         ($flags_dword1 & 0x0000FFFF);
  430.80 +        
  430.81 +        $info_mpc_header['true_gapless']       = (bool)(($flags_dword2 & 0x80000000) >> 31);
  430.82 +        $info_mpc_header['last_frame_length']  =         ($flags_dword2 & 0x7FF00000) >> 20;
  430.83 +        
  430.84 +        $info_mpc_header['profile']            = getid3_mpc::MPCprofileNameLookup($info_mpc_header['raw']['profile']);
  430.85 +        $info_mpc_header['sample_rate']        = getid3_mpc::MPCfrequencyLookup($info_mpc_header['raw']['sample_rate']);
  430.86 +        $getid3->info['audio']['sample_rate']  = $info_mpc_header['sample_rate'];
  430.87 +        $info_mpc_header['samples']            = ((($info_mpc_header['frame_count'] - 1) * 1152) + $info_mpc_header['last_frame_length']) * $getid3->info['audio']['channels'];
  430.88 +
  430.89 +        $getid3->info['playtime_seconds'] = ($info_mpc_header['samples'] / $getid3->info['audio']['channels']) / $getid3->info['audio']['sample_rate'];
  430.90 +
  430.91 +        $getid3->info['avdataoffset'] += $info_mpc_header['size'];
  430.92 +        
  430.93 +        $getid3->info['audio']['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
  430.94 +
  430.95 +        $info_mpc_header['title_peak']    = $info_mpc_header['raw']['title_peak'];
  430.96 +        $info_mpc_header['title_peak_db'] = getid3_mpc::MPCpeakDBLookup($info_mpc_header['title_peak']);
  430.97 +        if ($info_mpc_header['raw']['title_gain'] < 0) {
  430.98 +            $info_mpc_header['title_gain_db'] = (float)(32768 + $info_mpc_header['raw']['title_gain']) / -100;
  430.99 +        } 
 430.100 +        else {
 430.101 +            $info_mpc_header['title_gain_db'] = (float)$info_mpc_header['raw']['title_gain'] / 100;
 430.102 +        }
 430.103 +
 430.104 +        $info_mpc_header['album_peak']    = $info_mpc_header['raw']['album_peak'];
 430.105 +        $info_mpc_header['album_peak_db'] = getid3_mpc::MPCpeakDBLookup($info_mpc_header['album_peak']);
 430.106 +        if ($info_mpc_header['raw']['album_gain'] < 0) {
 430.107 +            $info_mpc_header['album_gain_db'] = (float)(32768 + $info_mpc_header['raw']['album_gain']) / -100;
 430.108 +        } 
 430.109 +        else {
 430.110 +            $info_mpc_header['album_gain_db'] = (float)$info_mpc_header['raw']['album_gain'] / 100;;
 430.111 +        }
 430.112 +        $info_mpc_header['encoder_version'] = getid3_mpc::MPCencoderVersionLookup($info_mpc_header['raw']['encoder_version']);
 430.113 +
 430.114 +        $getid3->info['replay_gain']['track']['adjustment'] = $info_mpc_header['title_gain_db'];
 430.115 +        $getid3->info['replay_gain']['album']['adjustment'] = $info_mpc_header['album_gain_db'];
 430.116 +
 430.117 +        if ($info_mpc_header['title_peak'] > 0) {
 430.118 +            $getid3->info['replay_gain']['track']['peak'] = $info_mpc_header['title_peak'];
 430.119 +        } 
 430.120 +        elseif (round($info_mpc_header['max_level'] * 1.18) > 0) {
 430.121 +            $getid3->info['replay_gain']['track']['peak'] = (int)(round($info_mpc_header['max_level'] * 1.18)); // why? I don't know - see mppdec.c
 430.122 +        }
 430.123 +        if ($info_mpc_header['album_peak'] > 0) {
 430.124 +            $getid3->info['replay_gain']['album']['peak'] = $info_mpc_header['album_peak'];
 430.125 +        }
 430.126 +
 430.127 +        $getid3->info['audio']['encoder']         = $info_mpc_header['encoder_version'];
 430.128 +        $getid3->info['audio']['encoder_options'] = $info_mpc_header['profile'];
 430.129 +        
 430.130 +        return true;
 430.131 +    }
 430.132 +
 430.133 +
 430.134 +
 430.135 +    public static function MPCprofileNameLookup($profileid) {
 430.136 +        
 430.137 +        static $lookup = array (
 430.138 +            0  => 'no profile',
 430.139 +            1  => 'Experimental',
 430.140 +            2  => 'unused',
 430.141 +            3  => 'unused',
 430.142 +            4  => 'unused',
 430.143 +            5  => 'below Telephone (q = 0.0)',
 430.144 +            6  => 'below Telephone (q = 1.0)',
 430.145 +            7  => 'Telephone (q = 2.0)',
 430.146 +            8  => 'Thumb (q = 3.0)',
 430.147 +            9  => 'Radio (q = 4.0)',
 430.148 +            10 => 'Standard (q = 5.0)',
 430.149 +            11 => 'Extreme (q = 6.0)',
 430.150 +            12 => 'Insane (q = 7.0)',
 430.151 +            13 => 'BrainDead (q = 8.0)',
 430.152 +            14 => 'above BrainDead (q = 9.0)',
 430.153 +            15 => 'above BrainDead (q = 10.0)'
 430.154 +        );
 430.155 +        return (isset($lookup[$profileid]) ? $lookup[$profileid] : 'invalid');
 430.156 +    }
 430.157 +
 430.158 +
 430.159 +
 430.160 +    public static function MPCfrequencyLookup($frequencyid) {
 430.161 +        
 430.162 +        static $lookup = array (
 430.163 +            0 => 44100,
 430.164 +            1 => 48000,
 430.165 +            2 => 37800,
 430.166 +            3 => 32000
 430.167 +        );
 430.168 +        return (isset($lookup[$frequencyid]) ? $lookup[$frequencyid] : 'invalid');
 430.169 +    }
 430.170 +
 430.171 +
 430.172 +
 430.173 +    public static function MPCpeakDBLookup($int_value) {
 430.174 +        
 430.175 +        if ($int_value > 0) {
 430.176 +            return ((log10($int_value) / log10(2)) - 15) * 6;
 430.177 +        }
 430.178 +        return false;
 430.179 +    }
 430.180 +
 430.181 +
 430.182 +
 430.183 +    public static function MPCencoderVersionLookup($encoder_version) {
 430.184 +    
 430.185 +        //Encoder version * 100  (106 = 1.06)
 430.186 +        //EncoderVersion % 10 == 0        Release (1.0)
 430.187 +        //EncoderVersion %  2 == 0        Beta (1.06)
 430.188 +        //EncoderVersion %  2 == 1        Alpha (1.05a...z)
 430.189 +
 430.190 +        if ($encoder_version == 0) {
 430.191 +            // very old version, not known exactly which
 430.192 +            return 'Buschmann v1.7.0-v1.7.9 or Klemm v0.90-v1.05';
 430.193 +        }
 430.194 +
 430.195 +        if (($encoder_version % 10) == 0) {
 430.196 +
 430.197 +            // release version
 430.198 +            return number_format($encoder_version / 100, 2);
 430.199 +
 430.200 +        } elseif (($encoder_version % 2) == 0) {
 430.201 +
 430.202 +            // beta version
 430.203 +            return number_format($encoder_version / 100, 2).' beta';
 430.204 +
 430.205 +        }
 430.206 +
 430.207 +        // alpha version
 430.208 +        return number_format($encoder_version / 100, 2).' alpha';
 430.209 +    }
 430.210 +
 430.211 +}
 430.212 +
 430.213 +
 430.214 +?>
 430.215 \ No newline at end of file
   431.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   431.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.mpc_old.php	Mon Feb 22 08:02:39 2010 -0500
   431.3 @@ -0,0 +1,107 @@
   431.4 +<?php
   431.5 +// +----------------------------------------------------------------------+
   431.6 +// | PHP version 5                                                        |
   431.7 +// +----------------------------------------------------------------------+
   431.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   431.9 +// +----------------------------------------------------------------------+
  431.10 +// | This source file is subject to version 2 of the GPL license,         |
  431.11 +// | that is bundled with this package in the file license.txt and is     |
  431.12 +// | available through the world-wide-web at the following url:           |
  431.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  431.14 +// +----------------------------------------------------------------------+
  431.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  431.16 +// +----------------------------------------------------------------------+
  431.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  431.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  431.19 +// +----------------------------------------------------------------------+
  431.20 +// | module.audio.mpc_old.php                                             |
  431.21 +// | Module for analyzing Musepack/MPEG+ Audio files - SV4-SV6            |
  431.22 +// | dependencies: NONE                                                   |
  431.23 +// +----------------------------------------------------------------------+
  431.24 +//
  431.25 +// $Id: module.audio.mpc_old.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  431.26 +
  431.27 +        
  431.28 +        
  431.29 +class getid3_mpc_old extends getid3_handler
  431.30 +{
  431.31 +
  431.32 +    public function Analyze() {
  431.33 +
  431.34 +        $getid3 = $this->getid3;
  431.35 +        
  431.36 +        // http://www.uni-jena.de/~pfk/mpp/sv8/header.html
  431.37 +        
  431.38 +        $getid3->info['mpc']['header'] = array ();
  431.39 +        $info_mpc_header = &$getid3->info['mpc']['header'];
  431.40 +
  431.41 +        $getid3->info['fileformat']               = 'mpc';
  431.42 +        $getid3->info['audio']['dataformat']      = 'mpc';
  431.43 +        $getid3->info['audio']['bitrate_mode']    = 'vbr';
  431.44 +        $getid3->info['audio']['channels']        = 2;  // the format appears to be hardcoded for stereo only
  431.45 +        $getid3->info['audio']['lossless']        = false;
  431.46 +
  431.47 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  431.48 +
  431.49 +        $info_mpc_header['size'] = 8;
  431.50 +        $getid3->info['avdataoffset'] += $info_mpc_header['size'];
  431.51 +        
  431.52 +        $mpc_header_data = fread($getid3->fp, $info_mpc_header['size']);
  431.53 +            
  431.54 +        
  431.55 +        // Most of this code adapted from Jurgen Faul's MPEGplus source code - thanks Jurgen! :)
  431.56 +        $header_dword[0] = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 0, 4));
  431.57 +        $header_dword[1] = getid3_lib::LittleEndian2Int(substr($mpc_header_data, 4, 4));
  431.58 +
  431.59 +
  431.60 +        // DDDD DDDD  CCCC CCCC  BBBB BBBB  AAAA AAAA
  431.61 +        // aaaa aaaa  abcd dddd  dddd deee  eeff ffff
  431.62 +        //
  431.63 +        // a = bitrate       = anything
  431.64 +        // b = IS            = anything
  431.65 +        // c = MS            = anything
  431.66 +        // d = streamversion = 0000000004 or 0000000005 or 0000000006
  431.67 +        // e = maxband       = anything
  431.68 +        // f = blocksize     = 000001 for SV5+, anything(?) for SV4
  431.69 +
  431.70 +        $info_mpc_header['target_bitrate']       =       (($header_dword[0] & 0xFF800000) >> 23);
  431.71 +        $info_mpc_header['intensity_stereo']     = (bool)(($header_dword[0] & 0x00400000) >> 22);
  431.72 +        $info_mpc_header['mid-side_stereo']      = (bool)(($header_dword[0] & 0x00200000) >> 21);
  431.73 +        $info_mpc_header['stream_major_version'] =        ($header_dword[0] & 0x001FF800) >> 11;
  431.74 +        $info_mpc_header['stream_minor_version'] = 0; 
  431.75 +        $info_mpc_header['max_band']             =        ($header_dword[0] & 0x000007C0) >>  6;  // related to lowpass frequency, not sure how it translates exactly
  431.76 +        $info_mpc_header['block_size']           =        ($header_dword[0] & 0x0000003F);
  431.77 +
  431.78 +        switch ($info_mpc_header['stream_major_version']) {
  431.79 +            case 4:
  431.80 +                $info_mpc_header['frame_count'] = ($header_dword[1] >> 16);
  431.81 +                break;
  431.82 +            case 5:
  431.83 +            case 6:
  431.84 +                $info_mpc_header['frame_count'] =  $header_dword[1];
  431.85 +                break;
  431.86 +
  431.87 +            default:
  431.88 +                throw new getid3_exception('Expecting 4, 5 or 6 in version field, found '.$info_mpc_header['stream_major_version'].' instead');
  431.89 +        }
  431.90 +
  431.91 +        if (($info_mpc_header['stream_major_version'] > 4) && ($info_mpc_header['block_size'] != 1)) {
  431.92 +            $getid3->warning('Block size expected to be 1, actual value found: '.$info_mpc_header['block_size']);
  431.93 +        }
  431.94 +
  431.95 +        $info_mpc_header['sample_rate'] = $getid3->info['audio']['sample_rate'] = 44100; // AB: used by all files up to SV7
  431.96 +        $info_mpc_header['samples']     = $info_mpc_header['frame_count'] * 1152 * $getid3->info['audio']['channels'];
  431.97 +
  431.98 +        $getid3->info['audio']['bitrate_mode'] = $info_mpc_header['target_bitrate'] == 0 ? 'vbr' : 'cbr';
  431.99 +
 431.100 +        $getid3->info['mpc']['bitrate']   = ($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8 * 44100 / $info_mpc_header['frame_count'] / 1152;
 431.101 +        $getid3->info['audio']['bitrate'] = $getid3->info['mpc']['bitrate'];
 431.102 +        $getid3->info['audio']['encoder'] = 'SV'.$info_mpc_header['stream_major_version'];
 431.103 +        
 431.104 +        return true;
 431.105 +    }
 431.106 +    
 431.107 +}
 431.108 +
 431.109 +
 431.110 +?>
 431.111 \ No newline at end of file
   432.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   432.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.optimfrog.php	Mon Feb 22 08:02:39 2010 -0500
   432.3 @@ -0,0 +1,468 @@
   432.4 +<?php
   432.5 +// +----------------------------------------------------------------------+
   432.6 +// | PHP version 5                                                        |
   432.7 +// +----------------------------------------------------------------------+
   432.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   432.9 +// +----------------------------------------------------------------------+
  432.10 +// | This source file is subject to version 2 of the GPL license,         |
  432.11 +// | that is bundled with this package in the file license.txt and is     |
  432.12 +// | available through the world-wide-web at the following url:           |
  432.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  432.14 +// +----------------------------------------------------------------------+
  432.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  432.16 +// +----------------------------------------------------------------------+
  432.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  432.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  432.19 +// +----------------------------------------------------------------------+
  432.20 +// | module.audio.optimfrog.php                                           |
  432.21 +// | Module for analyzing OptimFROG Audio files                           |
  432.22 +// | dependencies: module.audio-video.riff.php                            |
  432.23 +// +----------------------------------------------------------------------+
  432.24 +//
  432.25 +// $Id: module.audio.optimfrog.php,v 1.3 2006/11/02 10:48:01 ah Exp $
  432.26 +
  432.27 +        
  432.28 +        
  432.29 +class getid3_optimfrog extends getid3_handler
  432.30 +{
  432.31 +
  432.32 +    public function Analyze() {
  432.33 +        
  432.34 +        $getid3 = $this->getid3;
  432.35 +        
  432.36 +        $getid3->include_module('audio-video.riff');
  432.37 +        
  432.38 +        $getid3->info['audio']['dataformat']   = 'ofr';
  432.39 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  432.40 +        $getid3->info['audio']['lossless']     = true;
  432.41 +
  432.42 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  432.43 +        $ofr_header = fread($getid3->fp, 8);
  432.44 +        
  432.45 +        if (substr($ofr_header, 0, 5) == '*RIFF') {
  432.46 +            return $this->ParseOptimFROGheader42($getid3->fp, $getid3->info);
  432.47 +
  432.48 +        } elseif (substr($ofr_header, 0, 3) == 'OFR') {
  432.49 +            return $this->ParseOptimFROGheader45($getid3->fp, $getid3->info);
  432.50 +        }
  432.51 +        
  432.52 +        throw new getid3_exception('Expecting "*RIFF" or "OFR " at offset '.$getid3->info['avdataoffset'].', found "'.$ofr_header.'"');
  432.53 +    }
  432.54 +
  432.55 +
  432.56 +
  432.57 +    private function ParseOptimFROGheader42() {
  432.58 +        
  432.59 +        $getid3 = $this->getid3;
  432.60 +        
  432.61 +        // for fileformat of v4.21 and older
  432.62 +
  432.63 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  432.64 +        
  432.65 +        $ofr_header_data = fread($getid3->fp, 45);
  432.66 +        $getid3->info['avdataoffset'] = 45;
  432.67 +
  432.68 +        $ofr_encoder_version_raw   = getid3_lib::LittleEndian2Int(substr($ofr_header_data, 0, 1));
  432.69 +        $ofr_encoder_version_major = floor($ofr_encoder_version_raw / 10);
  432.70 +        $ofr_encoder_version_minor = $ofr_encoder_version_raw - ($ofr_encoder_version_major * 10);
  432.71 +        $riff_data                 = substr($ofr_header_data, 1, 44);
  432.72 +        $origna_riff_header_size   = getid3_lib::LittleEndian2Int(substr($riff_data,  4, 4)) +  8;
  432.73 +        $origna_riff_data_size     = getid3_lib::LittleEndian2Int(substr($riff_data, 40, 4)) + 44;
  432.74 +
  432.75 +        if ($origna_riff_header_size > $origna_riff_data_size) {
  432.76 +            $getid3->info['avdataend'] -= ($origna_riff_header_size - $origna_riff_data_size);
  432.77 +            fseek($getid3->fp, $getid3->info['avdataend'], SEEK_SET);
  432.78 +            $riff_data .= fread($getid3->fp, $origna_riff_header_size - $origna_riff_data_size);
  432.79 +        }
  432.80 +
  432.81 +        // move the data chunk after all other chunks (if any)
  432.82 +        // so that the RIFF parser doesn't see EOF when trying
  432.83 +        // to skip over the data chunk
  432.84 +        
  432.85 +        $riff_data = substr($riff_data, 0, 36).substr($riff_data, 44).substr($riff_data, 36, 8);
  432.86 +        
  432.87 +        // Save audio info key
  432.88 +        $saved_info_audio = $getid3->info['audio'];
  432.89 +
  432.90 +        // Instantiate riff module and analyze string
  432.91 +        $riff = new getid3_riff($getid3);
  432.92 +        $riff->AnalyzeString($riff_data);
  432.93 +        
  432.94 +        // Restore info key
  432.95 +        $getid3->info['audio'] = $saved_info_audio;
  432.96 +        
  432.97 +        $getid3->info['audio']['encoder']         = 'OptimFROG '.$ofr_encoder_version_major.'.'.$ofr_encoder_version_minor;
  432.98 +        $getid3->info['audio']['channels']        = $getid3->info['riff']['audio'][0]['channels'];
  432.99 +        $getid3->info['audio']['sample_rate']     = $getid3->info['riff']['audio'][0]['sample_rate'];
 432.100 +        $getid3->info['audio']['bits_per_sample'] = $getid3->info['riff']['audio'][0]['bits_per_sample'];
 432.101 +        $getid3->info['playtime_seconds']         = $origna_riff_data_size / ($getid3->info['audio']['channels'] * $getid3->info['audio']['sample_rate'] * ($getid3->info['audio']['bits_per_sample'] / 8));
 432.102 +        $getid3->info['audio']['bitrate']         = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 432.103 +        
 432.104 +        $getid3->info['fileformat'] = 'ofr';
 432.105 +
 432.106 +        return true;
 432.107 +    }
 432.108 +
 432.109 +
 432.110 +
 432.111 +    private function ParseOptimFROGheader45() {
 432.112 +        
 432.113 +        $getid3 = $this->getid3;
 432.114 +        
 432.115 +        // for fileformat of v4.50a and higher
 432.116 +
 432.117 +        $riff_data = '';
 432.118 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
 432.119 +        
 432.120 +        while (!feof($getid3->fp) && (ftell($getid3->fp) < $getid3->info['avdataend'])) {
 432.121 +        
 432.122 +            $block_offset = ftell($getid3->fp);
 432.123 +            $block_data   = fread($getid3->fp, 8);
 432.124 +            $offset       = 8;
 432.125 +            $block_name   =                  substr($block_data, 0, 4);
 432.126 +            $block_size   = getid3_lib::LittleEndian2Int(substr($block_data, 4, 4));
 432.127 +
 432.128 +            if ($block_name == 'OFRX') {
 432.129 +                $block_name = 'OFR ';
 432.130 +            }
 432.131 +            if (!isset($getid3->info['ofr'][$block_name])) {
 432.132 +                $getid3->info['ofr'][$block_name] = array ();
 432.133 +            }
 432.134 +            $info_ofr_this_block = &$getid3->info['ofr'][$block_name];
 432.135 +
 432.136 +            switch ($block_name) {
 432.137 +                case 'OFR ':
 432.138 +
 432.139 +                    // shortcut
 432.140 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.141 +                    $info_ofr_this_block['size']   = $block_size;
 432.142 +
 432.143 +                    $getid3->info['audio']['encoder'] = 'OptimFROG 4.50 alpha';
 432.144 +                    switch ($block_size) {
 432.145 +                        case 12:
 432.146 +                        case 15:
 432.147 +                            // good
 432.148 +                            break;
 432.149 +
 432.150 +                        default:
 432.151 +                            $getid3->warning('"'.$block_name.'" contains more data than expected (expected 12 or 15 bytes, found '.$block_size.' bytes)');
 432.152 +                            break;
 432.153 +                    }
 432.154 +                    $block_data .= fread($getid3->fp, $block_size);
 432.155 +
 432.156 +                    $info_ofr_this_block['total_samples']      = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 6));
 432.157 +                    $offset += 6;
 432.158 +                    
 432.159 +                    $info_ofr_this_block['raw']['sample_type'] = getid3_lib::LittleEndian2Int($block_data{$offset++});
 432.160 +                    $info_ofr_this_block['sample_type']        = $this->OptimFROGsampleTypeLookup($info_ofr_this_block['raw']['sample_type']);
 432.161 +                    
 432.162 +                    $info_ofr_this_block['channel_config']     = getid3_lib::LittleEndian2Int($block_data{$offset++});
 432.163 +                    $info_ofr_this_block['channels']           = $info_ofr_this_block['channel_config'];
 432.164 +
 432.165 +                    $info_ofr_this_block['sample_rate']        = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 4));
 432.166 +                    $offset += 4;
 432.167 +
 432.168 +                    if ($block_size > 12) {
 432.169 +
 432.170 +                        // OFR 4.504b or higher
 432.171 +                        $info_ofr_this_block['channels']           = $this->OptimFROGchannelConfigNumChannelsLookup($info_ofr_this_block['channel_config']);
 432.172 +                        $info_ofr_this_block['raw']['encoder_id']  = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 2));
 432.173 +                        $info_ofr_this_block['encoder']            = $this->OptimFROGencoderNameLookup($info_ofr_this_block['raw']['encoder_id']);
 432.174 +                        $offset += 2;
 432.175 +
 432.176 +                        $info_ofr_this_block['raw']['compression'] = getid3_lib::LittleEndian2Int($block_data{$offset++});
 432.177 +                        $info_ofr_this_block['compression']        = $this->OptimFROGcompressionLookup($info_ofr_this_block['raw']['compression']);
 432.178 +                        $info_ofr_this_block['speedup']            = $this->OptimFROGspeedupLookup($info_ofr_this_block['raw']['compression']);
 432.179 +
 432.180 +                        $getid3->info['audio']['encoder']         = 'OptimFROG '.$info_ofr_this_block['encoder'];
 432.181 +                        $getid3->info['audio']['encoder_options'] = '--mode '.$info_ofr_this_block['compression'];
 432.182 +
 432.183 +                        if ((($info_ofr_this_block['raw']['encoder_id'] & 0xF0) >> 4) == 7) { // v4.507
 432.184 +                            if (preg_match('/\.ofs$/i', $getid3->filename)) {
 432.185 +                                // OptimFROG DualStream format is lossy, but as of v4.507 there is no way to tell the difference
 432.186 +                                // between lossless and lossy other than the file extension.
 432.187 +                                $getid3->info['audio']['dataformat']   = 'ofs';
 432.188 +                                $getid3->info['audio']['lossless']     = true;
 432.189 +                            }
 432.190 +                        }
 432.191 +                    }
 432.192 +
 432.193 +                    $getid3->info['audio']['channels']        = $info_ofr_this_block['channels'];
 432.194 +                    $getid3->info['audio']['sample_rate']     = $info_ofr_this_block['sample_rate'];
 432.195 +                    $getid3->info['audio']['bits_per_sample'] = $this->OptimFROGbitsPerSampleTypeLookup($info_ofr_this_block['raw']['sample_type']);
 432.196 +                    break;
 432.197 +
 432.198 +
 432.199 +                case 'COMP':
 432.200 +                    // unlike other block types, there CAN be multiple COMP blocks
 432.201 +
 432.202 +                    $comp_data['offset'] = $block_offset;
 432.203 +                    $comp_data['size']   = $block_size;
 432.204 +
 432.205 +                    if ($getid3->info['avdataoffset'] == 0) {
 432.206 +                        $getid3->info['avdataoffset'] = $block_offset;
 432.207 +                    }
 432.208 +
 432.209 +                    // Only interested in first 14 bytes (only first 12 needed for v4.50 alpha), not actual audio data
 432.210 +                    $block_data .= fread($getid3->fp, 14);
 432.211 +                    fseek($getid3->fp, $block_size - 14, SEEK_CUR);
 432.212 +
 432.213 +                    $comp_data['crc_32']                       = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 4));
 432.214 +                    $offset += 4;
 432.215 +                    
 432.216 +                    $comp_data['sample_count']                 = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 4));
 432.217 +                    $offset += 4;
 432.218 +                    
 432.219 +                    $comp_data['raw']['sample_type']           = getid3_lib::LittleEndian2Int($block_data{$offset++});
 432.220 +                    $comp_data['sample_type']                  = $this->OptimFROGsampleTypeLookup($comp_data['raw']['sample_type']);
 432.221 +                    
 432.222 +                    $comp_data['raw']['channel_configuration'] = getid3_lib::LittleEndian2Int($block_data{$offset++});
 432.223 +                    $comp_data['channel_configuration']        = $this->OptimFROGchannelConfigurationLookup($comp_data['raw']['channel_configuration']);
 432.224 +
 432.225 +                    $comp_data['raw']['algorithm_id']          = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 2));
 432.226 +                    $offset += 2;
 432.227 +
 432.228 +                    if ($getid3->info['ofr']['OFR ']['size'] > 12) {
 432.229 +
 432.230 +                        // OFR 4.504b or higher
 432.231 +                        $comp_data['raw']['encoder_id']        = getid3_lib::LittleEndian2Int(substr($block_data, $offset, 2));
 432.232 +                        $comp_data['encoder']                  = $this->OptimFROGencoderNameLookup($comp_data['raw']['encoder_id']);
 432.233 +                        $offset += 2;
 432.234 +                    }
 432.235 +
 432.236 +                    if ($comp_data['crc_32'] == 0x454E4F4E) {
 432.237 +                        // ASCII value of 'NONE' - placeholder value in v4.50a
 432.238 +                        $comp_data['crc_32'] = false;
 432.239 +                    }
 432.240 +
 432.241 +                    $info_ofr_this_block[] = $comp_data;
 432.242 +                    break;
 432.243 +
 432.244 +                case 'HEAD':
 432.245 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.246 +                    $info_ofr_this_block['size']   = $block_size;
 432.247 +
 432.248 +                    $riff_data .= fread($getid3->fp, $block_size);
 432.249 +                    break;
 432.250 +
 432.251 +                case 'TAIL':
 432.252 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.253 +                    $info_ofr_this_block['size']   = $block_size;
 432.254 +
 432.255 +                    if ($block_size > 0) {
 432.256 +                        $riff_data .= fread($getid3->fp, $block_size);
 432.257 +                    }
 432.258 +                    break;
 432.259 +
 432.260 +                case 'RECV':
 432.261 +                    // block contains no useful meta data - simply note and skip
 432.262 +
 432.263 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.264 +                    $info_ofr_this_block['size']   = $block_size;
 432.265 +
 432.266 +                    fseek($getid3->fp, $block_size, SEEK_CUR);
 432.267 +                    break;
 432.268 +
 432.269 +
 432.270 +                case 'APET':
 432.271 +                    // APEtag v2
 432.272 +
 432.273 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.274 +                    $info_ofr_this_block['size']   = $block_size;
 432.275 +                    $getid3->warning('APEtag processing inside OptimFROG not supported in this version ('.GETID3_VERSION.') of getID3()');
 432.276 +
 432.277 +                    fseek($getid3->fp, $block_size, SEEK_CUR);
 432.278 +                    break;
 432.279 +
 432.280 +
 432.281 +                case 'MD5 ':
 432.282 +                    // APEtag v2
 432.283 +
 432.284 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.285 +                    $info_ofr_this_block['size']   = $block_size;
 432.286 +
 432.287 +                    if ($block_size == 16) {
 432.288 +
 432.289 +                        $info_ofr_this_block['md5_binary'] = fread($getid3->fp, $block_size);
 432.290 +                        $info_ofr_this_block['md5_string'] = getid3_lib::PrintHexBytes($info_ofr_this_block['md5_binary'], true, false, false);
 432.291 +                        $getid3->info['md5_data_source']   = $info_ofr_this_block['md5_string'];
 432.292 +
 432.293 +                    } else {
 432.294 +
 432.295 +                        $getid3->warning('Expecting block size of 16 in "MD5 " chunk, found '.$block_size.' instead');
 432.296 +                        fseek($getid3->fp, $block_size, SEEK_CUR);
 432.297 +
 432.298 +                    }
 432.299 +                    break;
 432.300 +
 432.301 +
 432.302 +                default:
 432.303 +                    $info_ofr_this_block['offset'] = $block_offset;
 432.304 +                    $info_ofr_this_block['size']   = $block_size;
 432.305 +
 432.306 +                    $getid3->warning('Unhandled OptimFROG block type "'.$block_name.'" at offset '.$info_ofr_this_block['offset']);
 432.307 +                    fseek($getid3->fp, $block_size, SEEK_CUR);
 432.308 +                    break;
 432.309 +            }
 432.310 +        }
 432.311 +        
 432.312 +        if (isset($getid3->info['ofr']['TAIL']['offset'])) {
 432.313 +            $getid3->info['avdataend'] = $getid3->info['ofr']['TAIL']['offset'];
 432.314 +        }
 432.315 +
 432.316 +        $getid3->info['playtime_seconds'] = (float)$getid3->info['ofr']['OFR ']['total_samples'] / ($getid3->info['audio']['channels'] * $getid3->info['audio']['sample_rate']);
 432.317 +        $getid3->info['audio']['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 432.318 +
 432.319 +        // move the data chunk after all other chunks (if any)
 432.320 +        // so that the RIFF parser doesn't see EOF when trying
 432.321 +        // to skip over the data chunk
 432.322 +        
 432.323 +        $riff_data = substr($riff_data, 0, 36).substr($riff_data, 44).substr($riff_data, 36, 8);
 432.324 +        
 432.325 +        // Save audio info key
 432.326 +        $saved_info_audio = $getid3->info['audio'];
 432.327 +
 432.328 +        // Instantiate riff module and analyze string
 432.329 +        $riff = new getid3_riff($getid3);
 432.330 +        $riff->AnalyzeString($riff_data);
 432.331 +        
 432.332 +        // Restore info key
 432.333 +        $getid3->info['audio'] = $saved_info_audio;
 432.334 +        
 432.335 +        $getid3->info['fileformat'] = 'ofr';
 432.336 +
 432.337 +        return true;
 432.338 +    }
 432.339 +
 432.340 +
 432.341 +
 432.342 +    public static function OptimFROGsampleTypeLookup($sample_type) {
 432.343 +        
 432.344 +        static $lookup = array (
 432.345 +            0  => 'unsigned int (8-bit)',
 432.346 +            1  => 'signed int (8-bit)',
 432.347 +            2  => 'unsigned int (16-bit)',
 432.348 +            3  => 'signed int (16-bit)',
 432.349 +            4  => 'unsigned int (24-bit)',
 432.350 +            5  => 'signed int (24-bit)',
 432.351 +            6  => 'unsigned int (32-bit)',
 432.352 +            7  => 'signed int (32-bit)',
 432.353 +            8  => 'float 0.24 (32-bit)',
 432.354 +            9  => 'float 16.8 (32-bit)',
 432.355 +            10 => 'float 24.0 (32-bit)'
 432.356 +        );
 432.357 +        
 432.358 +        return @$lookup[$sample_type];
 432.359 +    }
 432.360 +
 432.361 +
 432.362 +
 432.363 +    public static function OptimFROGbitsPerSampleTypeLookup($sample_type) {
 432.364 +
 432.365 +        static $lookup = array (
 432.366 +            0  => 8,
 432.367 +            1  => 8,
 432.368 +            2  => 16,
 432.369 +            3  => 16,
 432.370 +            4  => 24,
 432.371 +            5  => 24,
 432.372 +            6  => 32,
 432.373 +            7  => 32,
 432.374 +            8  => 32,
 432.375 +            9  => 32,
 432.376 +            10 => 32
 432.377 +        );
 432.378 +        
 432.379 +        return @$lookup[$sample_type];
 432.380 +    }
 432.381 +
 432.382 +
 432.383 +
 432.384 +    public static function OptimFROGchannelConfigurationLookup($channel_configuration) {
 432.385 +        
 432.386 +        static $lookup = array (
 432.387 +            0 => 'mono',
 432.388 +            1 => 'stereo'
 432.389 +        );
 432.390 +        
 432.391 +        return @$lookup[$channel_configuration];
 432.392 +    }
 432.393 +
 432.394 +
 432.395 +
 432.396 +    public static function OptimFROGchannelConfigNumChannelsLookup($channel_configuration) {
 432.397 +
 432.398 +        static $lookup = array (
 432.399 +            0 => 1,
 432.400 +            1 => 2
 432.401 +        );
 432.402 +        
 432.403 +        return @$lookup[$channel_configuration];
 432.404 +    }
 432.405 +
 432.406 +
 432.407 +
 432.408 +    public static function OptimFROGencoderNameLookup($encoder_id) {
 432.409 +
 432.410 +        // version = (encoderID >> 4) + 4500
 432.411 +        // system  =  encoderID & 0xF
 432.412 +
 432.413 +        $encoder_version   = number_format(((($encoder_id & 0xF0) >> 4) + 4500) / 1000, 3);
 432.414 +        $encoder_system_id = ($encoder_id & 0x0F);
 432.415 +
 432.416 +        static $lookup = array (
 432.417 +            0x00 => 'Windows console',
 432.418 +            0x01 => 'Linux console',
 432.419 +            0x0F => 'unknown'
 432.420 +        );
 432.421 +        return $encoder_version.' ('.(isset($lookup[$encoder_system_id]) ? $lookup[$encoder_system_id] : 'undefined encoder type (0x'.dechex($encoder_system_id).')').')';
 432.422 +    }
 432.423 +
 432.424 +
 432.425 +
 432.426 +    public static function OptimFROGcompressionLookup($compression_id) {
 432.427 +
 432.428 +        // mode    = compression >> 3
 432.429 +        // speedup = compression & 0x07
 432.430 +
 432.431 +        $compression_mode_id    = ($compression_id & 0xF8) >> 3;
 432.432 +        //$compression_speed_up_id = ($compression_id & 0x07);
 432.433 +
 432.434 +        static $lookup = array (
 432.435 +            0x00 => 'fast',
 432.436 +            0x01 => 'normal',
 432.437 +            0x02 => 'high',
 432.438 +            0x03 => 'extra', // extranew (some versions)
 432.439 +            0x04 => 'best',  // bestnew (some versions)
 432.440 +            0x05 => 'ultra',
 432.441 +            0x06 => 'insane',
 432.442 +            0x07 => 'highnew',
 432.443 +            0x08 => 'extranew',
 432.444 +            0x09 => 'bestnew'
 432.445 +        );
 432.446 +        return (isset($lookup[$compression_mode_id]) ? $lookup[$compression_mode_id] : 'undefined mode (0x'.str_pad(dechex($compression_mode_id), 2, '0', STR_PAD_LEFT).')');
 432.447 +    }
 432.448 +
 432.449 +
 432.450 +
 432.451 +    public static function OptimFROGspeedupLookup($compression_id) {
 432.452 +
 432.453 +        // mode    = compression >> 3
 432.454 +        // speedup = compression & 0x07
 432.455 +
 432.456 +        //$compression_mode_id    = ($compression_id & 0xF8) >> 3;
 432.457 +        $compression_speed_up_id = ($compression_id & 0x07);
 432.458 +
 432.459 +        static $lookup = array (
 432.460 +            0x00 => '1x',
 432.461 +            0x01 => '2x',
 432.462 +            0x02 => '4x'
 432.463 +        );
 432.464 +
 432.465 +        return (isset($lookup[$compression_speed_up_id]) ? $lookup[$compression_speed_up_id] : 'undefined mode (0x'.dechex($compression_speed_up_id));
 432.466 +    }
 432.467 +
 432.468 +}
 432.469 +
 432.470 +
 432.471 +?>
 432.472 \ No newline at end of file
   433.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   433.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.rkau.php	Mon Feb 22 08:02:39 2010 -0500
   433.3 @@ -0,0 +1,101 @@
   433.4 +<?php
   433.5 +// +----------------------------------------------------------------------+
   433.6 +// | PHP version 5                                                        |
   433.7 +// +----------------------------------------------------------------------+
   433.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   433.9 +// +----------------------------------------------------------------------+
  433.10 +// | This source file is subject to version 2 of the GPL license,         |
  433.11 +// | that is bundled with this package in the file license.txt and is     |
  433.12 +// | available through the world-wide-web at the following url:           |
  433.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  433.14 +// +----------------------------------------------------------------------+
  433.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  433.16 +// +----------------------------------------------------------------------+
  433.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  433.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  433.19 +// +----------------------------------------------------------------------+
  433.20 +// | module.audio.rkau.php                                                |
  433.21 +// | Module for analyzing RKAU Audio files                                |
  433.22 +// | dependencies: NONE                                                   |
  433.23 +// +----------------------------------------------------------------------+
  433.24 +//
  433.25 +// $Id: module.audio.rkau.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  433.26 +
  433.27 +        
  433.28 +        
  433.29 +class getid3_rkau extends getid3_handler
  433.30 +{
  433.31 +
  433.32 +    public function Analyze() {
  433.33 +
  433.34 +        $getid3 = $this->getid3;
  433.35 +        
  433.36 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  433.37 +        $rkau_header = fread($getid3->fp, 20);
  433.38 +        
  433.39 +        // Magic bytes 'RKA'
  433.40 +            
  433.41 +        $getid3->info['fileformat']            = 'rkau';
  433.42 +        $getid3->info['audio']['dataformat']   = 'rkau';
  433.43 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  433.44 +        
  433.45 +        // Shortcut
  433.46 +        $getid3->info['rkau'] = array ();
  433.47 +        $info_rkau            = &$getid3->info['rkau'];
  433.48 +        
  433.49 +        $info_rkau['raw']['version']   = getid3_lib::LittleEndian2Int(substr($rkau_header, 3, 1));
  433.50 +        $info_rkau['version']          = '1.'.str_pad($info_rkau['raw']['version'] & 0x0F, 2, '0', STR_PAD_LEFT);
  433.51 +        if (($info_rkau['version'] > 1.07) || ($info_rkau['version'] < 1.06)) {
  433.52 +            throw new getid3_exception('This version of getID3() can only parse RKAU files v1.06 and 1.07 (this file is v'.$info_rkau['version'].')');
  433.53 +        }
  433.54 +
  433.55 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_rkau, $rkau_header,  4,
  433.56 +            array (
  433.57 +                'source_bytes'     => 4,
  433.58 +                'sample_rate'      => 4,
  433.59 +                'channels'         => 1,
  433.60 +                'bits_per_sample'  => 1
  433.61 +            )
  433.62 +        );
  433.63 +
  433.64 +        $info_rkau['raw']['quality']   = getid3_lib::LittleEndian2Int(substr($rkau_header, 14, 1));
  433.65 +        
  433.66 +        $quality =  $info_rkau['raw']['quality'] & 0x0F;
  433.67 +
  433.68 +        $info_rkau['lossless']          = (($quality == 0) ? true : false);
  433.69 +        $info_rkau['compression_level'] = (($info_rkau['raw']['quality'] & 0xF0) >> 4) + 1;
  433.70 +        if (!$info_rkau['lossless']) {
  433.71 +            $info_rkau['quality_setting'] = $quality;
  433.72 +        }
  433.73 +        
  433.74 +        $info_rkau['raw']['flags']            = getid3_lib::LittleEndian2Int(substr($rkau_header, 15, 1));
  433.75 +        $info_rkau['flags']['joint_stereo']   = (bool)(!($info_rkau['raw']['flags'] & 0x01));
  433.76 +        $info_rkau['flags']['streaming']      =  (bool) ($info_rkau['raw']['flags'] & 0x02);
  433.77 +        $info_rkau['flags']['vrq_lossy_mode'] =  (bool) ($info_rkau['raw']['flags'] & 0x04);
  433.78 +
  433.79 +        if ($info_rkau['flags']['streaming']) {
  433.80 +            $getid3->info['avdataoffset'] += 20;
  433.81 +            $info_rkau['compressed_bytes']  = getid3_lib::LittleEndian2Int(substr($rkau_header, 16, 4));
  433.82 +        } 
  433.83 +        else {
  433.84 +            $getid3->info['avdataoffset'] += 16;
  433.85 +            $info_rkau['compressed_bytes'] = $getid3->info['avdataend'] - $getid3->info['avdataoffset'] - 1;
  433.86 +        }
  433.87 +        // Note: compressed_bytes does not always equal what appears to be the actual number of compressed bytes,
  433.88 +        // sometimes it's more, sometimes less. No idea why(?)
  433.89 +
  433.90 +        $getid3->info['audio']['lossless']        = $info_rkau['lossless'];
  433.91 +        $getid3->info['audio']['channels']        = $info_rkau['channels'];
  433.92 +        $getid3->info['audio']['bits_per_sample'] = $info_rkau['bits_per_sample'];
  433.93 +        $getid3->info['audio']['sample_rate']     = $info_rkau['sample_rate'];
  433.94 +
  433.95 +        $getid3->info['playtime_seconds']         = $info_rkau['source_bytes'] / ($info_rkau['sample_rate'] * $info_rkau['channels'] * ($info_rkau['bits_per_sample'] / 8));
  433.96 +        $getid3->info['audio']['bitrate']         = ($info_rkau['compressed_bytes'] * 8) / $getid3->info['playtime_seconds'];
  433.97 +
  433.98 +        return true;
  433.99 +
 433.100 +    }
 433.101 +
 433.102 +}
 433.103 +
 433.104 +?>
 433.105 \ No newline at end of file
   434.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   434.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.shorten.php	Mon Feb 22 08:02:39 2010 -0500
   434.3 @@ -0,0 +1,121 @@
   434.4 +<?php
   434.5 +// +----------------------------------------------------------------------+
   434.6 +// | PHP version 5                                                        |
   434.7 +// +----------------------------------------------------------------------+
   434.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   434.9 +// +----------------------------------------------------------------------+
  434.10 +// | This source file is subject to version 2 of the GPL license,         |
  434.11 +// | that is bundled with this package in the file license.txt and is     |
  434.12 +// | available through the world-wide-web at the following url:           |
  434.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  434.14 +// +----------------------------------------------------------------------+
  434.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  434.16 +// +----------------------------------------------------------------------+
  434.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  434.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  434.19 +// +----------------------------------------------------------------------+
  434.20 +// | module.audio.shorten.php                                             |
  434.21 +// | Module for analyzing Shorten Audio files                             |
  434.22 +// | dependencies: module.audio-video.riff.php                            |
  434.23 +// +----------------------------------------------------------------------+
  434.24 +//
  434.25 +// $Id: module.audio.shorten.php,v 1.5 2006/12/03 19:28:18 ah Exp $
  434.26 +
  434.27 +        
  434.28 +        
  434.29 +class getid3_shorten extends getid3_handler
  434.30 +{
  434.31 +
  434.32 +    public function __construct(getID3 $getid3) {
  434.33 +
  434.34 +        parent::__construct($getid3);
  434.35 +        
  434.36 +        if ((bool)ini_get('safe_mode')) {
  434.37 +            throw new getid3_exception('PHP running in Safe Mode - backtick operator not available, cannot analyze Shorten files.');
  434.38 +        }
  434.39 +
  434.40 +        if (!`head --version`) {
  434.41 +            throw new getid3_exception('head[.exe] binary not found in path. UNIX: typically /usr/bin. Windows: typically c:\windows\system32.');
  434.42 +        }
  434.43 +        
  434.44 +        if (!`shorten -l`) {
  434.45 +            throw new getid3_exception('shorten[.exe] binary not found in path. UNIX: typically /usr/bin. Windows: typically c:\windows\system32.');
  434.46 +        }
  434.47 +    }
  434.48 +
  434.49 +
  434.50 +    public function Analyze() {
  434.51 +        
  434.52 +        $getid3 = $this->getid3;
  434.53 +
  434.54 +        $getid3->include_module('audio-video.riff');
  434.55 +
  434.56 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  434.57 +
  434.58 +        $shn_header = fread($getid3->fp, 8);
  434.59 +        
  434.60 +        // Magic bytes: "ajkg"
  434.61 +        
  434.62 +        $getid3->info['fileformat']            = 'shn';
  434.63 +        $getid3->info['audio']['dataformat']   = 'shn';
  434.64 +        $getid3->info['audio']['lossless']     = true;
  434.65 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  434.66 +
  434.67 +        $getid3->info['shn']['version'] = getid3_lib::LittleEndian2Int($shn_header{4});
  434.68 +
  434.69 +        fseek($getid3->fp, $getid3->info['avdataend'] - 12, SEEK_SET);
  434.70 +        
  434.71 +        $seek_table_signature_test = fread($getid3->fp, 12);
  434.72 +        
  434.73 +        $getid3->info['shn']['seektable']['present'] = (bool)(substr($seek_table_signature_test, 4, 8) == 'SHNAMPSK');
  434.74 +        if ($getid3->info['shn']['seektable']['present']) {
  434.75 +        
  434.76 +            $getid3->info['shn']['seektable']['length'] = getid3_lib::LittleEndian2Int(substr($seek_table_signature_test, 0, 4));
  434.77 +            $getid3->info['shn']['seektable']['offset'] = $getid3->info['avdataend'] - $getid3->info['shn']['seektable']['length'];
  434.78 +            fseek($getid3->fp, $getid3->info['shn']['seektable']['offset'], SEEK_SET);
  434.79 +            $seek_table_magic = fread($getid3->fp, 4);
  434.80 +        
  434.81 +            if ($seek_table_magic != 'SEEK') {
  434.82 +
  434.83 +                throw new getid3_exception('Expecting "SEEK" at offset '.$getid3->info['shn']['seektable']['offset'].', found "'.$seek_table_magic.'"');
  434.84 +            } 
  434.85 +
  434.86 +            $seek_table_data = fread($getid3->fp, $getid3->info['shn']['seektable']['length'] - 16);
  434.87 +            $getid3->info['shn']['seektable']['entry_count'] = floor(strlen($seek_table_data) / 80);
  434.88 +        }
  434.89 +
  434.90 +        $commandline = 'shorten -x '.escapeshellarg(realpath($getid3->filename)).' - | head -c 64';
  434.91 +        $output = `$commandline`;
  434.92 +
  434.93 +        if (@$output && substr($output, 12, 4) == 'fmt ') {
  434.94 +
  434.95 +            $fmt_size = getid3_lib::LittleEndian2Int(substr($output, 16, 4));
  434.96 +            $decoded_wav_format_ex = getid3_riff::RIFFparseWAVEFORMATex(substr($output, 20, $fmt_size));
  434.97 +            
  434.98 +            $getid3->info['audio']['channels']        = $decoded_wav_format_ex['channels'];
  434.99 +            $getid3->info['audio']['bits_per_sample'] = $decoded_wav_format_ex['bits_per_sample'];
 434.100 +            $getid3->info['audio']['sample_rate']     = $decoded_wav_format_ex['sample_rate'];
 434.101 +
 434.102 +            if (substr($output, 20 + $fmt_size, 4) == 'data') {
 434.103 +
 434.104 +                $getid3->info['playtime_seconds'] = getid3_lib::LittleEndian2Int(substr($output, 20 + 4 + $fmt_size, 4)) / $decoded_wav_format_ex['raw']['nAvgBytesPerSec'];
 434.105 +
 434.106 +            } else {
 434.107 +
 434.108 +                throw new getid3_exception('shorten failed to decode DATA chunk to expected location, cannot determine playtime');
 434.109 +            }
 434.110 +
 434.111 +            $getid3->info['audio']['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) / $getid3->info['playtime_seconds']) * 8;
 434.112 +
 434.113 +        } else {
 434.114 +
 434.115 +            throw new getid3_exception('shorten failed to decode file to WAV for parsing');
 434.116 +            return false;
 434.117 +        }
 434.118 +
 434.119 +        return true;
 434.120 +    }
 434.121 +
 434.122 +}
 434.123 +
 434.124 +?>
 434.125 \ No newline at end of file
   435.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   435.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.tta.php	Mon Feb 22 08:02:39 2010 -0500
   435.3 @@ -0,0 +1,125 @@
   435.4 +<?php
   435.5 +// +----------------------------------------------------------------------+
   435.6 +// | PHP version 5                                                        |
   435.7 +// +----------------------------------------------------------------------+
   435.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   435.9 +// +----------------------------------------------------------------------+
  435.10 +// | This source file is subject to version 2 of the GPL license,         |
  435.11 +// | that is bundled with this package in the file license.txt and is     |
  435.12 +// | available through the world-wide-web at the following url:           |
  435.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  435.14 +// +----------------------------------------------------------------------+
  435.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  435.16 +// +----------------------------------------------------------------------+
  435.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  435.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  435.19 +// +----------------------------------------------------------------------+
  435.20 +// | module.audio.tta.php                                                 |
  435.21 +// | Module for analyzing TTA Audio files                                 |
  435.22 +// | dependencies: NONE                                                   |
  435.23 +// +----------------------------------------------------------------------+
  435.24 +//
  435.25 +// $Id: module.audio.tta.php,v 1.2 2006/11/02 10:48:01 ah Exp $
  435.26 +
  435.27 +        
  435.28 +        
  435.29 +class getid3_tta extends getid3_handler
  435.30 +{
  435.31 +
  435.32 +    public function Analyze() {
  435.33 +
  435.34 +        $getid3 = $this->getid3;
  435.35 +        
  435.36 +        $getid3->info['fileformat']            = 'tta';
  435.37 +        $getid3->info['audio']['dataformat']   = 'tta';
  435.38 +        $getid3->info['audio']['lossless']     = true;
  435.39 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
  435.40 +
  435.41 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  435.42 +        $tta_header = fread($getid3->fp, 26);
  435.43 +
  435.44 +        $getid3->info['tta']['magic'] = 'TTA';  // Magic bytes
  435.45 +        
  435.46 +        switch ($tta_header{3}) {
  435.47 +        
  435.48 +            case "\x01": // TTA v1.x
  435.49 +            case "\x02": // TTA v1.x
  435.50 +            case "\x03": // TTA v1.x
  435.51 +                
  435.52 +                // "It was the demo-version of the TTA encoder. There is no released format with such header. TTA encoder v1 is not supported about a year."
  435.53 +                $getid3->info['tta']['major_version'] = 1;
  435.54 +                $getid3->info['avdataoffset'] += 16;
  435.55 +                
  435.56 +                getid3_lib::ReadSequence('LittleEndian2Int', $getid3->info['tta'], $tta_header, 4, 
  435.57 +                    array (
  435.58 +                        'channels'            => 2,
  435.59 +                        'bits_per_sample'     => 2,
  435.60 +                        'sample_rate'         => 4,
  435.61 +                        'samples_per_channel' => 4
  435.62 +                    )
  435.63 +                );                
  435.64 +                $getid3->info['tta']['compression_level'] = ord($tta_header{3});
  435.65 +                
  435.66 +                $getid3->info['audio']['encoder_options']   = '-e'.$getid3->info['tta']['compression_level'];
  435.67 +                $getid3->info['playtime_seconds']           = $getid3->info['tta']['samples_per_channel'] / $getid3->info['tta']['sample_rate'];
  435.68 +                break;
  435.69 +
  435.70 +            case '2': // TTA v2.x
  435.71 +                // "I have hurried to release the TTA 2.0 encoder. Format documentation is removed from our site. This format still in development. Please wait the TTA2 format, encoder v4."
  435.72 +                $getid3->info['tta']['major_version'] = 2;
  435.73 +                $getid3->info['avdataoffset'] += 20;
  435.74 +
  435.75 +                getid3_lib::ReadSequence('LittleEndian2Int', $getid3->info['tta'], $tta_header, 4, 
  435.76 +                    array (
  435.77 +                        'compression_level' => 2,
  435.78 +                        'audio_format'      => 2,
  435.79 +                        'channels'          => 2,
  435.80 +                        'bits_per_sample'   => 2,
  435.81 +                        'sample_rate'       => 4,
  435.82 +                        'data_length'       => 4
  435.83 +                    )
  435.84 +                );                
  435.85 +                
  435.86 +                $getid3->info['audio']['encoder_options']   = '-e'.$getid3->info['tta']['compression_level'];
  435.87 +                $getid3->info['playtime_seconds']           = $getid3->info['tta']['data_length'] / $getid3->info['tta']['sample_rate'];
  435.88 +                break;
  435.89 +
  435.90 +            case '1': // TTA v3.x
  435.91 +                // "This is a first stable release of the TTA format. It will be supported by the encoders v3 or higher."
  435.92 +                $getid3->info['tta']['major_version'] = 3;
  435.93 +                $getid3->info['avdataoffset'] += 26;
  435.94 +
  435.95 +                getid3_lib::ReadSequence('LittleEndian2Int', $getid3->info['tta'], $tta_header, 4, 
  435.96 +                    array (
  435.97 +                        'audio_format'   => 2,
  435.98 +                        'channels'       => 2,
  435.99 +                        'bits_per_sample'=> 2,
 435.100 +                        'sample_rate'    => 4,
 435.101 +                        'data_length'    => 4,
 435.102 +                        'crc32_footer'   => -4,     // string
 435.103 +                        'seek_point'     => 4 
 435.104 +                    )
 435.105 +                );                
 435.106 +
 435.107 +                $getid3->info['playtime_seconds']    = $getid3->info['tta']['data_length'] / $getid3->info['tta']['sample_rate'];
 435.108 +                break;
 435.109 +
 435.110 +            default:
 435.111 +                throw new getid3_exception('This version of getID3() only knows how to handle TTA v1, v2 and v3 - it may not work correctly with this file which appears to be TTA v'.$tta_header{3});
 435.112 +                return false;
 435.113 +                break;
 435.114 +        }
 435.115 +
 435.116 +        $getid3->info['audio']['encoder']         = 'TTA v'.$getid3->info['tta']['major_version'];
 435.117 +        $getid3->info['audio']['bits_per_sample'] = $getid3->info['tta']['bits_per_sample'];
 435.118 +        $getid3->info['audio']['sample_rate']     = $getid3->info['tta']['sample_rate'];
 435.119 +        $getid3->info['audio']['channels']        = $getid3->info['tta']['channels'];
 435.120 +        $getid3->info['audio']['bitrate']         = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 435.121 +
 435.122 +        return true;
 435.123 +    }
 435.124 +
 435.125 +}
 435.126 +
 435.127 +
 435.128 +?>
 435.129 \ No newline at end of file
   436.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   436.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.voc.php	Mon Feb 22 08:02:39 2010 -0500
   436.3 @@ -0,0 +1,240 @@
   436.4 +<?php
   436.5 +// +----------------------------------------------------------------------+
   436.6 +// | PHP version 5                                                        |
   436.7 +// +----------------------------------------------------------------------+
   436.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   436.9 +// +----------------------------------------------------------------------+
  436.10 +// | This source file is subject to version 2 of the GPL license,         |
  436.11 +// | that is bundled with this package in the file license.txt and is     |
  436.12 +// | available through the world-wide-web at the following url:           |
  436.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  436.14 +// +----------------------------------------------------------------------+
  436.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  436.16 +// +----------------------------------------------------------------------+
  436.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  436.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  436.19 +// +----------------------------------------------------------------------+
  436.20 +// | module.audio.voc.php                                                 |
  436.21 +// | Module for analyzing Creative VOC Audio files.                       |
  436.22 +// | dependencies: NONE                                                   |
  436.23 +// +----------------------------------------------------------------------+
  436.24 +//
  436.25 +// $Id: module.audio.voc.php,v 1.3 2006/11/02 10:48:02 ah Exp $
  436.26 +
  436.27 +        
  436.28 +        
  436.29 +class getid3_voc extends getid3_handler
  436.30 +{
  436.31 +
  436.32 +    public function Analyze() {
  436.33 +
  436.34 +        $getid3 = $this->getid3;
  436.35 +        
  436.36 +        $original_av_data_offset = $getid3->info['avdataoffset'];
  436.37 +        
  436.38 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  436.39 +        $voc_header= fread($getid3->fp, 26);
  436.40 +
  436.41 +        // Magic bytes: 'Creative Voice File'
  436.42 +
  436.43 +        $info_audio = &$getid3->info['audio'];
  436.44 +        $getid3->info['voc'] = array ();
  436.45 +        $info_voc = &$getid3->info['voc'];
  436.46 +
  436.47 +        $getid3->info['fileformat']    = 'voc';
  436.48 +        $info_audio['dataformat']      = 'voc';
  436.49 +        $info_audio['bitrate_mode']    = 'cbr';
  436.50 +        $info_audio['lossless']        = true;
  436.51 +        $info_audio['channels']        = 1;         // might be overriden below
  436.52 +        $info_audio['bits_per_sample'] = 8;         // might be overriden below
  436.53 +
  436.54 +        // byte #     Description
  436.55 +        // ------     ------------------------------------------
  436.56 +        // 00-12      'Creative Voice File'
  436.57 +        // 13         1A (eof to abort printing of file)
  436.58 +        // 14-15      Offset of first datablock in .voc file (std 1A 00 in Intel Notation)
  436.59 +        // 16-17      Version number (minor,major) (VOC-HDR puts 0A 01)
  436.60 +        // 18-19      2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)
  436.61 +
  436.62 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_voc['header'], $voc_header, 20,
  436.63 +            array (
  436.64 +                'datablock_offset' => 2, 
  436.65 +                'minor_version'    => 1, 
  436.66 +                'major_version'    => 1  
  436.67 +            )
  436.68 +        );
  436.69 +
  436.70 +        do {
  436.71 +            $block_offset = ftell($getid3->fp);
  436.72 +            $block_data   = fread($getid3->fp, 4);
  436.73 +            $block_type   = ord($block_data{0});
  436.74 +            $block_size   = getid3_lib::LittleEndian2Int(substr($block_data, 1, 3));
  436.75 +            $this_block   = array ();
  436.76 +
  436.77 +            @$info_voc['blocktypes'][$block_type]++;
  436.78 +            
  436.79 +            switch ($block_type) {
  436.80 +                
  436.81 +                case 0:  // Terminator
  436.82 +                    // do nothing, we'll break out of the loop down below
  436.83 +                    break;
  436.84 +
  436.85 +                case 1:  // Sound data
  436.86 +                    $block_data .= fread($getid3->fp, 2);
  436.87 +                    if ($getid3->info['avdataoffset'] <= $original_av_data_offset) {
  436.88 +                        $getid3->info['avdataoffset'] = ftell($getid3->fp);
  436.89 +                    }
  436.90 +                    fseek($getid3->fp, $block_size - 2, SEEK_CUR);
  436.91 +
  436.92 +                    getid3_lib::ReadSequence('LittleEndian2Int', $this_block, $block_data, 4,
  436.93 +                        array (
  436.94 +                            'sample_rate_id'   => 1,
  436.95 +                            'compression_type' => 1
  436.96 +                        )
  436.97 +                    );
  436.98 +
  436.99 +                    $this_block['compression_name'] = getid3_voc::VOCcompressionTypeLookup($this_block['compression_type']);
 436.100 +                    if ($this_block['compression_type'] <= 3) {
 436.101 +                        $info_voc['compressed_bits_per_sample'] = (int)(str_replace('-bit', '', $this_block['compression_name']));
 436.102 +                    }
 436.103 +
 436.104 +                    // Less accurate sample_rate calculation than the Extended block (#8) data (but better than nothing if Extended Block is not available)
 436.105 +                    if (empty($info_audio['sample_rate'])) {
 436.106 +                        // SR byte = 256 - (1000000 / sample_rate)
 436.107 +                        $info_audio['sample_rate'] = (int)floor((1000000 / (256 - $this_block['sample_rate_id'])) / $info_audio['channels']);
 436.108 +                    }
 436.109 +                    break;
 436.110 +
 436.111 +                case 2:  // Sound continue
 436.112 +                case 3:  // Silence
 436.113 +                case 4:  // Marker
 436.114 +                case 6:  // Repeat
 436.115 +                case 7:  // End repeat
 436.116 +                    // nothing useful, just skip
 436.117 +                    fseek($getid3->fp, $block_size, SEEK_CUR);
 436.118 +                    break;
 436.119 +
 436.120 +                case 8:  // Extended
 436.121 +                    $block_data .= fread($getid3->fp, 4);
 436.122 +
 436.123 +                    //00-01  Time Constant:
 436.124 +                    //   Mono: 65536 - (256000000 / sample_rate)
 436.125 +                    // Stereo: 65536 - (256000000 / (sample_rate * 2))
 436.126 +                    getid3_lib::ReadSequence('LittleEndian2Int', $this_block, $block_data, 4,
 436.127 +                        array (
 436.128 +                            'time_constant' => 2, 
 436.129 +                            'pack_method'   => 1, 
 436.130 +                            'stereo'        => 1        
 436.131 +                        )
 436.132 +                    );
 436.133 +                    $this_block['stereo']      = (bool)$this_block['stereo'];
 436.134 +                    
 436.135 +                    $info_audio['channels']    = ($this_block['stereo'] ? 2 : 1);
 436.136 +                    $info_audio['sample_rate'] = (int)floor((256000000 / (65536 - $this_block['time_constant'])) / $info_audio['channels']);
 436.137 +                    break;
 436.138 +
 436.139 +                case 9:  // data block that supersedes blocks 1 and 8. Used for stereo, 16 bit
 436.140 +                    $block_data .= fread($getid3->fp, 12);
 436.141 +                    if ($getid3->info['avdataoffset'] <= $original_av_data_offset) {
 436.142 +                        $getid3->info['avdataoffset'] = ftell($getid3->fp);
 436.143 +                    }
 436.144 +                    fseek($getid3->fp, $block_size - 12, SEEK_CUR);
 436.145 +
 436.146 +                    getid3_lib::ReadSequence('LittleEndian2Int', $this_block, $block_data, 4,
 436.147 +                        array (
 436.148 +                            'sample_rate'     => 4,
 436.149 +                            'bits_per_sample' => 1,
 436.150 +                            'channels'        => 1, 
 436.151 +                            'wFormat'         => 2 
 436.152 +                        )
 436.153 +                    );
 436.154 +                    
 436.155 +                    $this_block['compression_name'] = getid3_voc::VOCwFormatLookup($this_block['wFormat']);
 436.156 +                    if (getid3_voc::VOCwFormatActualBitsPerSampleLookup($this_block['wFormat'])) {
 436.157 +                        $info_voc['compressed_bits_per_sample'] = getid3_voc::VOCwFormatActualBitsPerSampleLookup($this_block['wFormat']);
 436.158 +                    }
 436.159 +
 436.160 +                    $info_audio['sample_rate']     = $this_block['sample_rate'];
 436.161 +                    $info_audio['bits_per_sample'] = $this_block['bits_per_sample'];
 436.162 +                    $info_audio['channels']        = $this_block['channels'];
 436.163 +                    break;
 436.164 +
 436.165 +                default:
 436.166 +                    $getid3->warning('Unhandled block type "'.$block_type.'" at offset '.$block_offset);
 436.167 +                    fseek($getid3->fp, $block_size, SEEK_CUR);
 436.168 +                    break;
 436.169 +            }
 436.170 +
 436.171 +            if (!empty($this_block)) {
 436.172 +                $this_block['block_offset']  = $block_offset;
 436.173 +                $this_block['block_size']    = $block_size;
 436.174 +                $this_block['block_type_id'] = $block_type;
 436.175 +                $info_voc['blocks'][] = $this_block;
 436.176 +            }
 436.177 +
 436.178 +        } while (!feof($getid3->fp) && ($block_type != 0));
 436.179 +
 436.180 +        // Terminator block doesn't have size field, so seek back 3 spaces
 436.181 +        fseek($getid3->fp, -3, SEEK_CUR);
 436.182 +
 436.183 +        ksort($info_voc['blocktypes']);
 436.184 +
 436.185 +        if (!empty($info_voc['compressed_bits_per_sample'])) {
 436.186 +            $getid3->info['playtime_seconds'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / ($info_voc['compressed_bits_per_sample'] * $info_audio['channels'] * $info_audio['sample_rate']);
 436.187 +            $info_audio['bitrate'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 436.188 +        }
 436.189 +
 436.190 +        return true;
 436.191 +    }
 436.192 +
 436.193 +
 436.194 +
 436.195 +    public static function VOCcompressionTypeLookup($index) {
 436.196 +        
 436.197 +        static $lookup = array (
 436.198 +            0 => '8-bit',
 436.199 +            1 => '4-bit',
 436.200 +            2 => '2.6-bit',
 436.201 +            3 => '2-bit'
 436.202 +        );
 436.203 +        return (isset($lookup[$index]) ? $lookup[$index] : 'Multi DAC ('.($index - 3).') channels');
 436.204 +    }
 436.205 +
 436.206 +
 436.207 +
 436.208 +    public static function VOCwFormatLookup($index) {
 436.209 +        
 436.210 +        static $lookup = array (
 436.211 +            0x0000 => '8-bit unsigned PCM',
 436.212 +            0x0001 => 'Creative 8-bit to 4-bit ADPCM',
 436.213 +            0x0002 => 'Creative 8-bit to 3-bit ADPCM',
 436.214 +            0x0003 => 'Creative 8-bit to 2-bit ADPCM',
 436.215 +            0x0004 => '16-bit signed PCM',
 436.216 +            0x0006 => 'CCITT a-Law',
 436.217 +            0x0007 => 'CCITT u-Law',
 436.218 +            0x2000 => 'Creative 16-bit to 4-bit ADPCM'
 436.219 +        );
 436.220 +        return (isset($lookup[$index]) ? $lookup[$index] : false);
 436.221 +    }
 436.222 +
 436.223 +
 436.224 +
 436.225 +    public static function VOCwFormatActualBitsPerSampleLookup($index) {
 436.226 +        
 436.227 +        static $lookup = array (
 436.228 +            0x0000 => 8,
 436.229 +            0x0001 => 4,
 436.230 +            0x0002 => 3,
 436.231 +            0x0003 => 2,
 436.232 +            0x0004 => 16,
 436.233 +            0x0006 => 8,
 436.234 +            0x0007 => 8,
 436.235 +            0x2000 => 4
 436.236 +        );
 436.237 +        return (isset($lookup[$index]) ? $lookup[$index] : false);
 436.238 +    }
 436.239 +
 436.240 +}
 436.241 +
 436.242 +
 436.243 +?>
 436.244 \ No newline at end of file
   437.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   437.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.vqf.php	Mon Feb 22 08:02:39 2010 -0500
   437.3 @@ -0,0 +1,164 @@
   437.4 +<?php
   437.5 +// +----------------------------------------------------------------------+
   437.6 +// | PHP version 5                                                        |
   437.7 +// +----------------------------------------------------------------------+
   437.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   437.9 +// +----------------------------------------------------------------------+
  437.10 +// | This source file is subject to version 2 of the GPL license,         |
  437.11 +// | that is bundled with this package in the file license.txt and is     |
  437.12 +// | available through the world-wide-web at the following url:           |
  437.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  437.14 +// +----------------------------------------------------------------------+
  437.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  437.16 +// +----------------------------------------------------------------------+
  437.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  437.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  437.19 +// +----------------------------------------------------------------------+
  437.20 +// | module.audio.vqf.php                                                 |
  437.21 +// | Module for analyzing VQF Audio files                                 |
  437.22 +// | dependencies: NONE                                                   |
  437.23 +// +----------------------------------------------------------------------+
  437.24 +//
  437.25 +// $Id: module.audio.vqf.php,v 1.3 2006/11/16 23:16:31 ah Exp $
  437.26 +
  437.27 +        
  437.28 +        
  437.29 +class getid3_vqf extends getid3_handler
  437.30 +{
  437.31 +
  437.32 +    public function Analyze() {
  437.33 +        
  437.34 +        $getid3 = $this->getid3;    
  437.35 +
  437.36 +        // based loosely on code from TTwinVQ by Jurgen Faul <jfaulØgmx*de>
  437.37 +        // http://jfaul.de/atl  or  http://j-faul.virtualave.net/atl/atl.html
  437.38 +
  437.39 +        $getid3->info['fileformat']            = 'vqf';
  437.40 +        $getid3->info['audio']['dataformat']   = 'vqf';
  437.41 +        $getid3->info['audio']['bitrate_mode'] = 'cbr';
  437.42 +        $getid3->info['audio']['lossless']     = false;
  437.43 +
  437.44 +        // Shortcuts
  437.45 +        $getid3->info['vqf']['raw'] = array ();
  437.46 +        $info_vqf      = &$getid3->info['vqf'];
  437.47 +        $info_vqf_raw  = &$info_vqf['raw'];
  437.48 +
  437.49 +        // Get header
  437.50 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  437.51 +        $vqf_header_data = fread($getid3->fp, 16);
  437.52 +
  437.53 +        $info_vqf_raw['header_tag'] = 'TWIN';   // Magic bytes
  437.54 +        $info_vqf_raw['version']    = substr($vqf_header_data, 4, 8);
  437.55 +        $info_vqf_raw['size']       = getid3_lib::BigEndian2Int(substr($vqf_header_data, 12, 4));
  437.56 +        
  437.57 +        while (ftell($getid3->fp) < $getid3->info['avdataend']) {
  437.58 +
  437.59 +            $chunk_base_offset = ftell($getid3->fp);
  437.60 +            $chunk_data        = fread($getid3->fp, 8);
  437.61 +            $chunk_name        = substr($chunk_data, 0, 4);
  437.62 +            
  437.63 +            if ($chunk_name == 'DATA') {
  437.64 +                $getid3->info['avdataoffset'] = $chunk_base_offset;
  437.65 +                break;
  437.66 +            }
  437.67 +            
  437.68 +            $chunk_size = getid3_lib::BigEndian2Int(substr($chunk_data, 4, 4));
  437.69 +            if ($chunk_size > ($getid3->info['avdataend'] - ftell($getid3->fp))) {
  437.70 +                throw new getid3_exception('Invalid chunk size ('.$chunk_size.') for chunk "'.$chunk_name.'" at offset 8.');
  437.71 +            }
  437.72 +            if ($chunk_size > 0) {
  437.73 +                $chunk_data .= fread($getid3->fp, $chunk_size);
  437.74 +            }
  437.75 +
  437.76 +            switch ($chunk_name) {
  437.77 +                
  437.78 +                case 'COMM':
  437.79 +                    $info_vqf['COMM'] = array ();
  437.80 +                    getid3_lib::ReadSequence('BigEndian2Int', $info_vqf['COMM'], $chunk_data, 8, 
  437.81 +                        array (
  437.82 +                            'channel_mode'   => 4,
  437.83 +                            'bitrate'        => 4,
  437.84 +                            'sample_rate'    => 4,
  437.85 +                            'security_level' => 4
  437.86 +                        )
  437.87 +                    );
  437.88 +
  437.89 +                    $getid3->info['audio']['channels']        = $info_vqf['COMM']['channel_mode'] + 1;
  437.90 +                    $getid3->info['audio']['sample_rate']     = getid3_vqf::VQFchannelFrequencyLookup($info_vqf['COMM']['sample_rate']);
  437.91 +                    $getid3->info['audio']['bitrate']         = $info_vqf['COMM']['bitrate'] * 1000;
  437.92 +                    $getid3->info['audio']['encoder_options'] = 'CBR' . ceil($getid3->info['audio']['bitrate']/1000);
  437.93 +
  437.94 +                    if ($getid3->info['audio']['bitrate'] == 0) {
  437.95 +                        throw new getid3_exception('Corrupt VQF file: bitrate_audio == zero');
  437.96 +                    }
  437.97 +                    break;
  437.98 +
  437.99 +                case 'NAME':
 437.100 +                case 'AUTH':
 437.101 +                case '(c) ':
 437.102 +                case 'FILE':
 437.103 +                case 'COMT':
 437.104 +                case 'ALBM':
 437.105 +                    $info_vqf['comments'][getid3_vqf::VQFcommentNiceNameLookup($chunk_name)][] = trim(substr($chunk_data, 8));
 437.106 +                    break;
 437.107 +
 437.108 +                case 'DSIZ':
 437.109 +                    $info_vqf['DSIZ'] = getid3_lib::BigEndian2Int(substr($chunk_data, 8, 4));
 437.110 +                    break;
 437.111 +
 437.112 +                default:
 437.113 +                    $getid3->warning('Unhandled chunk type "'.$chunk_name.'" at offset 8');
 437.114 +                    break;
 437.115 +            }
 437.116 +        }
 437.117 +
 437.118 +        $getid3->info['playtime_seconds'] = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['audio']['bitrate'];
 437.119 +
 437.120 +        if (isset($info_vqf['DSIZ']) && (($info_vqf['DSIZ'] != ($getid3->info['avdataend'] - $getid3->info['avdataoffset'] - strlen('DATA'))))) {
 437.121 +            switch ($info_vqf['DSIZ']) {
 437.122 +                case 0:
 437.123 +                case 1:
 437.124 +                    $getid3->warning('Invalid DSIZ value "'.$info_vqf['DSIZ'].'". This is known to happen with VQF files encoded by Ahead Nero, and seems to be its way of saying this is TwinVQF v'.($info_vqf['DSIZ'] + 1).'.0');
 437.125 +                    $getid3->info['audio']['encoder'] = 'Ahead Nero';
 437.126 +                    break;
 437.127 +
 437.128 +                default:
 437.129 +                    $getid3->warning('Probable corrupted file - should be '.$info_vqf['DSIZ'].' bytes, actually '.($getid3->info['avdataend'] - $getid3->info['avdataoffset'] - strlen('DATA')));
 437.130 +                    break;
 437.131 +            }
 437.132 +        }
 437.133 +
 437.134 +        return true;
 437.135 +    }
 437.136 +    
 437.137 +
 437.138 +
 437.139 +    public static function VQFchannelFrequencyLookup($frequencyid) {
 437.140 +        
 437.141 +        static $lookup = array (
 437.142 +            11 => 11025,
 437.143 +            22 => 22050,
 437.144 +            44 => 44100
 437.145 +        );
 437.146 +        return (isset($lookup[$frequencyid]) ? $lookup[$frequencyid] : $frequencyid * 1000);
 437.147 +    }
 437.148 +
 437.149 +
 437.150 +
 437.151 +    public static function VQFcommentNiceNameLookup($shortname) {
 437.152 +        
 437.153 +        static $lookup = array (
 437.154 +            'NAME' => 'title',
 437.155 +            'AUTH' => 'artist',
 437.156 +            '(c) ' => 'copyright',
 437.157 +            'FILE' => 'filename',
 437.158 +            'COMT' => 'comment',
 437.159 +            'ALBM' => 'album'
 437.160 +        );
 437.161 +        return (isset($lookup[$shortname]) ? $lookup[$shortname] : $shortname);
 437.162 +    }
 437.163 +
 437.164 +}
 437.165 +
 437.166 +
 437.167 +?>
 437.168 \ No newline at end of file
   438.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   438.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.wavpack.php	Mon Feb 22 08:02:39 2010 -0500
   438.3 @@ -0,0 +1,399 @@
   438.4 +<?php
   438.5 +// +----------------------------------------------------------------------+
   438.6 +// | PHP version 5                                                        |
   438.7 +// +----------------------------------------------------------------------+
   438.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   438.9 +// +----------------------------------------------------------------------+
  438.10 +// | This source file is subject to version 2 of the GPL license,         |
  438.11 +// | that is bundled with this package in the file license.txt and is     |
  438.12 +// | available through the world-wide-web at the following url:           |
  438.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  438.14 +// +----------------------------------------------------------------------+
  438.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  438.16 +// +----------------------------------------------------------------------+
  438.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  438.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  438.19 +// +----------------------------------------------------------------------+
  438.20 +// | module.audio.wavpack.php                                             |
  438.21 +// | module for analyzing WavPack v4.0+ Audio files                       |
  438.22 +// | dependencies: audio-video.riff                                       |
  438.23 +// +----------------------------------------------------------------------+
  438.24 +//
  438.25 +// $Id: module.audio.wavpack.php,v 1.2 2006/11/02 10:48:02 ah Exp $
  438.26 +
  438.27 +
  438.28 +class getid3_wavpack extends getid3_handler
  438.29 +{
  438.30 +
  438.31 +    public function Analyze() {
  438.32 +
  438.33 +        $getid3 = $this->getid3;
  438.34 +        
  438.35 +        $getid3->include_module('audio-video.riff');
  438.36 +        
  438.37 +        $getid3->info['wavpack'] = array ();
  438.38 +        $info_wavpack = &$getid3->info['wavpack'];
  438.39 +        
  438.40 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  438.41 +
  438.42 +        while (true) {
  438.43 +
  438.44 +            $wavpack_header = fread($getid3->fp, 32);
  438.45 +
  438.46 +            if (ftell($getid3->fp) >= $getid3->info['avdataend']) {
  438.47 +                break;
  438.48 +            } elseif (feof($getid3->fp)) {
  438.49 +                break;
  438.50 +            } elseif (
  438.51 +                (@$info_wavpack_blockheader['total_samples'] > 0) &&
  438.52 +                (@$info_wavpack_blockheader['block_samples'] > 0) &&
  438.53 +                (!isset($info_wavpack['riff_trailer_size']) || ($info_wavpack['riff_trailer_size'] <= 0)) &&
  438.54 +                ((@$info_wavpack['config_flags']['md5_checksum'] === false) || !empty($getid3->info['md5_data_source']))) {
  438.55 +                    break;
  438.56 +            }
  438.57 +
  438.58 +            $block_header_offset = ftell($getid3->fp) - 32;
  438.59 +            $block_header_magic  =                              substr($wavpack_header, 0, 4);
  438.60 +            $block_header_size   = getid3_lib::LittleEndian2Int(substr($wavpack_header, 4, 4));
  438.61 +
  438.62 +            if ($block_header_magic != 'wvpk') {
  438.63 +                throw new getid3_exception('Expecting "wvpk" at offset '.$block_header_offset.', found "'.$block_header_magic.'"');
  438.64 +            }
  438.65 +
  438.66 +            if ((@$info_wavpack_blockheader['block_samples'] <= 0)  ||  (@$info_wavpack_blockheader['total_samples'] <= 0)) {
  438.67 +                
  438.68 +                // Also, it is possible that the first block might not have
  438.69 +                // any samples (block_samples == 0) and in this case you should skip blocks
  438.70 +                // until you find one with samples because the other information (like
  438.71 +                // total_samples) are not guaranteed to be correct until (block_samples > 0)
  438.72 +
  438.73 +                // Finally, I have defined a format for files in which the length is not known
  438.74 +                // (for example when raw files are created using pipes). In these cases
  438.75 +                // total_samples will be -1 and you must seek to the final block to determine
  438.76 +                // the total number of samples.
  438.77 +
  438.78 +
  438.79 +                $getid3->info['audio']['dataformat']   = 'wavpack';
  438.80 +                $getid3->info['fileformat']            = 'wavpack';
  438.81 +                $getid3->info['audio']['lossless']     = true;
  438.82 +                $getid3->info['audio']['bitrate_mode'] = 'vbr';
  438.83 +
  438.84 +                $info_wavpack['blockheader']['offset'] = $block_header_offset;
  438.85 +                $info_wavpack['blockheader']['magic']  = $block_header_magic;
  438.86 +                $info_wavpack['blockheader']['size']   = $block_header_size;
  438.87 +                $info_wavpack_blockheader = &$info_wavpack['blockheader'];
  438.88 +
  438.89 +                if ($info_wavpack_blockheader['size'] >= 0x100000) {
  438.90 +                    throw new getid3_exception('Expecting WavPack block size less than "0x100000", found "'.$info_wavpack_blockheader['size'].'" at offset '.$info_wavpack_blockheader['offset']);
  438.91 +                }
  438.92 +
  438.93 +                $info_wavpack_blockheader['minor_version'] = ord($wavpack_header{8});
  438.94 +                $info_wavpack_blockheader['major_version'] = ord($wavpack_header{9});
  438.95 +
  438.96 +                if (($info_wavpack_blockheader['major_version'] != 4) ||
  438.97 +                    (($info_wavpack_blockheader['minor_version'] < 4) &&
  438.98 +                    ($info_wavpack_blockheader['minor_version'] > 16))) {
  438.99 +                    throw new getid3_exception('Expecting WavPack version between "4.2" and "4.16", found version "'.$info_wavpack_blockheader['major_version'].'.'.$info_wavpack_blockheader['minor_version'].'" at offset '.$info_wavpack_blockheader['offset']);
 438.100 +                }
 438.101 +
 438.102 +                $info_wavpack_blockheader['track_number']  = ord($wavpack_header{10}); // unused
 438.103 +                $info_wavpack_blockheader['index_number']  = ord($wavpack_header{11}); // unused
 438.104 +                
 438.105 +                getid3_lib::ReadSequence('LittleEndian2Int', $info_wavpack_blockheader, $wavpack_header, 12,
 438.106 +                    array (
 438.107 +                        'total_samples' => 4,
 438.108 +                        'block_index'   => 4,
 438.109 +                        'block_samples' => 4,
 438.110 +                        'flags_raw'     => 4,
 438.111 +                        'crc'           => 4
 438.112 +                    )
 438.113 +                );
 438.114 +                
 438.115 +                
 438.116 +                $info_wavpack_blockheader['flags']['bytes_per_sample']     =    1 + ($info_wavpack_blockheader['flags_raw'] & 0x00000003);
 438.117 +                $info_wavpack_blockheader['flags']['mono']                 = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000004);
 438.118 +                $info_wavpack_blockheader['flags']['hybrid']               = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000008);
 438.119 +                $info_wavpack_blockheader['flags']['joint_stereo']         = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000010);
 438.120 +                $info_wavpack_blockheader['flags']['cross_decorrelation']  = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000020);
 438.121 +                $info_wavpack_blockheader['flags']['hybrid_noiseshape']    = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000040);
 438.122 +                $info_wavpack_blockheader['flags']['ieee_32bit_float']     = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000080);
 438.123 +                $info_wavpack_blockheader['flags']['int_32bit']            = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000100);
 438.124 +                $info_wavpack_blockheader['flags']['hybrid_bitrate_noise'] = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000200);
 438.125 +                $info_wavpack_blockheader['flags']['hybrid_balance_noise'] = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000400);
 438.126 +                $info_wavpack_blockheader['flags']['multichannel_initial'] = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00000800);
 438.127 +                $info_wavpack_blockheader['flags']['multichannel_final']   = (bool) ($info_wavpack_blockheader['flags_raw'] & 0x00001000);
 438.128 +
 438.129 +                $getid3->info['audio']['lossless'] = !$info_wavpack_blockheader['flags']['hybrid'];
 438.130 +            }
 438.131 +
 438.132 +
 438.133 +            while (!feof($getid3->fp) && (ftell($getid3->fp) < ($block_header_offset + $block_header_size + 8))) {
 438.134 +
 438.135 +                $metablock = array('offset'=>ftell($getid3->fp));
 438.136 +                $metablockheader = fread($getid3->fp, 2);
 438.137 +                if (feof($getid3->fp)) {
 438.138 +                    break;
 438.139 +                }
 438.140 +                $metablock['id'] = ord($metablockheader{0});
 438.141 +                $metablock['function_id'] = ($metablock['id'] & 0x3F);
 438.142 +                $metablock['function_name'] = $this->WavPackMetablockNameLookup($metablock['function_id']);
 438.143 +
 438.144 +                // The 0x20 bit in the id of the meta subblocks (which is defined as
 438.145 +                // ID_OPTIONAL_DATA) is a permanent part of the id. The idea is that
 438.146 +                // if a decoder encounters an id that it does not know about, it uses
 438.147 +                // that "ID_OPTIONAL_DATA" flag to determine what to do. If it is set
 438.148 +                // then the decoder simply ignores the metadata, but if it is zero
 438.149 +                // then the decoder should quit because it means that an understanding
 438.150 +                // of the metadata is required to correctly decode the audio.
 438.151 +                
 438.152 +                $metablock['non_decoder'] = (bool) ($metablock['id'] & 0x20);
 438.153 +                $metablock['padded_data'] = (bool) ($metablock['id'] & 0x40);
 438.154 +                $metablock['large_block'] = (bool) ($metablock['id'] & 0x80);
 438.155 +                if ($metablock['large_block']) {
 438.156 +                    $metablockheader .= fread($getid3->fp, 2);
 438.157 +                }
 438.158 +                $metablock['size'] = getid3_lib::LittleEndian2Int(substr($metablockheader, 1)) * 2; // size is stored in words
 438.159 +                $metablock['data'] = null;
 438.160 +
 438.161 +                if ($metablock['size'] > 0) {
 438.162 +
 438.163 +                    switch ($metablock['function_id']) {
 438.164 +
 438.165 +                        case 0x21: // ID_RIFF_HEADER
 438.166 +                        case 0x22: // ID_RIFF_TRAILER
 438.167 +                        case 0x23: // ID_REPLAY_GAIN
 438.168 +                        case 0x24: // ID_CUESHEET
 438.169 +                        case 0x25: // ID_CONFIG_BLOCK
 438.170 +                        case 0x26: // ID_MD5_CHECKSUM
 438.171 +                            $metablock['data'] = fread($getid3->fp, $metablock['size']);
 438.172 +
 438.173 +                            if ($metablock['padded_data']) {
 438.174 +                                // padded to the nearest even byte
 438.175 +                                $metablock['size']--;
 438.176 +                                $metablock['data'] = substr($metablock['data'], 0, -1);
 438.177 +                            }
 438.178 +                            break;
 438.179 +
 438.180 +
 438.181 +                        case 0x00: // ID_DUMMY
 438.182 +                        case 0x01: // ID_ENCODER_INFO
 438.183 +                        case 0x02: // ID_DECORR_TERMS
 438.184 +                        case 0x03: // ID_DECORR_WEIGHTS
 438.185 +                        case 0x04: // ID_DECORR_SAMPLES
 438.186 +                        case 0x05: // ID_ENTROPY_VARS
 438.187 +                        case 0x06: // ID_HYBRID_PROFILE
 438.188 +                        case 0x07: // ID_SHAPING_WEIGHTS
 438.189 +                        case 0x08: // ID_FLOAT_INFO
 438.190 +                        case 0x09: // ID_INT32_INFO
 438.191 +                        case 0x0A: // ID_WV_BITSTREAM
 438.192 +                        case 0x0B: // ID_WVC_BITSTREAM
 438.193 +                        case 0x0C: // ID_WVX_BITSTREAM
 438.194 +                        case 0x0D: // ID_CHANNEL_INFO
 438.195 +                            fseek($getid3->fp, $metablock['offset'] + ($metablock['large_block'] ? 4 : 2) + $metablock['size'], SEEK_SET);
 438.196 +                            break;
 438.197 +
 438.198 +
 438.199 +                        default:
 438.200 +                            $getid3->warning('Unexpected metablock type "0x'.str_pad(dechex($metablock['function_id']), 2, '0', STR_PAD_LEFT).'" at offset '.$metablock['offset']);
 438.201 +                            fseek($getid3->fp, $metablock['offset'] + ($metablock['large_block'] ? 4 : 2) + $metablock['size'], SEEK_SET);
 438.202 +                            break;
 438.203 +                    }
 438.204 +
 438.205 +
 438.206 +                    switch ($metablock['function_id']) {
 438.207 +
 438.208 +                        case 0x21: // ID_RIFF_HEADER
 438.209 +                            
 438.210 +                            $original_wav_filesize = getid3_lib::LittleEndian2Int(substr($metablock['data'], 4, 4));
 438.211 +                            
 438.212 +                            // Clone getid3 
 438.213 +                            $clone = clone $getid3;
 438.214 +                            
 438.215 +                            // Analyze clone by string
 438.216 +                            $riff = new getid3_riff($clone);
 438.217 +                            $riff->AnalyzeString($metablock['data']);
 438.218 +                            
 438.219 +                            // Import from clone and destroy
 438.220 +                            $metablock['riff'] = $clone->info['riff'];
 438.221 +                            $getid3->warnings($clone->warnings());
 438.222 +                            unset($clone);
 438.223 +                            
 438.224 +                            // Save RIFF header - we may need it later for RIFF footer parsing
 438.225 +                            $this->riff_header = $metablock['data'];
 438.226 +                            
 438.227 +                            $metablock['riff']['original_filesize'] = $original_wav_filesize;
 438.228 +                            $info_wavpack['riff_trailer_size'] = $original_wav_filesize - $metablock['riff']['WAVE']['data'][0]['size'] - $metablock['riff']['header_size'];
 438.229 +
 438.230 +                            $getid3->info['audio']['sample_rate'] = $metablock['riff']['raw']['fmt ']['nSamplesPerSec'];
 438.231 +                            $getid3->info['playtime_seconds']     = $info_wavpack_blockheader['total_samples'] / $getid3->info['audio']['sample_rate'];
 438.232 +
 438.233 +                            // Safe RIFF header in case there's a RIFF footer later
 438.234 +                            $metablock_riff_header = $metablock['data'];
 438.235 +                            break;
 438.236 +
 438.237 +
 438.238 +                        case 0x22: // ID_RIFF_TRAILER
 438.239 +
 438.240 +                            $metablock_riff_footer = $metablock_riff_header.$metablock['data'];
 438.241 +                            
 438.242 +                            $start_offset = $metablock['offset'] + ($metablock['large_block'] ? 4 : 2);
 438.243 +                            
 438.244 +                            $ftell_old = ftell($getid3->fp);
 438.245 +                            
 438.246 +                            // Clone getid3 
 438.247 +                            $clone = clone $getid3;
 438.248 +                            
 438.249 +                            // Call public method that really should be private
 438.250 +                            $riff = new getid3_riff($clone);
 438.251 +                            $metablock['riff'] = $riff->ParseRIFF($start_offset, $start_offset + $metablock['size']);
 438.252 +                            unset($clone);
 438.253 +                            
 438.254 +                            fseek($getid3->fp, $ftell_old, SEEK_SET);
 438.255 +
 438.256 +                            if (!empty($metablock['riff']['INFO'])) {
 438.257 +                                getid3_riff::RIFFCommentsParse($metablock['riff']['INFO'], $metablock['comments']);
 438.258 +                                $getid3->info['tags']['riff'] = $metablock['comments'];
 438.259 +                            }
 438.260 +                            break;
 438.261 +
 438.262 +
 438.263 +                        case 0x23: // ID_REPLAY_GAIN
 438.264 +                            $getid3->warning('WavPack "Replay Gain" contents not yet handled by getID3() in metablock at offset '.$metablock['offset']);
 438.265 +                            break;
 438.266 +
 438.267 +
 438.268 +                        case 0x24: // ID_CUESHEET
 438.269 +                            $getid3->warning('WavPack "Cuesheet" contents not yet handled by getID3() in metablock at offset '.$metablock['offset']);
 438.270 +                            break;
 438.271 +
 438.272 +
 438.273 +                        case 0x25: // ID_CONFIG_BLOCK
 438.274 +                            $metablock['flags_raw'] = getid3_lib::LittleEndian2Int(substr($metablock['data'], 0, 3));
 438.275 +
 438.276 +                            $metablock['flags']['adobe_mode']     = (bool) ($metablock['flags_raw'] & 0x000001); // "adobe" mode for 32-bit floats
 438.277 +                            $metablock['flags']['fast_flag']      = (bool) ($metablock['flags_raw'] & 0x000002); // fast mode
 438.278 +                            $metablock['flags']['very_fast_flag'] = (bool) ($metablock['flags_raw'] & 0x000004); // double fast
 438.279 +                            $metablock['flags']['high_flag']      = (bool) ($metablock['flags_raw'] & 0x000008); // high quality mode
 438.280 +                            $metablock['flags']['very_high_flag'] = (bool) ($metablock['flags_raw'] & 0x000010); // double high (not used yet)
 438.281 +                            $metablock['flags']['bitrate_kbps']   = (bool) ($metablock['flags_raw'] & 0x000020); // bitrate is kbps, not bits / sample
 438.282 +                            $metablock['flags']['auto_shaping']   = (bool) ($metablock['flags_raw'] & 0x000040); // automatic noise shaping
 438.283 +                            $metablock['flags']['shape_override'] = (bool) ($metablock['flags_raw'] & 0x000080); // shaping mode specified
 438.284 +                            $metablock['flags']['joint_override'] = (bool) ($metablock['flags_raw'] & 0x000100); // joint-stereo mode specified
 438.285 +                            $metablock['flags']['copy_time']      = (bool) ($metablock['flags_raw'] & 0x000200); // copy file-time from source
 438.286 +                            $metablock['flags']['create_exe']     = (bool) ($metablock['flags_raw'] & 0x000400); // create executable
 438.287 +                            $metablock['flags']['create_wvc']     = (bool) ($metablock['flags_raw'] & 0x000800); // create correction file
 438.288 +                            $metablock['flags']['optimize_wvc']   = (bool) ($metablock['flags_raw'] & 0x001000); // maximize bybrid compression
 438.289 +                            $metablock['flags']['quality_mode']   = (bool) ($metablock['flags_raw'] & 0x002000); // psychoacoustic quality mode
 438.290 +                            $metablock['flags']['raw_flag']       = (bool) ($metablock['flags_raw'] & 0x004000); // raw mode (not implemented yet)
 438.291 +                            $metablock['flags']['calc_noise']     = (bool) ($metablock['flags_raw'] & 0x008000); // calc noise in hybrid mode
 438.292 +                            $metablock['flags']['lossy_mode']     = (bool) ($metablock['flags_raw'] & 0x010000); // obsolete (for information)
 438.293 +                            $metablock['flags']['extra_mode']     = (bool) ($metablock['flags_raw'] & 0x020000); // extra processing mode
 438.294 +                            $metablock['flags']['skip_wvx']       = (bool) ($metablock['flags_raw'] & 0x040000); // no wvx stream w/ floats & big ints
 438.295 +                            $metablock['flags']['md5_checksum']   = (bool) ($metablock['flags_raw'] & 0x080000); // compute & store MD5 signature
 438.296 +                            $metablock['flags']['quiet_mode']     = (bool) ($metablock['flags_raw'] & 0x100000); // don't report progress %
 438.297 +
 438.298 +                            $info_wavpack['config_flags'] = $metablock['flags'];
 438.299 +
 438.300 +                            $getid3->info['audio']['encoder_options'] = trim(
 438.301 +                                ($info_wavpack_blockheader['flags']['hybrid'] ? ' -b???' : '') .
 438.302 +                                ($metablock['flags']['adobe_mode']            ? ' -a'    : '') .
 438.303 +                                ($metablock['flags']['optimize_wvc']          ? ' -cc'   : '') .
 438.304 +                                ($metablock['flags']['create_exe']            ? ' -e'    : '') .
 438.305 +                                ($metablock['flags']['fast_flag']             ? ' -f'    : '') .
 438.306 +                                ($metablock['flags']['joint_override']        ? ' -j?'   : '') .
 438.307 +                                ($metablock['flags']['high_flag']             ? ' -h'    : '') .
 438.308 +                                ($metablock['flags']['md5_checksum']          ? ' -m'    : '') .
 438.309 +                                ($metablock['flags']['calc_noise']            ? ' -n'    : '') .
 438.310 +                                ($metablock['flags']['shape_override']        ? ' -s?'   : '') .
 438.311 +                                ($metablock['flags']['extra_mode']            ? ' -x?'   : '')
 438.312 +                            );
 438.313 +                            if (!$getid3->info['audio']['encoder_options']) {
 438.314 +                                unset($getid3->info['audio']['encoder_options']);
 438.315 +                            }
 438.316 +                            break;
 438.317 +
 438.318 +
 438.319 +                        case 0x26: // ID_MD5_CHECKSUM
 438.320 +                            if (strlen($metablock['data']) == 16) {
 438.321 +                                $getid3->info['md5_data_source'] = strtolower(getid3_lib::PrintHexBytes($metablock['data'], true, false, false));
 438.322 +                            } else {
 438.323 +                                $getid3->warning('Expecting 16 bytes of WavPack "MD5 Checksum" in metablock at offset '.$metablock['offset'].', but found '.strlen($metablock['data']).' bytes');
 438.324 +                            }
 438.325 +                            break;
 438.326 +
 438.327 +
 438.328 +                        case 0x00: // ID_DUMMY
 438.329 +                        case 0x01: // ID_ENCODER_INFO
 438.330 +                        case 0x02: // ID_DECORR_TERMS
 438.331 +                        case 0x03: // ID_DECORR_WEIGHTS
 438.332 +                        case 0x04: // ID_DECORR_SAMPLES
 438.333 +                        case 0x05: // ID_ENTROPY_VARS
 438.334 +                        case 0x06: // ID_HYBRID_PROFILE
 438.335 +                        case 0x07: // ID_SHAPING_WEIGHTS
 438.336 +                        case 0x08: // ID_FLOAT_INFO
 438.337 +                        case 0x09: // ID_INT32_INFO
 438.338 +                        case 0x0A: // ID_WV_BITSTREAM
 438.339 +                        case 0x0B: // ID_WVC_BITSTREAM
 438.340 +                        case 0x0C: // ID_WVX_BITSTREAM
 438.341 +                        case 0x0D: // ID_CHANNEL_INFO
 438.342 +                            unset($metablock);
 438.343 +                            break;
 438.344 +                    }
 438.345 +
 438.346 +                }
 438.347 +            
 438.348 +                if (!empty($metablock)) {
 438.349 +                    $info_wavpack['metablocks'][] = $metablock;
 438.350 +                }
 438.351 +
 438.352 +            }
 438.353 +
 438.354 +        }
 438.355 +
 438.356 +        $getid3->info['audio']['encoder']         = 'WavPack v'.$info_wavpack_blockheader['major_version'].'.'.str_pad($info_wavpack_blockheader['minor_version'], 2, '0', STR_PAD_LEFT);
 438.357 +        $getid3->info['audio']['bits_per_sample'] = $info_wavpack_blockheader['flags']['bytes_per_sample'] * 8;
 438.358 +        $getid3->info['audio']['channels']        = ($info_wavpack_blockheader['flags']['mono'] ? 1 : 2);
 438.359 +
 438.360 +        if (@$getid3->info['playtime_seconds']) {
 438.361 +            $getid3->info['audio']['bitrate']     = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 438.362 +        } else {
 438.363 +            $getid3->info['audio']['dataformat']  = 'wvc';
 438.364 +        }
 438.365 +
 438.366 +        return true;
 438.367 +    }
 438.368 +
 438.369 +
 438.370 +
 438.371 +    public static function WavPackMetablockNameLookup($id) {
 438.372 +
 438.373 +        static $lookup = array(
 438.374 +            0x00 => 'Dummy',
 438.375 +            0x01 => 'Encoder Info',
 438.376 +            0x02 => 'Decorrelation Terms',
 438.377 +            0x03 => 'Decorrelation Weights',
 438.378 +            0x04 => 'Decorrelation Samples',
 438.379 +            0x05 => 'Entropy Variables',
 438.380 +            0x06 => 'Hybrid Profile',
 438.381 +            0x07 => 'Shaping Weights',
 438.382 +            0x08 => 'Float Info',
 438.383 +            0x09 => 'Int32 Info',
 438.384 +            0x0A => 'WV Bitstream',
 438.385 +            0x0B => 'WVC Bitstream',
 438.386 +            0x0C => 'WVX Bitstream',
 438.387 +            0x0D => 'Channel Info',
 438.388 +            0x21 => 'RIFF header',
 438.389 +            0x22 => 'RIFF trailer',
 438.390 +            0x23 => 'Replay Gain',
 438.391 +            0x24 => 'Cuesheet',
 438.392 +            0x25 => 'Config Block',
 438.393 +            0x26 => 'MD5 Checksum',
 438.394 +        );
 438.395 +        
 438.396 +        return (@$lookup[$id]);
 438.397 +    }
 438.398 +
 438.399 +}
 438.400 +
 438.401 +
 438.402 +?>
 438.403 \ No newline at end of file
   439.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   439.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.audio.xiph.php	Mon Feb 22 08:02:39 2010 -0500
   439.3 @@ -0,0 +1,952 @@
   439.4 +<?php
   439.5 +// +----------------------------------------------------------------------+
   439.6 +// | PHP version 5                                                        |
   439.7 +// +----------------------------------------------------------------------+
   439.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   439.9 +// +----------------------------------------------------------------------+
  439.10 +// | This source file is subject to version 2 of the GPL license,         |
  439.11 +// | that is bundled with this package in the file license.txt and is     |
  439.12 +// | available through the world-wide-web at the following url:           |
  439.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  439.14 +// +----------------------------------------------------------------------+
  439.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  439.16 +// +----------------------------------------------------------------------+
  439.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  439.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  439.19 +// +----------------------------------------------------------------------+
  439.20 +// | module.audio.xiph.php                                                |
  439.21 +// | Module for analyzing Xiph.org audio file formats:                    |
  439.22 +// | Ogg Vorbis, FLAC, OggFLAC and Speex - not Ogg Theora                 |
  439.23 +// | dependencies: module.lib.image_size.php (optional)                   |
  439.24 +// +----------------------------------------------------------------------+
  439.25 +//
  439.26 +// $Id: module.audio.xiph.php,v 1.5 2006/12/03 21:12:43 ah Exp $
  439.27 +
  439.28 +        
  439.29 +        
  439.30 +class getid3_xiph extends getid3_handler
  439.31 +{
  439.32 +    
  439.33 +    public function Analyze() {
  439.34 +        
  439.35 +        $getid3 = $this->getid3;
  439.36 +        
  439.37 +        if ($getid3->option_tags_images) {        
  439.38 +            $getid3->include_module('lib.image_size');
  439.39 +        }
  439.40 +        
  439.41 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  439.42 +        
  439.43 +        $magic = fread($getid3->fp, 4);
  439.44 +        
  439.45 +        if ($magic == 'OggS') {
  439.46 +            return $this->ParseOgg();
  439.47 +        }
  439.48 +        
  439.49 +        if ($magic == 'fLaC') {
  439.50 +            return $this->ParseFLAC();
  439.51 +        }
  439.52 +        
  439.53 +    }
  439.54 +    
  439.55 +    
  439.56 +    
  439.57 +    private function ParseOgg() {
  439.58 +        
  439.59 +        $getid3 = $this->getid3;
  439.60 +        
  439.61 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  439.62 +        
  439.63 +        $getid3->info['audio'] = $getid3->info['ogg'] = array ();
  439.64 +        $info_ogg   = &$getid3->info['ogg'];				
  439.65 +        $info_audio = &$getid3->info['audio'];
  439.66 +        
  439.67 +        $getid3->info['fileformat'] = 'ogg';
  439.68 +
  439.69 +
  439.70 +        //// Page 1 - Stream Header
  439.71 +
  439.72 +        $ogg_page_info = $this->ParseOggPageHeader();
  439.73 +        $info_ogg['pageheader'][$ogg_page_info['page_seqno']] = $ogg_page_info;
  439.74 +
  439.75 +        if (ftell($getid3->fp) >= getid3::FREAD_BUFFER_SIZE) {
  439.76 +            throw new getid3_exception('Could not find start of Ogg page in the first '.getid3::FREAD_BUFFER_SIZE.' bytes (this might not be an Ogg file?)');
  439.77 +        }
  439.78 +
  439.79 +        $file_data = fread($getid3->fp, $ogg_page_info['page_length']);
  439.80 +        $file_data_offset = 0;
  439.81 +
  439.82 +
  439.83 +        // OggFLAC
  439.84 +        if (substr($file_data, 0, 4) == 'fLaC') {
  439.85 +
  439.86 +            $info_audio['dataformat']   = 'flac';
  439.87 +            $info_audio['bitrate_mode'] = 'vbr';
  439.88 +            $info_audio['lossless']     = true;
  439.89 +
  439.90 +        } 
  439.91 +    
  439.92 +    
  439.93 +        // Ogg Vorbis
  439.94 +        elseif (substr($file_data, 1, 6) == 'vorbis') {
  439.95 +
  439.96 +            $info_audio['dataformat'] = 'vorbis';
  439.97 +            $info_audio['lossless']   = false;
  439.98 +
  439.99 +            $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int($file_data[0]);
 439.100 +            $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['stream_type'] = substr($file_data, 1, 6); // hard-coded to 'vorbis'
 439.101 +            
 439.102 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_ogg, $file_data, 7, 
 439.103 +                array (
 439.104 +                    'bitstreamversion' => 4,
 439.105 +                    'numberofchannels' => 1,
 439.106 +                    'samplerate'       => 4,
 439.107 +                    'bitrate_max'      => 4,
 439.108 +                    'bitrate_nominal'  => 4,
 439.109 +                    'bitrate_min'      => 4
 439.110 +                )
 439.111 +            );
 439.112 +                                                                                                                     
 439.113 +            $n28 = getid3_lib::LittleEndian2Int($file_data{28});
 439.114 +            $info_ogg['blocksize_small']  = pow(2, $n28 & 0x0F);
 439.115 +            $info_ogg['blocksize_large']  = pow(2, ($n28 & 0xF0) >> 4);
 439.116 +            $info_ogg['stop_bit']         = $n28;
 439.117 +            
 439.118 +            $info_audio['channels']       = $info_ogg['numberofchannels'];
 439.119 +            $info_audio['sample_rate']    = $info_ogg['samplerate'];
 439.120 +
 439.121 +            $info_audio['bitrate_mode'] = 'vbr';     // overridden if actually abr
 439.122 +
 439.123 +            if ($info_ogg['bitrate_max'] == 0xFFFFFFFF) {
 439.124 +                unset($info_ogg['bitrate_max']);
 439.125 +                $info_audio['bitrate_mode'] = 'abr';
 439.126 +            }
 439.127 +            
 439.128 +            if ($info_ogg['bitrate_nominal'] == 0xFFFFFFFF) {
 439.129 +                unset($info_ogg['bitrate_nominal']);
 439.130 +            }
 439.131 +            
 439.132 +            if ($info_ogg['bitrate_min'] == 0xFFFFFFFF) {
 439.133 +                unset($info_ogg['bitrate_min']);
 439.134 +                $info_audio['bitrate_mode'] = 'abr';
 439.135 +            }
 439.136 +        }
 439.137 +    
 439.138 +
 439.139 +        // Speex
 439.140 +        elseif (substr($file_data, 0, 8) == 'Speex   ') {
 439.141 +
 439.142 +            // http://www.speex.org/manual/node10.html
 439.143 +
 439.144 +            $info_audio['dataformat']   = 'speex';
 439.145 +            $getid3->info['mime_type']  = 'audio/speex';
 439.146 +            $info_audio['bitrate_mode'] = 'abr';
 439.147 +            $info_audio['lossless']     = false;
 439.148 +
 439.149 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_ogg['pageheader'][$ogg_page_info['page_seqno']], $file_data, 0, 
 439.150 +                array (
 439.151 +                    'speex_string'           => -8, 		// hard-coded to 'Speex   '
 439.152 +                    'speex_version'          => -20,      	// string                  
 439.153 +                    'speex_version_id'       => 4,
 439.154 +                    'header_size'            => 4,
 439.155 +                    'rate'                   => 4,
 439.156 +                    'mode'                   => 4,
 439.157 +                    'mode_bitstream_version' => 4,
 439.158 +                    'nb_channels'            => 4,
 439.159 +                    'bitrate'                => 4,
 439.160 +                    'framesize'              => 4,
 439.161 +                    'vbr'                    => 4,
 439.162 +                    'frames_per_packet'      => 4,
 439.163 +                    'extra_headers'          => 4,
 439.164 +                    'reserved1'              => 4,
 439.165 +                    'reserved2'              => 4
 439.166 +                )
 439.167 +            );
 439.168 +                
 439.169 +            $getid3->info['speex']['speex_version'] = trim($info_ogg['pageheader'][$ogg_page_info['page_seqno']]['speex_version']);
 439.170 +            $getid3->info['speex']['sample_rate']   = $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['rate'];
 439.171 +            $getid3->info['speex']['channels']      = $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['nb_channels'];
 439.172 +            $getid3->info['speex']['vbr']           = (bool)$info_ogg['pageheader'][$ogg_page_info['page_seqno']]['vbr'];
 439.173 +            $getid3->info['speex']['band_type']     = getid3_xiph::SpeexBandModeLookup($info_ogg['pageheader'][$ogg_page_info['page_seqno']]['mode']);
 439.174 +
 439.175 +            $info_audio['sample_rate'] = $getid3->info['speex']['sample_rate'];
 439.176 +            $info_audio['channels']    = $getid3->info['speex']['channels'];
 439.177 +            
 439.178 +            if ($getid3->info['speex']['vbr']) {
 439.179 +                $info_audio['bitrate_mode'] = 'vbr';
 439.180 +            }
 439.181 +        }
 439.182 +
 439.183 +        // Unsupported Ogg file
 439.184 +        else {
 439.185 +
 439.186 +            throw new getid3_exception('Expecting either "Speex   " or "vorbis" identifier strings, found neither');
 439.187 +        }
 439.188 +
 439.189 +
 439.190 +        //// Page 2 - Comment Header
 439.191 +
 439.192 +        $ogg_page_info = $this->ParseOggPageHeader();
 439.193 +        $info_ogg['pageheader'][$ogg_page_info['page_seqno']] = $ogg_page_info;
 439.194 +
 439.195 +        switch ($info_audio['dataformat']) {
 439.196 +
 439.197 +            case 'vorbis':
 439.198 +                $file_data = fread($getid3->fp, $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['page_length']);
 439.199 +                $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($file_data, 0, 1));
 439.200 +                $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['stream_type'] = substr($file_data, 1, 6); // hard-coded to 'vorbis'
 439.201 +                $this->ParseVorbisCommentsFilepointer();
 439.202 +                break;
 439.203 +
 439.204 +            case 'flac':
 439.205 +                if (!$this->FLACparseMETAdata()) {
 439.206 +                    throw new getid3_exception('Failed to parse FLAC headers');
 439.207 +                }
 439.208 +                break;
 439.209 +
 439.210 +            case 'speex':
 439.211 +                fseek($getid3->fp, $info_ogg['pageheader'][$ogg_page_info['page_seqno']]['page_length'], SEEK_CUR);
 439.212 +                $this->ParseVorbisCommentsFilepointer();
 439.213 +                break;
 439.214 +        }
 439.215 +
 439.216 +
 439.217 +        //// Last Page - Number of Samples
 439.218 +
 439.219 +        fseek($getid3->fp, max($getid3->info['avdataend'] - getid3::FREAD_BUFFER_SIZE, 0), SEEK_SET);
 439.220 +        $last_chunk_of_ogg = strrev(fread($getid3->fp, getid3::FREAD_BUFFER_SIZE));
 439.221 +        
 439.222 +        if ($last_OggS_postion = strpos($last_chunk_of_ogg, 'SggO')) {
 439.223 +            fseek($getid3->fp, $getid3->info['avdataend'] - ($last_OggS_postion + strlen('SggO')), SEEK_SET);
 439.224 +            $getid3->info['avdataend'] = ftell($getid3->fp);
 439.225 +            $info_ogg['pageheader']['eos'] = $this->ParseOggPageHeader();
 439.226 +            $info_ogg['samples']           = $info_ogg['pageheader']['eos']['pcm_abs_position'];
 439.227 +            $info_ogg['bitrate_average']   = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / ($info_ogg['samples'] / $info_audio['sample_rate']);
 439.228 +        }
 439.229 +
 439.230 +        if (!empty($info_ogg['bitrate_average'])) {
 439.231 +            $info_audio['bitrate'] = $info_ogg['bitrate_average'];
 439.232 +        } elseif (!empty($info_ogg['bitrate_nominal'])) {
 439.233 +            $info_audio['bitrate'] = $info_ogg['bitrate_nominal'];
 439.234 +        } elseif (!empty($info_ogg['bitrate_min']) && !empty($info_ogg['bitrate_max'])) {
 439.235 +            $info_audio['bitrate'] = ($info_ogg['bitrate_min'] + $info_ogg['bitrate_max']) / 2;
 439.236 +        }
 439.237 +        if (isset($info_audio['bitrate']) && !isset($getid3->info['playtime_seconds'])) {
 439.238 +            $getid3->info['playtime_seconds'] = (float)((($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $info_audio['bitrate']);
 439.239 +        }
 439.240 +
 439.241 +        if (isset($info_ogg['vendor'])) {
 439.242 +            $info_audio['encoder'] = preg_replace('/^Encoded with /', '', $info_ogg['vendor']);
 439.243 +
 439.244 +            // Vorbis only
 439.245 +            if ($info_audio['dataformat'] == 'vorbis') {
 439.246 +
 439.247 +                // Vorbis 1.0 starts with Xiph.Org
 439.248 +                if  (preg_match('/^Xiph.Org/', $info_audio['encoder'])) {
 439.249 +
 439.250 +                    if ($info_audio['bitrate_mode'] == 'abr') {
 439.251 +
 439.252 +                        // Set -b 128 on abr files
 439.253 +                        $info_audio['encoder_options'] = '-b '.round($info_ogg['bitrate_nominal'] / 1000);
 439.254 +
 439.255 +                    } elseif (($info_audio['bitrate_mode'] == 'vbr') && ($info_audio['channels'] == 2) && ($info_audio['sample_rate'] >= 44100) && ($info_audio['sample_rate'] <= 48000)) {
 439.256 +                        // Set -q N on vbr files
 439.257 +                        $info_audio['encoder_options'] = '-q '.getid3_xiph::GetQualityFromNominalBitrate($info_ogg['bitrate_nominal']);
 439.258 +                    }
 439.259 +                }
 439.260 +
 439.261 +                if (empty($info_audio['encoder_options']) && !empty($info_ogg['bitrate_nominal'])) {
 439.262 +                    $info_audio['encoder_options'] = 'Nominal bitrate: '.intval(round($info_ogg['bitrate_nominal'] / 1000)).'kbps';
 439.263 +                }
 439.264 +            }
 439.265 +        }
 439.266 +
 439.267 +        return true;
 439.268 +    }
 439.269 +
 439.270 +
 439.271 +
 439.272 +    private function ParseOggPageHeader() {
 439.273 +        
 439.274 +        $getid3 = $this->getid3;
 439.275 +        
 439.276 +        // http://xiph.org/ogg/vorbis/doc/framing.html
 439.277 +        $ogg_header['page_start_offset'] = ftell($getid3->fp);      // where we started from in the file
 439.278 +        
 439.279 +        $file_data = fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
 439.280 +        $file_data_offset = 0;
 439.281 +        
 439.282 +        while ((substr($file_data, $file_data_offset++, 4) != 'OggS')) {
 439.283 +            if ((ftell($getid3->fp) - $ogg_header['page_start_offset']) >= getid3::FREAD_BUFFER_SIZE) {
 439.284 +                // should be found before here
 439.285 +                return false;
 439.286 +            }
 439.287 +            if ((($file_data_offset + 28) > strlen($file_data)) || (strlen($file_data) < 28)) {
 439.288 +                if (feof($getid3->fp) || (($file_data .= fread($getid3->fp, getid3::FREAD_BUFFER_SIZE)) === false)) {
 439.289 +                    // get some more data, unless eof, in which case fail
 439.290 +                    return false;
 439.291 +                }
 439.292 +            }
 439.293 +        }
 439.294 +        
 439.295 +        $file_data_offset += 3; // page, delimited by 'OggS'
 439.296 +        
 439.297 +        getid3_lib::ReadSequence('LittleEndian2Int', $ogg_header, $file_data, $file_data_offset, 
 439.298 +            array (
 439.299 +                'stream_structver' => 1,
 439.300 +                'flags_raw'        => 1,
 439.301 +                'pcm_abs_position' => 8,
 439.302 +                'stream_serialno'  => 4,
 439.303 +                'page_seqno'       => 4,
 439.304 +                'page_checksum'    => 4,
 439.305 +                'page_segments'    => 1
 439.306 +            )
 439.307 +        );
 439.308 +        
 439.309 +        $file_data_offset += 23;
 439.310 +
 439.311 +        $ogg_header['flags']['fresh'] = (bool)($ogg_header['flags_raw'] & 0x01); // fresh packet
 439.312 +        $ogg_header['flags']['bos']   = (bool)($ogg_header['flags_raw'] & 0x02); // first page of logical bitstream (bos)
 439.313 +        $ogg_header['flags']['eos']   = (bool)($ogg_header['flags_raw'] & 0x04); // last page of logical bitstream (eos)
 439.314 +
 439.315 +        $ogg_header['page_length'] = 0;
 439.316 +        for ($i = 0; $i < $ogg_header['page_segments']; $i++) {
 439.317 +            $ogg_header['segment_table'][$i] = getid3_lib::LittleEndian2Int($file_data{$file_data_offset++});
 439.318 +            $ogg_header['page_length'] += $ogg_header['segment_table'][$i];
 439.319 +        }
 439.320 +        $ogg_header['header_end_offset'] = $ogg_header['page_start_offset'] + $file_data_offset;
 439.321 +        $ogg_header['page_end_offset']   = $ogg_header['header_end_offset'] + $ogg_header['page_length'];
 439.322 +        fseek($getid3->fp, $ogg_header['header_end_offset'], SEEK_SET);
 439.323 +
 439.324 +        return $ogg_header;
 439.325 +    }
 439.326 +
 439.327 +
 439.328 +    
 439.329 +    private function ParseVorbisCommentsFilepointer() {
 439.330 +        
 439.331 +        $getid3 = $this->getid3;
 439.332 +
 439.333 +        $original_offset      = ftell($getid3->fp);
 439.334 +        $comment_start_offset = $original_offset;
 439.335 +        $comment_data_offset  = 0;
 439.336 +        $vorbis_comment_page  = 1;
 439.337 +
 439.338 +        switch ($getid3->info['audio']['dataformat']) {
 439.339 +            
 439.340 +            case 'vorbis':
 439.341 +                $comment_start_offset = $getid3->info['ogg']['pageheader'][$vorbis_comment_page]['page_start_offset'];  // Second Ogg page, after header block
 439.342 +                fseek($getid3->fp, $comment_start_offset, SEEK_SET);
 439.343 +                $comment_data_offset = 27 + $getid3->info['ogg']['pageheader'][$vorbis_comment_page]['page_segments'];
 439.344 +                $comment_data = fread($getid3->fp, getid3_xiph::OggPageSegmentLength($getid3->info['ogg']['pageheader'][$vorbis_comment_page], 1) + $comment_data_offset);
 439.345 +                $comment_data_offset += (strlen('vorbis') + 1);
 439.346 +                break;
 439.347 +                
 439.348 +
 439.349 +            case 'flac':
 439.350 +                fseek($getid3->fp, $getid3->info['flac']['VORBIS_COMMENT']['raw']['offset'] + 4, SEEK_SET);
 439.351 +                $comment_data = fread($getid3->fp, $getid3->info['flac']['VORBIS_COMMENT']['raw']['block_length']);
 439.352 +                break;
 439.353 +                
 439.354 +
 439.355 +            case 'speex':
 439.356 +                $comment_start_offset = $getid3->info['ogg']['pageheader'][$vorbis_comment_page]['page_start_offset'];  // Second Ogg page, after header block
 439.357 +                fseek($getid3->fp, $comment_start_offset, SEEK_SET);
 439.358 +                $comment_data_offset = 27 + $getid3->info['ogg']['pageheader'][$vorbis_comment_page]['page_segments'];
 439.359 +                $comment_data = fread($getid3->fp, getid3_xiph::OggPageSegmentLength($getid3->info['ogg']['pageheader'][$vorbis_comment_page], 1) + $comment_data_offset);
 439.360 +                break;
 439.361 +                
 439.362 +
 439.363 +            default:
 439.364 +                return false;
 439.365 +        }
 439.366 +
 439.367 +        $vendor_size = getid3_lib::LittleEndian2Int(substr($comment_data, $comment_data_offset, 4));
 439.368 +        $comment_data_offset += 4;
 439.369 +
 439.370 +        $getid3->info['ogg']['vendor'] = substr($comment_data, $comment_data_offset, $vendor_size);
 439.371 +        $comment_data_offset += $vendor_size;
 439.372 +
 439.373 +        $comments_count = getid3_lib::LittleEndian2Int(substr($comment_data, $comment_data_offset, 4));
 439.374 +        $comment_data_offset += 4;
 439.375 +        
 439.376 +        $getid3->info['avdataoffset'] = $comment_start_offset + $comment_data_offset;
 439.377 +
 439.378 +        for ($i = 0; $i < $comments_count; $i++) {
 439.379 +
 439.380 +            $getid3->info['ogg']['comments_raw'][$i]['dataoffset'] = $comment_start_offset + $comment_data_offset;
 439.381 +
 439.382 +            if (ftell($getid3->fp) < ($getid3->info['ogg']['comments_raw'][$i]['dataoffset'] + 4)) {
 439.383 +                $vorbis_comment_page++;
 439.384 +
 439.385 +                $ogg_page_info = $this->ParseOggPageHeader();
 439.386 +                $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']] = $ogg_page_info;
 439.387 +
 439.388 +                // First, save what we haven't read yet
 439.389 +                $as_yet_unused_data = substr($comment_data, $comment_data_offset);
 439.390 +
 439.391 +                // Then take that data off the end
 439.392 +                $comment_data = substr($comment_data, 0, $comment_data_offset);
 439.393 +
 439.394 +                // Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct
 439.395 +                $comment_data .= str_repeat("\x00", 27 + $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']]['page_segments']);
 439.396 +                $comment_data_offset += (27 + $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']]['page_segments']);
 439.397 +
 439.398 +                // Finally, stick the unused data back on the end
 439.399 +                $comment_data .= $as_yet_unused_data;
 439.400 +
 439.401 +                $comment_data .= fread($getid3->fp, getid3_xiph::OggPageSegmentLength($getid3->info['ogg']['pageheader'][$vorbis_comment_page], 1));
 439.402 +            }
 439.403 +            $getid3->info['ogg']['comments_raw'][$i]['size'] = getid3_lib::LittleEndian2Int(substr($comment_data, $comment_data_offset, 4));
 439.404 +
 439.405 +            // replace avdataoffset with position just after the last vorbiscomment
 439.406 +            $getid3->info['avdataoffset'] = $getid3->info['ogg']['comments_raw'][$i]['dataoffset'] + $getid3->info['ogg']['comments_raw'][$i]['size'] + 4;
 439.407 +
 439.408 +            $comment_data_offset += 4;
 439.409 +            while ((strlen($comment_data) - $comment_data_offset) < $getid3->info['ogg']['comments_raw'][$i]['size']) {
 439.410 +            
 439.411 +                if (($getid3->info['ogg']['comments_raw'][$i]['size'] > $getid3->info['avdataend']) || ($getid3->info['ogg']['comments_raw'][$i]['size'] < 0)) {
 439.412 +                    throw new getid3_exception('Invalid Ogg comment size (comment #'.$i.', claims to be '.number_format($getid3->info['ogg']['comments_raw'][$i]['size']).' bytes) - aborting reading comments');
 439.413 +                }
 439.414 +
 439.415 +                $vorbis_comment_page++;
 439.416 +
 439.417 +                $ogg_page_info = $this->ParseOggPageHeader();
 439.418 +                $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']] = $ogg_page_info;
 439.419 +
 439.420 +                // First, save what we haven't read yet
 439.421 +                $as_yet_unused_data = substr($comment_data, $comment_data_offset);
 439.422 +
 439.423 +                // Then take that data off the end
 439.424 +                $comment_data     = substr($comment_data, 0, $comment_data_offset);
 439.425 +
 439.426 +                // Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct
 439.427 +                $comment_data .= str_repeat("\x00", 27 + $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']]['page_segments']);
 439.428 +                $comment_data_offset += (27 + $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']]['page_segments']);
 439.429 +
 439.430 +                // Finally, stick the unused data back on the end
 439.431 +                $comment_data .= $as_yet_unused_data;
 439.432 +
 439.433 +                //$comment_data .= fread($getid3->fp, $getid3->info['ogg']['pageheader'][$ogg_page_info['page_seqno']]['page_length']);
 439.434 +                $comment_data .= fread($getid3->fp, getid3_xiph::OggPageSegmentLength($getid3->info['ogg']['pageheader'][$vorbis_comment_page], 1));
 439.435 +
 439.436 +                //$filebaseoffset += $ogg_page_info['header_end_offset'] - $ogg_page_info['page_start_offset'];
 439.437 +            }
 439.438 +            $comment_string = substr($comment_data, $comment_data_offset, $getid3->info['ogg']['comments_raw'][$i]['size']);
 439.439 +            $comment_data_offset += $getid3->info['ogg']['comments_raw'][$i]['size'];
 439.440 +
 439.441 +            if (!$comment_string) {
 439.442 +
 439.443 +                // no comment?
 439.444 +                $getid3->warning('Blank Ogg comment ['.$i.']');
 439.445 +
 439.446 +            } elseif (strstr($comment_string, '=')) {
 439.447 +
 439.448 +                $comment_exploded = explode('=', $comment_string, 2);
 439.449 +                $getid3->info['ogg']['comments_raw'][$i]['key']   = strtoupper($comment_exploded[0]);
 439.450 +                $getid3->info['ogg']['comments_raw'][$i]['value'] = @$comment_exploded[1];
 439.451 +                $getid3->info['ogg']['comments_raw'][$i]['data']  = base64_decode($getid3->info['ogg']['comments_raw'][$i]['value']);
 439.452 +
 439.453 +                $getid3->info['ogg']['comments'][strtolower($getid3->info['ogg']['comments_raw'][$i]['key'])][] = $getid3->info['ogg']['comments_raw'][$i]['value'];
 439.454 +
 439.455 +                if ($getid3->option_tags_images) {
 439.456 +                    $image_chunk_check = getid3_lib_image_size::get($getid3->info['ogg']['comments_raw'][$i]['data']);
 439.457 +                    $getid3->info['ogg']['comments_raw'][$i]['image_mime'] = image_type_to_mime_type($image_chunk_check[2]);
 439.458 +                }
 439.459 +                
 439.460 +                if (!@$getid3->info['ogg']['comments_raw'][$i]['image_mime'] || ($getid3->info['ogg']['comments_raw'][$i]['image_mime'] == 'application/octet-stream')) {
 439.461 +                    unset($getid3->info['ogg']['comments_raw'][$i]['image_mime']);
 439.462 +                    unset($getid3->info['ogg']['comments_raw'][$i]['data']);
 439.463 +                }
 439.464 +                
 439.465 +
 439.466 +            } else {
 439.467 +
 439.468 +                $getid3->warning('[known problem with CDex >= v1.40, < v1.50b7] Invalid Ogg comment name/value pair ['.$i.']: '.$comment_string);
 439.469 +            }
 439.470 +        }
 439.471 +
 439.472 +
 439.473 +        // Replay Gain Adjustment
 439.474 +        // http://privatewww.essex.ac.uk/~djmrob/replaygain/
 439.475 +        if (isset($getid3->info['ogg']['comments']) && is_array($getid3->info['ogg']['comments'])) {
 439.476 +            foreach ($getid3->info['ogg']['comments'] as $index => $commentvalue) {
 439.477 +                switch ($index) {
 439.478 +                    case 'rg_audiophile':
 439.479 +                    case 'replaygain_album_gain':
 439.480 +                        $getid3->info['replay_gain']['album']['adjustment'] = (float)$commentvalue[0];
 439.481 +                        unset($getid3->info['ogg']['comments'][$index]);
 439.482 +                        break;
 439.483 +
 439.484 +                    case 'rg_radio':
 439.485 +                    case 'replaygain_track_gain':
 439.486 +                        $getid3->info['replay_gain']['track']['adjustment'] = (float)$commentvalue[0];
 439.487 +                        unset($getid3->info['ogg']['comments'][$index]);
 439.488 +                        break;
 439.489 +
 439.490 +                    case 'replaygain_album_peak':
 439.491 +                        $getid3->info['replay_gain']['album']['peak'] = (float)$commentvalue[0];
 439.492 +                        unset($getid3->info['ogg']['comments'][$index]);
 439.493 +                        break;
 439.494 +
 439.495 +                    case 'rg_peak':
 439.496 +                    case 'replaygain_track_peak':
 439.497 +                        $getid3->info['replay_gain']['track']['peak'] = (float)$commentvalue[0];
 439.498 +                        unset($getid3->info['ogg']['comments'][$index]);
 439.499 +                        break;
 439.500 +                        
 439.501 +                    case 'replaygain_reference_loudness':
 439.502 +                        $getid3->info['replay_gain']['reference_volume'] = (float)$commentvalue[0];
 439.503 +                        unset($getid3->info['ogg']['comments'][$index]);
 439.504 +                        break;
 439.505 +                }
 439.506 +            }
 439.507 +        }
 439.508 +
 439.509 +        fseek($getid3->fp, $original_offset, SEEK_SET);
 439.510 +
 439.511 +        return true;
 439.512 +    }
 439.513 +
 439.514 +
 439.515 +
 439.516 +    private function ParseFLAC() {
 439.517 +        
 439.518 +        $getid3 = $this->getid3;
 439.519 +        
 439.520 +        // http://flac.sourceforge.net/format.html
 439.521 +
 439.522 +        $getid3->info['fileformat']            = 'flac';
 439.523 +        $getid3->info['audio']['dataformat']   = 'flac';
 439.524 +        $getid3->info['audio']['bitrate_mode'] = 'vbr';
 439.525 +        $getid3->info['audio']['lossless']     = true;
 439.526 +
 439.527 +        return $this->FLACparseMETAdata();
 439.528 +    }
 439.529 +
 439.530 +
 439.531 +
 439.532 +    private function FLACparseMETAdata() {
 439.533 +        
 439.534 +        $getid3 = $this->getid3;
 439.535 +
 439.536 +        do {
 439.537 +            
 439.538 +            $meta_data_block_offset    = ftell($getid3->fp);
 439.539 +            $meta_data_block_header    = fread($getid3->fp, 4);
 439.540 +            $meta_data_last_block_flag = (bool)(getid3_lib::BigEndian2Int($meta_data_block_header[0]) & 0x80);
 439.541 +            $meta_data_block_type      = getid3_lib::BigEndian2Int($meta_data_block_header[0]) & 0x7F;
 439.542 +            $meta_data_block_length    = getid3_lib::BigEndian2Int(substr($meta_data_block_header, 1, 3));
 439.543 +            $meta_data_block_type_text = getid3_xiph::FLACmetaBlockTypeLookup($meta_data_block_type);
 439.544 +
 439.545 +            if ($meta_data_block_length < 0) {
 439.546 +                throw new getid3_exception('corrupt or invalid METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$meta_data_block_type.') at offset '.$meta_data_block_offset);
 439.547 +            }
 439.548 +
 439.549 +            $getid3->info['flac'][$meta_data_block_type_text]['raw'] = array (
 439.550 +                'offset'          => $meta_data_block_offset,
 439.551 +                'last_meta_block' => $meta_data_last_block_flag,
 439.552 +                'block_type'      => $meta_data_block_type,
 439.553 +                'block_type_text' => $meta_data_block_type_text,
 439.554 +                'block_length'    => $meta_data_block_length,
 439.555 +                'block_data'      => @fread($getid3->fp, $meta_data_block_length)
 439.556 +            );
 439.557 +            $getid3->info['avdataoffset'] = ftell($getid3->fp);
 439.558 +
 439.559 +            switch ($meta_data_block_type_text) {
 439.560 +
 439.561 +                case 'STREAMINFO':
 439.562 +                    if (!$this->FLACparseSTREAMINFO($getid3->info['flac'][$meta_data_block_type_text]['raw']['block_data'])) {
 439.563 +                        return false;
 439.564 +                    }
 439.565 +                    break;
 439.566 +
 439.567 +                case 'PADDING':
 439.568 +                    // ignore
 439.569 +                    break;
 439.570 +
 439.571 +                case 'APPLICATION':
 439.572 +                    if (!$this->FLACparseAPPLICATION($getid3->info['flac'][$meta_data_block_type_text]['raw']['block_data'])) {
 439.573 +                        return false;
 439.574 +                    }
 439.575 +                    break;
 439.576 +
 439.577 +                case 'SEEKTABLE':
 439.578 +                    if (!$this->FLACparseSEEKTABLE($getid3->info['flac'][$meta_data_block_type_text]['raw']['block_data'])) {
 439.579 +                        return false;
 439.580 +                    }
 439.581 +                    break;
 439.582 +
 439.583 +                case 'VORBIS_COMMENT':
 439.584 +                    $old_offset = ftell($getid3->fp);
 439.585 +                    fseek($getid3->fp, 0 - $meta_data_block_length, SEEK_CUR);
 439.586 +                    $this->ParseVorbisCommentsFilepointer($getid3->fp, $getid3->info);
 439.587 +                    fseek($getid3->fp, $old_offset, SEEK_SET);
 439.588 +                    break;
 439.589 +
 439.590 +                case 'CUESHEET':
 439.591 +                    if (!$this->FLACparseCUESHEET($getid3->info['flac'][$meta_data_block_type_text]['raw']['block_data'])) {
 439.592 +                        return false;
 439.593 +                    }
 439.594 +                    break;
 439.595 +                    
 439.596 +                case 'PICTURE':
 439.597 +                    if (!$this->FLACparsePICTURE($getid3->info['flac'][$meta_data_block_type_text]['raw']['block_data'])) {
 439.598 +                        return false;
 439.599 +                    }
 439.600 +                    break;
 439.601 +
 439.602 +                default:
 439.603 +                    $getid3->warning('Unhandled METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$meta_data_block_type.') at offset '.$meta_data_block_offset);
 439.604 +            }
 439.605 +
 439.606 +        } while ($meta_data_last_block_flag === false);
 439.607 +
 439.608 +
 439.609 +        if (isset($getid3->info['flac']['STREAMINFO'])) {
 439.610 +            $getid3->info['flac']['compressed_audio_bytes']   = $getid3->info['avdataend'] - $getid3->info['avdataoffset'];
 439.611 +            $getid3->info['flac']['uncompressed_audio_bytes'] = $getid3->info['flac']['STREAMINFO']['samples_stream'] * $getid3->info['flac']['STREAMINFO']['channels'] * ($getid3->info['flac']['STREAMINFO']['bits_per_sample'] / 8);
 439.612 +            $getid3->info['flac']['compression_ratio']        = $getid3->info['flac']['compressed_audio_bytes'] / $getid3->info['flac']['uncompressed_audio_bytes'];
 439.613 +        }
 439.614 +
 439.615 +        // set md5_data_source - built into flac 0.5+
 439.616 +        if (isset($getid3->info['flac']['STREAMINFO']['audio_signature'])) {
 439.617 +
 439.618 +            if ($getid3->info['flac']['STREAMINFO']['audio_signature'] === str_repeat("\x00", 16)) {
 439.619 +                $getid3->warning('FLAC STREAMINFO.audio_signature is null (known issue with libOggFLAC)');
 439.620 +
 439.621 +            } else {
 439.622 +
 439.623 +                $getid3->info['md5_data_source'] = '';
 439.624 +                $md5 = $getid3->info['flac']['STREAMINFO']['audio_signature'];
 439.625 +                for ($i = 0; $i < strlen($md5); $i++) {
 439.626 +                    $getid3->info['md5_data_source'] .= str_pad(dechex(ord($md5{$i})), 2, '00', STR_PAD_LEFT);
 439.627 +                }
 439.628 +                if (!preg_match('/^[0-9a-f]{32}$/', $getid3->info['md5_data_source'])) {
 439.629 +                    unset($getid3->info['md5_data_source']);
 439.630 +                }
 439.631 +
 439.632 +            }
 439.633 +
 439.634 +        }
 439.635 +
 439.636 +        $getid3->info['audio']['bits_per_sample'] = $getid3->info['flac']['STREAMINFO']['bits_per_sample'];
 439.637 +        if ($getid3->info['audio']['bits_per_sample'] == 8) {
 439.638 +            // special case
 439.639 +            // must invert sign bit on all data bytes before MD5'ing to match FLAC's calculated value
 439.640 +            // MD5sum calculates on unsigned bytes, but FLAC calculated MD5 on 8-bit audio data as signed
 439.641 +            $getid3->warning('FLAC calculates MD5 data strangely on 8-bit audio, so the stored md5_data_source value will not match the decoded WAV file');
 439.642 +        }
 439.643 +        if (!empty($getid3->info['ogg']['vendor'])) {
 439.644 +            $getid3->info['audio']['encoder'] = $getid3->info['ogg']['vendor'];
 439.645 +        }
 439.646 +
 439.647 +        return true;
 439.648 +    }
 439.649 +
 439.650 +
 439.651 +
 439.652 +    private function FLACparseSTREAMINFO($meta_data_block_data) {
 439.653 +        
 439.654 +        $getid3 = $this->getid3;
 439.655 +        
 439.656 +        getid3_lib::ReadSequence('BigEndian2Int', $getid3->info['flac']['STREAMINFO'], $meta_data_block_data, 0,
 439.657 +            array (
 439.658 +                'min_block_size' => 2,
 439.659 +                'max_block_size' => 2,
 439.660 +                'min_frame_size' => 3,
 439.661 +                'max_frame_size' => 3
 439.662 +            )
 439.663 +        );
 439.664 +
 439.665 +        $sample_rate_channels_sample_bits_stream_samples = getid3_lib::BigEndian2Bin(substr($meta_data_block_data, 10, 8));
 439.666 +        
 439.667 +        $getid3->info['flac']['STREAMINFO']['sample_rate']     = bindec(substr($sample_rate_channels_sample_bits_stream_samples,  0, 20));
 439.668 +        $getid3->info['flac']['STREAMINFO']['channels']        = bindec(substr($sample_rate_channels_sample_bits_stream_samples, 20,  3)) + 1;
 439.669 +        $getid3->info['flac']['STREAMINFO']['bits_per_sample'] = bindec(substr($sample_rate_channels_sample_bits_stream_samples, 23,  5)) + 1;
 439.670 +        $getid3->info['flac']['STREAMINFO']['samples_stream']  = bindec(substr($sample_rate_channels_sample_bits_stream_samples, 28, 36));      // bindec() returns float in case of int overrun
 439.671 +        $getid3->info['flac']['STREAMINFO']['audio_signature'] = substr($meta_data_block_data, 18, 16);
 439.672 +
 439.673 +        if (!empty($getid3->info['flac']['STREAMINFO']['sample_rate'])) {
 439.674 +
 439.675 +            $getid3->info['audio']['bitrate_mode']    = 'vbr';
 439.676 +            $getid3->info['audio']['sample_rate']     = $getid3->info['flac']['STREAMINFO']['sample_rate'];
 439.677 +            $getid3->info['audio']['channels']        = $getid3->info['flac']['STREAMINFO']['channels'];
 439.678 +            $getid3->info['audio']['bits_per_sample'] = $getid3->info['flac']['STREAMINFO']['bits_per_sample'];
 439.679 +            $getid3->info['playtime_seconds']         = $getid3->info['flac']['STREAMINFO']['samples_stream'] / $getid3->info['flac']['STREAMINFO']['sample_rate'];
 439.680 +            $getid3->info['audio']['bitrate']         = (($getid3->info['avdataend'] - $getid3->info['avdataoffset']) * 8) / $getid3->info['playtime_seconds'];
 439.681 +
 439.682 +        } else {
 439.683 +
 439.684 +            throw new getid3_exception('Corrupt METAdata block: STREAMINFO');
 439.685 +        }
 439.686 +        
 439.687 +        unset($getid3->info['flac']['STREAMINFO']['raw']);
 439.688 +
 439.689 +        return true;
 439.690 +    }
 439.691 +
 439.692 +
 439.693 +
 439.694 +    private function FLACparseAPPLICATION($meta_data_block_data) {
 439.695 +        
 439.696 +        $getid3 = $this->getid3;
 439.697 +        
 439.698 +        $application_id = getid3_lib::BigEndian2Int(substr($meta_data_block_data, 0, 4));
 439.699 +        
 439.700 +        $getid3->info['flac']['APPLICATION'][$application_id]['name'] = getid3_xiph::FLACapplicationIDLookup($application_id);
 439.701 +        $getid3->info['flac']['APPLICATION'][$application_id]['data'] = substr($meta_data_block_data, 4);
 439.702 +        
 439.703 +        unset($getid3->info['flac']['APPLICATION']['raw']);
 439.704 +
 439.705 +        return true;
 439.706 +    }
 439.707 +
 439.708 +
 439.709 +
 439.710 +    private function FLACparseSEEKTABLE($meta_data_block_data) {
 439.711 +        
 439.712 +        $getid3 = $this->getid3;
 439.713 +        
 439.714 +        $offset = 0;
 439.715 +        $meta_data_block_length = strlen($meta_data_block_data);
 439.716 +        while ($offset < $meta_data_block_length) {
 439.717 +            $sample_number_string = substr($meta_data_block_data, $offset, 8);
 439.718 +            $offset += 8;
 439.719 +            if ($sample_number_string == "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF") {
 439.720 +
 439.721 +                // placeholder point
 439.722 +                @$getid3->info['flac']['SEEKTABLE']['placeholders']++;
 439.723 +                $offset += 10;
 439.724 +
 439.725 +            } else {
 439.726 +
 439.727 +                $sample_number = getid3_lib::BigEndian2Int($sample_number_string);
 439.728 +                
 439.729 +                $getid3->info['flac']['SEEKTABLE'][$sample_number]['offset']  = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 8));
 439.730 +                $offset += 8;
 439.731 +                
 439.732 +                $getid3->info['flac']['SEEKTABLE'][$sample_number]['samples'] = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 2));
 439.733 +                $offset += 2;
 439.734 +
 439.735 +            }
 439.736 +        }
 439.737 +        
 439.738 +        unset($getid3->info['flac']['SEEKTABLE']['raw']);
 439.739 +        
 439.740 +        return true;
 439.741 +    }
 439.742 +
 439.743 +
 439.744 +
 439.745 +    private function FLACparseCUESHEET($meta_data_block_data) {
 439.746 +        
 439.747 +        $getid3 = $this->getid3;
 439.748 +        
 439.749 +        $getid3->info['flac']['CUESHEET']['media_catalog_number'] = trim(substr($meta_data_block_data, 0, 128), "\0");
 439.750 +        $getid3->info['flac']['CUESHEET']['lead_in_samples']      = getid3_lib::BigEndian2Int(substr($meta_data_block_data, 128, 8));
 439.751 +        $getid3->info['flac']['CUESHEET']['flags']['is_cd']       = (bool)(getid3_lib::BigEndian2Int($meta_data_block_data[136]) & 0x80);
 439.752 +        $getid3->info['flac']['CUESHEET']['number_tracks']        = getid3_lib::BigEndian2Int($meta_data_block_data[395]);
 439.753 +
 439.754 +        $offset = 396;
 439.755 +        
 439.756 +        for ($track = 0; $track < $getid3->info['flac']['CUESHEET']['number_tracks']; $track++) {
 439.757 +        
 439.758 +            $track_sample_offset = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 8));
 439.759 +            $offset += 8;
 439.760 +
 439.761 +            $track_number        = getid3_lib::BigEndian2Int($meta_data_block_data{$offset++});
 439.762 +
 439.763 +            $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['sample_offset'] = $track_sample_offset;
 439.764 +            $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['isrc']          = substr($meta_data_block_data, $offset, 12);
 439.765 +            $offset += 12;
 439.766 +
 439.767 +            $track_flags_raw = getid3_lib::BigEndian2Int($meta_data_block_data{$offset++});
 439.768 +            $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['flags']['is_audio']     = (bool)($track_flags_raw & 0x80);
 439.769 +            $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['flags']['pre_emphasis'] = (bool)($track_flags_raw & 0x40);
 439.770 +
 439.771 +            $offset += 13; // reserved
 439.772 +
 439.773 +            $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['index_points'] = getid3_lib::BigEndian2Int($meta_data_block_data{$offset++});
 439.774 +
 439.775 +            for ($index = 0; $index < $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['index_points']; $index++) {
 439.776 +                
 439.777 +                $index_sample_offset = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 8));
 439.778 +                $offset += 8;
 439.779 +                
 439.780 +                $index_number = getid3_lib::BigEndian2Int($meta_data_block_data{$offset++});
 439.781 +                $getid3->info['flac']['CUESHEET']['tracks'][$track_number]['indexes'][$index_number] = $index_sample_offset;
 439.782 +                
 439.783 +                $offset += 3; // reserved
 439.784 +            }
 439.785 +        }
 439.786 +        
 439.787 +        unset($getid3->info['flac']['CUESHEET']['raw']);
 439.788 +        
 439.789 +        return true;
 439.790 +    }
 439.791 +    
 439.792 +    
 439.793 +    
 439.794 +    private function FLACparsePICTURE($meta_data_block_data) {
 439.795 +        
 439.796 +        $getid3 = $this->getid3;
 439.797 +        
 439.798 +        $picture = &$getid3->info['flac']['PICTURE'][sizeof($getid3->info['flac']['PICTURE']) - 1];
 439.799 +        
 439.800 +        $offset = 0;
 439.801 +        
 439.802 +        $picture['type'] = $this->FLACpictureTypeLookup(getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4)));
 439.803 +        $offset += 4;
 439.804 +        
 439.805 +        $length = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.806 +        $offset += 4;
 439.807 +        
 439.808 +        $picture['mime_type'] = substr($meta_data_block_data, $offset, $length);
 439.809 +        $offset += $length;
 439.810 +        
 439.811 +        $length = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.812 +        $offset += 4;
 439.813 +        
 439.814 +        $picture['description'] = substr($meta_data_block_data, $offset, $length);
 439.815 +        $offset += $length;
 439.816 +        
 439.817 +        $picture['width'] = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.818 +        $offset += 4;
 439.819 +        
 439.820 +        $picture['height'] = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.821 +        $offset += 4;
 439.822 +        
 439.823 +        $picture['color_depth'] = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.824 +        $offset += 4;
 439.825 +        
 439.826 +        $picture['colors_indexed'] = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.827 +        $offset += 4;
 439.828 +        
 439.829 +        $length = getid3_lib::BigEndian2Int(substr($meta_data_block_data, $offset, 4));
 439.830 +        $offset += 4;
 439.831 +        
 439.832 +        $picture['image_data'] = substr($meta_data_block_data, $offset, $length);
 439.833 +        $offset += $length;
 439.834 +        
 439.835 +        unset($getid3->info['flac']['PICTURE']['raw']);
 439.836 +        
 439.837 +        return true;
 439.838 +    }
 439.839 +    
 439.840 +    
 439.841 +    
 439.842 +    public static function SpeexBandModeLookup($mode) {
 439.843 +        
 439.844 +        static $lookup = array (
 439.845 +            0 => 'narrow',
 439.846 +            1 => 'wide',
 439.847 +            2 => 'ultra-wide'
 439.848 +        );
 439.849 +        return (isset($lookup[$mode]) ? $lookup[$mode] : null);
 439.850 +    }
 439.851 +
 439.852 +
 439.853 +
 439.854 +    public static function OggPageSegmentLength($ogg_info_array, $segment_number=1) {
 439.855 +        
 439.856 +        for ($i = 0; $i < $segment_number; $i++) {
 439.857 +            $segment_length = 0;
 439.858 +            foreach ($ogg_info_array['segment_table'] as $key => $value) {
 439.859 +                $segment_length += $value;
 439.860 +                if ($value < 255) {
 439.861 +                    break;
 439.862 +                }
 439.863 +            }
 439.864 +        }
 439.865 +        return $segment_length;
 439.866 +    }
 439.867 +
 439.868 +
 439.869 +
 439.870 +    public static function GetQualityFromNominalBitrate($nominal_bitrate) {
 439.871 +
 439.872 +        // decrease precision
 439.873 +        $nominal_bitrate = $nominal_bitrate / 1000;
 439.874 +
 439.875 +        if ($nominal_bitrate < 128) {
 439.876 +            // q-1 to q4
 439.877 +            $qval = ($nominal_bitrate - 64) / 16;
 439.878 +        } elseif ($nominal_bitrate < 256) {
 439.879 +            // q4 to q8
 439.880 +            $qval = $nominal_bitrate / 32;
 439.881 +        } elseif ($nominal_bitrate < 320) {
 439.882 +            // q8 to q9
 439.883 +            $qval = ($nominal_bitrate + 256) / 64;
 439.884 +        } else {
 439.885 +            // q9 to q10
 439.886 +            $qval = ($nominal_bitrate + 1300) / 180;
 439.887 +        }
 439.888 +        return round($qval, 1); // 5 or 4.9
 439.889 +    }
 439.890 +    
 439.891 +    
 439.892 +    
 439.893 +    public static function FLACmetaBlockTypeLookup($block_type) {
 439.894 +    
 439.895 +        static $lookup = array (
 439.896 +            0 => 'STREAMINFO',
 439.897 +            1 => 'PADDING',
 439.898 +            2 => 'APPLICATION',
 439.899 +            3 => 'SEEKTABLE',
 439.900 +            4 => 'VORBIS_COMMENT',
 439.901 +            5 => 'CUESHEET',
 439.902 +            6 => 'PICTURE'
 439.903 +        );
 439.904 +        return (isset($lookup[$block_type]) ? $lookup[$block_type] : 'reserved');
 439.905 +    }
 439.906 +
 439.907 +
 439.908 +
 439.909 +    public static function FLACapplicationIDLookup($application_id) {
 439.910 +        
 439.911 +        // http://flac.sourceforge.net/id.html
 439.912 +        
 439.913 +        static $lookup = array (
 439.914 +            0x46746F6C => 'flac-tools',                                                 // 'Ftol'
 439.915 +            0x46746F6C => 'Sound Font FLAC',                                            // 'SFFL'
 439.916 +            0x7065656D => 'Parseable Embedded Extensible Metadata (specification)',     //  'peem'
 439.917 +            0x786D6364 => 'xmcd'
 439.918 +            
 439.919 +        );
 439.920 +        return (isset($lookup[$application_id]) ? $lookup[$application_id] : 'reserved');
 439.921 +    }
 439.922 +
 439.923 +
 439.924 +    public static function FLACpictureTypeLookup($type_id) {
 439.925 +        
 439.926 +        static $lookup = array (
 439.927 +            
 439.928 +             0 => 'Other',
 439.929 +             1 => "32x32 pixels 'file icon' (PNG only)",
 439.930 +             2 => 'Other file icon',
 439.931 +             3 => 'Cover (front)',
 439.932 +             4 => 'Cover (back)',
 439.933 +             5 => 'Leaflet page',
 439.934 +             6 => 'Media (e.g. label side of CD)',
 439.935 +             7 => 'Lead artist/lead performer/soloist',
 439.936 +             8 => 'Artist/performer',
 439.937 +             9 => 'Conductor',
 439.938 +            10 => 'Band/Orchestra',
 439.939 +            11 => 'Composer',
 439.940 +            12 => 'Lyricist/text writer',
 439.941 +            13 => 'Recording Location',
 439.942 +            14 => 'During recording',
 439.943 +            15 => 'During performance',
 439.944 +            16 => 'Movie/video screen capture',
 439.945 +            17 => 'A bright coloured fish',
 439.946 +            18 => 'Illustration',
 439.947 +            19 => 'Band/artist logotype',
 439.948 +            20 => 'Publisher/Studio logotype'
 439.949 +        );
 439.950 +        return (isset($lookup[$type_id]) ? $lookup[$type_id] : 'reserved');
 439.951 +    }
 439.952 +
 439.953 +}
 439.954 +
 439.955 +?>
 439.956 \ No newline at end of file
   440.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   440.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.bmp.php	Mon Feb 22 08:02:39 2010 -0500
   440.3 @@ -0,0 +1,319 @@
   440.4 +<?php
   440.5 +// +----------------------------------------------------------------------+
   440.6 +// | PHP version 5                                                        |
   440.7 +// +----------------------------------------------------------------------+
   440.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   440.9 +// +----------------------------------------------------------------------+
  440.10 +// | This source file is subject to version 2 of the GPL license,         |
  440.11 +// | that is bundled with this package in the file license.txt and is     |
  440.12 +// | available through the world-wide-web at the following url:           |
  440.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  440.14 +// +----------------------------------------------------------------------+
  440.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  440.16 +// +----------------------------------------------------------------------+
  440.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  440.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  440.19 +// +----------------------------------------------------------------------+
  440.20 +// | module.graphic.bmp.php                                               |
  440.21 +// | Module for analyzing BMP graphic files.                              |
  440.22 +// | dependencies: NONE                                                   |
  440.23 +// +----------------------------------------------------------------------+
  440.24 +//
  440.25 +// $Id: module.graphic.bmp.php,v 1.4 2006/11/02 10:48:02 ah Exp $
  440.26 +
  440.27 +        
  440.28 +        
  440.29 +class getid3_bmp extends getid3_handler
  440.30 +{
  440.31 +
  440.32 +
  440.33 +    public function Analyze() {
  440.34 +
  440.35 +        $getid3 = $this->getid3;
  440.36 +
  440.37 +        // BITMAPFILEHEADER [14 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_62uq.asp
  440.38 +        // all versions
  440.39 +        // WORD    bfType;
  440.40 +        // DWORD   bfSize;
  440.41 +        // WORD    bfReserved1;
  440.42 +        // WORD    bfReserved2;
  440.43 +        // DWORD   bfOffBits;
  440.44 +        
  440.45 +        // shortcuts
  440.46 +        $getid3->info['bmp']['header']['raw'] = array ();
  440.47 +        $info_bmp            = &$getid3->info['bmp'];
  440.48 +        $info_bmp_header     = &$info_bmp['header'];
  440.49 +        $info_bmp_header_raw = &$info_bmp_header['raw'];
  440.50 +
  440.51 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  440.52 +        $bmp_header = fread($getid3->fp, 14 + 40);
  440.53 +
  440.54 +        // Magic bytes
  440.55 +        $info_bmp_header_raw['identifier'] = 'BM';
  440.56 +        
  440.57 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 2,
  440.58 +            array (
  440.59 +                'filesize'    => 4,
  440.60 +                'reserved1'   => 2,
  440.61 +                'reserved2'   => 2,
  440.62 +                'data_offset' => 4,
  440.63 +                'header_size' => 4
  440.64 +            )
  440.65 +        );
  440.66 +        
  440.67 +        // Check if the hardcoded-to-1 "planes" is at offset 22 or 26
  440.68 +        $planes22 = getid3_lib::LittleEndian2Int(substr($bmp_header, 22, 2));
  440.69 +        $planes26 = getid3_lib::LittleEndian2Int(substr($bmp_header, 26, 2));
  440.70 +        if (($planes22 == 1) && ($planes26 != 1)) {
  440.71 +            $info_bmp['type_os']      = 'OS/2';
  440.72 +            $info_bmp['type_version'] = 1;
  440.73 +        } 
  440.74 +        elseif (($planes26 == 1) && ($planes22 != 1)) {
  440.75 +            $info_bmp['type_os']      = 'Windows';
  440.76 +            $info_bmp['type_version'] = 1;
  440.77 +        } 
  440.78 +        elseif ($info_bmp_header_raw['header_size'] == 12) {
  440.79 +            $info_bmp['type_os']      = 'OS/2';
  440.80 +            $info_bmp['type_version'] = 1;
  440.81 +        } 
  440.82 +        elseif ($info_bmp_header_raw['header_size'] == 40) {
  440.83 +            $info_bmp['type_os']      = 'Windows';
  440.84 +            $info_bmp['type_version'] = 1;
  440.85 +        } 
  440.86 +        elseif ($info_bmp_header_raw['header_size'] == 84) {
  440.87 +            $info_bmp['type_os']      = 'Windows';
  440.88 +            $info_bmp['type_version'] = 4;
  440.89 +        } 
  440.90 +        elseif ($info_bmp_header_raw['header_size'] == 100) {
  440.91 +            $info_bmp['type_os']      = 'Windows';
  440.92 +            $info_bmp['type_version'] = 5;
  440.93 +        } 
  440.94 +        else {
  440.95 +            throw new getid3_exception('Unknown BMP subtype (or not a BMP file)');
  440.96 +        }
  440.97 +
  440.98 +        $getid3->info['fileformat']                  = 'bmp';
  440.99 +        $getid3->info['video']['dataformat']         = 'bmp';
 440.100 +        $getid3->info['video']['lossless']           = true;
 440.101 +        $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
 440.102 +
 440.103 +        if ($info_bmp['type_os'] == 'OS/2') {
 440.104 +
 440.105 +            // OS/2-format BMP
 440.106 +            // http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
 440.107 +
 440.108 +            // DWORD  Size;             /* Size of this structure in bytes */
 440.109 +            // DWORD  Width;            /* Bitmap width in pixels */
 440.110 +            // DWORD  Height;           /* Bitmap height in pixel */
 440.111 +            // WORD   NumPlanes;        /* Number of bit planes (color depth) */
 440.112 +            // WORD   BitsPerPixel;     /* Number of bits per pixel per plane */
 440.113 +            
 440.114 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 18,
 440.115 +                array (
 440.116 +                    'width'          => 2,
 440.117 +                    'height'         => 2,
 440.118 +                    'planes'         => 2,
 440.119 +                    'bits_per_pixel' => 2
 440.120 +                )
 440.121 +            );
 440.122 +            
 440.123 +            $getid3->info['video']['resolution_x']    = $info_bmp_header_raw['width'];
 440.124 +            $getid3->info['video']['resolution_y']    = $info_bmp_header_raw['height'];
 440.125 +            $getid3->info['video']['codec']           = 'BI_RGB '.$info_bmp_header_raw['bits_per_pixel'].'-bit';
 440.126 +            $getid3->info['video']['bits_per_sample'] = $info_bmp_header_raw['bits_per_pixel'];
 440.127 +            
 440.128 +            if ($info_bmp['type_version'] >= 2) {
 440.129 +                // DWORD  Compression;      /* Bitmap compression scheme */
 440.130 +                // DWORD  ImageDataSize;    /* Size of bitmap data in bytes */
 440.131 +                // DWORD  XResolution;      /* X resolution of display device */
 440.132 +                // DWORD  YResolution;      /* Y resolution of display device */
 440.133 +                // DWORD  ColorsUsed;       /* Number of color table indices used */
 440.134 +                // DWORD  ColorsImportant;  /* Number of important color indices */
 440.135 +                // WORD   Units;            /* Type of units used to measure resolution */
 440.136 +                // WORD   Reserved;         /* Pad structure to 4-byte boundary */
 440.137 +                // WORD   Recording;        /* Recording algorithm */
 440.138 +                // WORD   Rendering;        /* Halftoning algorithm used */
 440.139 +                // DWORD  Size1;            /* Reserved for halftoning algorithm use */
 440.140 +                // DWORD  Size2;            /* Reserved for halftoning algorithm use */
 440.141 +                // DWORD  ColorEncoding;    /* Color model used in bitmap */
 440.142 +                // DWORD  Identifier;       /* Reserved for application use */
 440.143 +                
 440.144 +                getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 26,
 440.145 +                    array (
 440.146 +                        'compression'      => 4,
 440.147 +                        'bmp_data_size'    => 4,
 440.148 +                        'resolution_h'     => 4,
 440.149 +                        'resolution_v'     => 4,
 440.150 +                        'colors_used'      => 4,
 440.151 +                        'colors_important' => 4,
 440.152 +                        'resolution_units' => 2,
 440.153 +                        'reserved1'        => 2,
 440.154 +                        'recording'        => 2,
 440.155 +                        'rendering'        => 2,
 440.156 +                        'size1'            => 4,
 440.157 +                        'size2'            => 4,
 440.158 +                        'color_encoding'   => 4,
 440.159 +                        'identifier'       => 4
 440.160 +                    )
 440.161 +                );
 440.162 +
 440.163 +                $info_bmp_header['compression'] = getid3_bmp::BMPcompressionOS2Lookup($info_bmp_header_raw['compression']);
 440.164 +                $getid3->info['video']['codec'] = $info_bmp_header['compression'].' '.$info_bmp_header_raw['bits_per_pixel'].'-bit';
 440.165 +            }
 440.166 +            
 440.167 +            return true;
 440.168 +        } 
 440.169 +    
 440.170 +        
 440.171 +        if ($info_bmp['type_os'] == 'Windows') {
 440.172 +
 440.173 +            // Windows-format BMP
 440.174 +
 440.175 +            // BITMAPINFOHEADER - [40 bytes] http://msdn.microsoft.com/library/en-us/gdi/bitmaps_1rw2.asp
 440.176 +            // all versions
 440.177 +            // DWORD  biSize;
 440.178 +            // LONG   biWidth;
 440.179 +            // LONG   biHeight;
 440.180 +            // WORD   biPlanes;
 440.181 +            // WORD   biBitCount;
 440.182 +            // DWORD  biCompression;
 440.183 +            // DWORD  biSizeImage;
 440.184 +            // LONG   biXPelsPerMeter;
 440.185 +            // LONG   biYPelsPerMeter;
 440.186 +            // DWORD  biClrUsed;
 440.187 +            // DWORD  biClrImportant;
 440.188 +
 440.189 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 18,
 440.190 +                array (
 440.191 +                    'width'            => -4,        //signed
 440.192 +                    'height'           => -4,        //signed
 440.193 +                    'planes'           => 2,
 440.194 +                    'bits_per_pixel'   => 2,
 440.195 +                    'compression'      => 4,
 440.196 +                    'bmp_data_size'    => 4,
 440.197 +                    'resolution_h'     => -4,        //signed
 440.198 +                    'resolution_v'     => -4,        //signed
 440.199 +                    'colors_used'      => 4,
 440.200 +                    'colors_important' => 4
 440.201 +                )
 440.202 +            );
 440.203 +            foreach (array ('width', 'height', 'resolution_h', 'resolution_v') as $key) {
 440.204 +                $info_bmp_header_raw[$key] = getid3_lib::LittleEndian2Int($info_bmp_header_raw[$key], true);
 440.205 +            }
 440.206 +            
 440.207 +            $info_bmp_header['compression']           = getid3_bmp::BMPcompressionWindowsLookup($info_bmp_header_raw['compression']);
 440.208 +            $getid3->info['video']['resolution_x']    = $info_bmp_header_raw['width'];
 440.209 +            $getid3->info['video']['resolution_y']    = $info_bmp_header_raw['height'];
 440.210 +            $getid3->info['video']['codec']           = $info_bmp_header['compression'].' '.$info_bmp_header_raw['bits_per_pixel'].'-bit';
 440.211 +            $getid3->info['video']['bits_per_sample'] = $info_bmp_header_raw['bits_per_pixel'];
 440.212 +
 440.213 +            // should only be v4+, but BMPs with type_version==1 and BI_BITFIELDS compression have been seen
 440.214 +            if (($info_bmp['type_version'] >= 4) || ($info_bmp_header_raw['compression'] == 3)) {
 440.215 +  	            
 440.216 +                
 440.217 +                $bmp_header .= fread($getid3->fp, 44);
 440.218 +
 440.219 +                // BITMAPV4HEADER - [44 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_2k1e.asp
 440.220 +                // Win95+, WinNT4.0+
 440.221 +                // DWORD        bV4RedMask;
 440.222 +                // DWORD        bV4GreenMask;
 440.223 +                // DWORD        bV4BlueMask;
 440.224 +                // DWORD        bV4AlphaMask;
 440.225 +                // DWORD        bV4CSType;
 440.226 +                // CIEXYZTRIPLE bV4Endpoints;
 440.227 +                // DWORD        bV4GammaRed;
 440.228 +                // DWORD        bV4GammaGreen;
 440.229 +                // DWORD        bV4GammaBlue;
 440.230 +                
 440.231 +                getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 54,
 440.232 +                    array (
 440.233 +                        'red_mask'     => 4,
 440.234 +                        'green_mask'   => 4,
 440.235 +                        'blue_mask'    => 4,
 440.236 +                        'alpha_mask'   => 4,
 440.237 +                        'cs_type'      => 4,
 440.238 +                        'ciexyz_red'   => -4,       //string
 440.239 +                        'ciexyz_green' => -4,       //string
 440.240 +                        'ciexyz_blue'  => -4,       //string
 440.241 +                        'gamma_red'    => 4,
 440.242 +                        'gamma_green'  => 4,
 440.243 +                        'gamma_blue'   => 4
 440.244 +                    )
 440.245 +                );
 440.246 +                
 440.247 +                $info_bmp_header['ciexyz_red']   = getid3_bmp::FixedPoint2_30(strrev($info_bmp_header_raw['ciexyz_red']));
 440.248 +                $info_bmp_header['ciexyz_green'] = getid3_bmp::FixedPoint2_30(strrev($info_bmp_header_raw['ciexyz_green']));
 440.249 +                $info_bmp_header['ciexyz_blue']  = getid3_bmp::FixedPoint2_30(strrev($info_bmp_header_raw['ciexyz_blue']));
 440.250 +            
 440.251 +
 440.252 +                if ($info_bmp['type_version'] >= 5) {
 440.253 +                    $bmp_header .= fread($getid3->fp, 16);
 440.254 +    
 440.255 +                    // BITMAPV5HEADER - [16 bytes] - http://msdn.microsoft.com/library/en-us/gdi/bitmaps_7c36.asp
 440.256 +                    // Win98+, Win2000+
 440.257 +                    // DWORD        bV5Intent;
 440.258 +                    // DWORD        bV5ProfileData;
 440.259 +                    // DWORD        bV5ProfileSize;
 440.260 +                    // DWORD        bV5Reserved;
 440.261 +                    
 440.262 +                    getid3_lib::ReadSequence('LittleEndian2Int', $info_bmp_header_raw, $bmp_header, 98,
 440.263 +                        array (
 440.264 +                            'intent'              => 4,
 440.265 +                            'profile_data_offset' => 4,
 440.266 +                            'profile_data_size'   => 4,
 440.267 +                            'reserved3'           => 4
 440.268 +                        )
 440.269 +                    );
 440.270 +                    
 440.271 +                }
 440.272 +            }
 440.273 +            
 440.274 +            return true;
 440.275 +        }
 440.276 +
 440.277 +
 440.278 +        throw new getid3_exception('Unknown BMP format in header.');
 440.279 +        
 440.280 +    }
 440.281 +
 440.282 +
 440.283 +
 440.284 +    public static function BMPcompressionWindowsLookup($compression_id) {
 440.285 +
 440.286 +        static $lookup = array (
 440.287 +            0 => 'BI_RGB',
 440.288 +            1 => 'BI_RLE8',
 440.289 +            2 => 'BI_RLE4',
 440.290 +            3 => 'BI_BITFIELDS',
 440.291 +            4 => 'BI_JPEG',
 440.292 +            5 => 'BI_PNG'
 440.293 +        );
 440.294 +        return (isset($lookup[$compression_id]) ? $lookup[$compression_id] : 'invalid');
 440.295 +    }
 440.296 +
 440.297 +
 440.298 +
 440.299 +    public static function BMPcompressionOS2Lookup($compression_id) {
 440.300 +        
 440.301 +        static $lookup = array (
 440.302 +            0 => 'BI_RGB',
 440.303 +            1 => 'BI_RLE8',
 440.304 +            2 => 'BI_RLE4',
 440.305 +            3 => 'Huffman 1D',
 440.306 +            4 => 'BI_RLE24',
 440.307 +        );
 440.308 +        return (isset($lookup[$compression_id]) ? $lookup[$compression_id] : 'invalid');
 440.309 +    }
 440.310 +    
 440.311 +    
 440.312 +    public static function FixedPoint2_30($raw_data) {
 440.313 +        
 440.314 +        $binary_string = getid3_lib::BigEndian2Bin($raw_data);
 440.315 +        return bindec(substr($binary_string, 0, 2)) + (float)(bindec(substr($binary_string, 2, 30)) / 1073741824);        // pow(2, 30) = 1073741824
 440.316 +    }
 440.317 +
 440.318 +
 440.319 +}
 440.320 +
 440.321 +
 440.322 +?>
 440.323 \ No newline at end of file
   441.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   441.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.gif.php	Mon Feb 22 08:02:39 2010 -0500
   441.3 @@ -0,0 +1,92 @@
   441.4 +<?php
   441.5 +// +----------------------------------------------------------------------+
   441.6 +// | PHP version 5                                                        |
   441.7 +// +----------------------------------------------------------------------+
   441.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   441.9 +// +----------------------------------------------------------------------+
  441.10 +// | This source file is subject to version 2 of the GPL license,         |
  441.11 +// | that is bundled with this package in the file license.txt and is     |
  441.12 +// | available through the world-wide-web at the following url:           |
  441.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  441.14 +// +----------------------------------------------------------------------+
  441.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  441.16 +// +----------------------------------------------------------------------+
  441.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  441.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  441.19 +// +----------------------------------------------------------------------+
  441.20 +// | module.graphic.gif.php                                               |
  441.21 +// | Module for analyzing CompuServe GIF graphic files.                   |
  441.22 +// | dependencies: NONE                                                   |
  441.23 +// +----------------------------------------------------------------------+
  441.24 +//
  441.25 +// $Id: module.graphic.gif.php,v 1.2 2006/11/02 10:48:02 ah Exp $
  441.26 +
  441.27 +        
  441.28 +        
  441.29 +class getid3_gif extends getid3_handler
  441.30 +{
  441.31 +
  441.32 +    public function Analyze() {
  441.33 +        
  441.34 +        $getid3 = $this->getid3;
  441.35 +
  441.36 +        $getid3->info['fileformat']                  = 'gif';
  441.37 +        $getid3->info['video']['dataformat']         = 'gif';
  441.38 +        $getid3->info['video']['lossless']           = true;
  441.39 +        $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
  441.40 +        
  441.41 +        $getid3->info['gif']['header'] = array ();
  441.42 +        $info_gif_header = &$getid3->info['gif']['header'];
  441.43 +
  441.44 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  441.45 +        $gif_header = fread($getid3->fp, 13);
  441.46 +
  441.47 +        // Magic bytes
  441.48 +        $info_gif_header['raw']['identifier'] = 'GIF';
  441.49 +        
  441.50 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_gif_header['raw'], $gif_header, 3,
  441.51 +            array (
  441.52 +                'version'        => -3,      // string
  441.53 +                'width'          => 2,
  441.54 +                'height'         => 2,
  441.55 +                'flags'          => 1,
  441.56 +                'bg_color_index' => 1,
  441.57 +                'aspect_ratio'   => 1
  441.58 +            )
  441.59 +        );
  441.60 +
  441.61 +        $getid3->info['video']['resolution_x'] = $info_gif_header['raw']['width'];
  441.62 +        $getid3->info['video']['resolution_y'] = $info_gif_header['raw']['height'];
  441.63 +        $getid3->info['gif']['version']        = $info_gif_header['raw']['version'];
  441.64 +        
  441.65 +        $info_gif_header['flags']['global_color_table'] = (bool)($info_gif_header['raw']['flags'] & 0x80);
  441.66 +        
  441.67 +        if ($info_gif_header['raw']['flags'] & 0x80) {
  441.68 +            // Number of bits per primary color available to the original image, minus 1
  441.69 +            $info_gif_header['bits_per_pixel']  = 3 * ((($info_gif_header['raw']['flags'] & 0x70) >> 4) + 1);
  441.70 +        } else {
  441.71 +            $info_gif_header['bits_per_pixel']  = 0;
  441.72 +        }
  441.73 +        
  441.74 +        $info_gif_header['flags']['global_color_sorted'] = (bool)($info_gif_header['raw']['flags'] & 0x40);
  441.75 +        if ($info_gif_header['flags']['global_color_table']) {
  441.76 +            // the number of bytes contained in the Global Color Table. To determine that
  441.77 +            // actual size of the color table, raise 2 to [the value of the field + 1]
  441.78 +            $info_gif_header['global_color_size'] = pow(2, ($info_gif_header['raw']['flags'] & 0x07) + 1);
  441.79 +            $getid3->info['video']['bits_per_sample']           = ($info_gif_header['raw']['flags'] & 0x07) + 1;
  441.80 +        } else {
  441.81 +            $info_gif_header['global_color_size'] = 0;
  441.82 +        }
  441.83 +        
  441.84 +        if ($info_gif_header['raw']['aspect_ratio'] != 0) {
  441.85 +            // Aspect Ratio = (Pixel Aspect Ratio + 15) / 64
  441.86 +            $info_gif_header['aspect_ratio'] = ($info_gif_header['raw']['aspect_ratio'] + 15) / 64;
  441.87 +        }
  441.88 +
  441.89 +        return true;
  441.90 +    }
  441.91 +
  441.92 +}
  441.93 +
  441.94 +
  441.95 +?>
  441.96 \ No newline at end of file
   442.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   442.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.jpeg.php	Mon Feb 22 08:02:39 2010 -0500
   442.3 @@ -0,0 +1,62 @@
   442.4 +<?php
   442.5 +// +----------------------------------------------------------------------+
   442.6 +// | PHP version 5                                                        |
   442.7 +// +----------------------------------------------------------------------+
   442.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   442.9 +// +----------------------------------------------------------------------+
  442.10 +// | This source file is subject to version 2 of the GPL license,         |
  442.11 +// | that is bundled with this package in the file license.txt and is     |
  442.12 +// | available through the world-wide-web at the following url:           |
  442.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  442.14 +// +----------------------------------------------------------------------+
  442.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  442.16 +// +----------------------------------------------------------------------+
  442.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  442.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  442.19 +// +----------------------------------------------------------------------+
  442.20 +// | module.graphic.jpeg.php                                              |
  442.21 +// | Module for analyzing JPEG graphic files.                             |
  442.22 +// | dependencies: exif support in PHP (optional)                         |
  442.23 +// +----------------------------------------------------------------------+
  442.24 +//
  442.25 +// $Id: module.graphic.jpeg.php,v 1.4 2006/11/02 10:48:02 ah Exp $
  442.26 +
  442.27 +        
  442.28 +        
  442.29 +class getid3_jpeg extends getid3_handler
  442.30 +{
  442.31 +
  442.32 +    public function Analyze() {
  442.33 +        
  442.34 +        $getid3 = $this->getid3;
  442.35 +
  442.36 +        $getid3->info['fileformat']                  = 'jpg';
  442.37 +        $getid3->info['video']['dataformat']         = 'jpg';
  442.38 +        $getid3->info['video']['lossless']           = false;
  442.39 +        $getid3->info['video']['bits_per_sample']    = 24;
  442.40 +        $getid3->info['video']['pixel_aspect_ratio'] = (float)1;
  442.41 +
  442.42 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  442.43 +
  442.44 +        list($getid3->info['video']['resolution_x'], $getid3->info['video']['resolution_y'], $type) = getimagesize($getid3->filename);
  442.45 +        
  442.46 +        if ($type != 2) {
  442.47 +            throw new getid3_exception('File detected as JPEG, but is currupt.');
  442.48 +        }
  442.49 +
  442.50 +        if (function_exists('exif_read_data')) {
  442.51 +
  442.52 +            $getid3->info['jpg']['exif'] = exif_read_data($getid3->filename, '', true, false);
  442.53 +
  442.54 +        } else {
  442.55 +
  442.56 +            $getid3->warning('EXIF parsing only available when compiled with --enable-exif (or php_exif.dll enabled for Windows).');
  442.57 +        }
  442.58 +
  442.59 +        return true;
  442.60 +    }
  442.61 +
  442.62 +}
  442.63 +
  442.64 +
  442.65 +?>
  442.66 \ No newline at end of file
   443.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   443.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.pcd.php	Mon Feb 22 08:02:39 2010 -0500
   443.3 @@ -0,0 +1,56 @@
   443.4 +<?php
   443.5 +// +----------------------------------------------------------------------+
   443.6 +// | PHP version 5                                                        |
   443.7 +// +----------------------------------------------------------------------+
   443.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   443.9 +// +----------------------------------------------------------------------+
  443.10 +// | This source file is subject to version 2 of the GPL license,         |
  443.11 +// | that is bundled with this package in the file license.txt and is     |
  443.12 +// | available through the world-wide-web at the following url:           |
  443.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  443.14 +// +----------------------------------------------------------------------+
  443.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  443.16 +// +----------------------------------------------------------------------+
  443.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  443.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  443.19 +// +----------------------------------------------------------------------+
  443.20 +// | module.graphic.pcd.php                                               |
  443.21 +// | Module for analyzing PhotoCD (PCD) Image files.                      |
  443.22 +// | dependencies: NONE                                                   |
  443.23 +// +----------------------------------------------------------------------+
  443.24 +//
  443.25 +// $Id: module.graphic.pcd.php,v 1.2 2006/11/02 10:48:02 ah Exp $
  443.26 +
  443.27 +        
  443.28 +        
  443.29 +class getid3_pcd extends getid3_handler
  443.30 +{
  443.31 +
  443.32 +
  443.33 +    public function Analyze() {
  443.34 +        
  443.35 +        $getid3 = $this->getid3;
  443.36 +
  443.37 +        $getid3->info['fileformat']          = 'pcd';
  443.38 +        $getid3->info['video']['dataformat'] = 'pcd';
  443.39 +        $getid3->info['video']['lossless']   = false;
  443.40 +
  443.41 +        fseek($getid3->fp, $getid3->info['avdataoffset'] + 72, SEEK_SET);
  443.42 +
  443.43 +        $pcd_flags       = fread($getid3->fp, 1);
  443.44 +        $pcd_is_vertical = ((ord($pcd_flags) & 0x01) ? true : false);
  443.45 +
  443.46 +        if ($pcd_is_vertical) {
  443.47 +            $getid3->info['video']['resolution_x'] = 3072;
  443.48 +            $getid3->info['video']['resolution_y'] = 2048;
  443.49 +        } else {
  443.50 +            $getid3->info['video']['resolution_x'] = 2048;
  443.51 +            $getid3->info['video']['resolution_y'] = 3072;
  443.52 +        }
  443.53 +
  443.54 +    }
  443.55 +
  443.56 +
  443.57 +}
  443.58 +
  443.59 +?>
  443.60 \ No newline at end of file
   444.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   444.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.png.php	Mon Feb 22 08:02:39 2010 -0500
   444.3 @@ -0,0 +1,556 @@
   444.4 +<?php
   444.5 +// +----------------------------------------------------------------------+
   444.6 +// | PHP version 5                                                        |
   444.7 +// +----------------------------------------------------------------------+
   444.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   444.9 +// +----------------------------------------------------------------------+
  444.10 +// | This source file is subject to version 2 of the GPL license,         |
  444.11 +// | that is bundled with this package in the file license.txt and is     |
  444.12 +// | available through the world-wide-web at the following url:           |
  444.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  444.14 +// +----------------------------------------------------------------------+
  444.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  444.16 +// +----------------------------------------------------------------------+
  444.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  444.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  444.19 +// +----------------------------------------------------------------------+
  444.20 +// | module.graphic.png.php                                               |
  444.21 +// | Module for analyzing PNG graphic files.                              |
  444.22 +// | dependencies: zlib support in PHP (optional)                         |
  444.23 +// +----------------------------------------------------------------------+
  444.24 +//
  444.25 +// $Id: module.graphic.png.php,v 1.4 2006/11/02 10:48:02 ah Exp $
  444.26 +
  444.27 +        
  444.28 +        
  444.29 +class getid3_png extends getid3_handler
  444.30 +{
  444.31 +
  444.32 +    public function Analyze() {
  444.33 +
  444.34 +        $getid3 = $this->getid3;
  444.35 +
  444.36 +        $getid3->info['png'] = array ();
  444.37 +        $info_png = &$getid3->info['png'];
  444.38 +
  444.39 +        $getid3->info['fileformat']          = 'png';
  444.40 +        $getid3->info['video']['dataformat'] = 'png';
  444.41 +        $getid3->info['video']['lossless']   = false;
  444.42 +
  444.43 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  444.44 +        $png_filedata = fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
  444.45 +
  444.46 +        // Magic bytes  "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A"
  444.47 +
  444.48 +        $offset = 8;
  444.49 +
  444.50 +        while (((ftell($getid3->fp) - (strlen($png_filedata) - $offset)) < $getid3->info['filesize'])) {
  444.51 +            
  444.52 +            $chunk['data_length'] = getid3_lib::BigEndian2Int(substr($png_filedata, $offset, 4));
  444.53 +            $offset += 4;
  444.54 +            while (((strlen($png_filedata) - $offset) < ($chunk['data_length'] + 4)) && (ftell($getid3->fp) < $getid3->info['filesize'])) {
  444.55 +                $png_filedata .= fread($getid3->fp, getid3::FREAD_BUFFER_SIZE);
  444.56 +            }
  444.57 +            
  444.58 +            $chunk['type_text'] = substr($png_filedata, $offset, 4);
  444.59 +            $chunk['type_raw']  = getid3_lib::BigEndian2Int($chunk['type_text']);
  444.60 +            $offset += 4;
  444.61 +            
  444.62 +            $chunk['data'] = substr($png_filedata, $offset, $chunk['data_length']);
  444.63 +            $offset += $chunk['data_length'];
  444.64 +            
  444.65 +            $chunk['crc'] = getid3_lib::BigEndian2Int(substr($png_filedata, $offset, 4));
  444.66 +            $offset += 4;
  444.67 +
  444.68 +            $chunk['flags']['ancilliary']   = (bool)($chunk['type_raw'] & 0x20000000);
  444.69 +            $chunk['flags']['private']      = (bool)($chunk['type_raw'] & 0x00200000);
  444.70 +            $chunk['flags']['reserved']     = (bool)($chunk['type_raw'] & 0x00002000);
  444.71 +            $chunk['flags']['safe_to_copy'] = (bool)($chunk['type_raw'] & 0x00000020);
  444.72 +
  444.73 +            // shortcut
  444.74 +            $info_png[$chunk['type_text']] = array ();
  444.75 +            $info_png_chunk_type_text = &$info_png[$chunk['type_text']];
  444.76 +
  444.77 +            switch ($chunk['type_text']) {
  444.78 +
  444.79 +                case 'IHDR': // Image Header
  444.80 +                    $info_png_chunk_type_text['header'] = $chunk;
  444.81 +                    $info_png_chunk_type_text['width']  = getid3_lib::BigEndian2Int(substr($chunk['data'],  0, 4));
  444.82 +                    $info_png_chunk_type_text['height'] = getid3_lib::BigEndian2Int(substr($chunk['data'],  4, 4));
  444.83 +                    
  444.84 +                    getid3_lib::ReadSequence('BigEndian2Int', $info_png_chunk_type_text['raw'], $chunk['data'], 8, 
  444.85 +                        array (
  444.86 +                            'bit_depth'          => 1,
  444.87 +                            'color_type'         => 1,
  444.88 +                            'compression_method' => 1,
  444.89 +                            'filter_method'      => 1,
  444.90 +                            'interlace_method'   => 1
  444.91 +                        )
  444.92 +                    );
  444.93 +
  444.94 +                    $info_png_chunk_type_text['compression_method_text']  = getid3_png::PNGcompressionMethodLookup($info_png_chunk_type_text['raw']['compression_method']);
  444.95 +                    $info_png_chunk_type_text['color_type']['palette']    = (bool)($info_png_chunk_type_text['raw']['color_type'] & 0x01);
  444.96 +                    $info_png_chunk_type_text['color_type']['true_color'] = (bool)($info_png_chunk_type_text['raw']['color_type'] & 0x02);
  444.97 +                    $info_png_chunk_type_text['color_type']['alpha']      = (bool)($info_png_chunk_type_text['raw']['color_type'] & 0x04);
  444.98 +
  444.99 +                    $getid3->info['video']['resolution_x'] = $info_png_chunk_type_text['width'];
 444.100 +                    $getid3->info['video']['resolution_y'] = $info_png_chunk_type_text['height'];
 444.101 +
 444.102 +                    $getid3->info['video']['bits_per_sample'] = getid3_png::IHDRcalculateBitsPerSample($info_png_chunk_type_text['raw']['color_type'], $info_png_chunk_type_text['raw']['bit_depth']);
 444.103 +                    break;
 444.104 +
 444.105 +
 444.106 +                case 'PLTE': // Palette
 444.107 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.108 +                    $palette_offset = 0;
 444.109 +                    for ($i = 0; $i <= 255; $i++) {
 444.110 +                        $red   = @getid3_lib::BigEndian2Int($chunk['data']{$palette_offset++});
 444.111 +                        $green = @getid3_lib::BigEndian2Int($chunk['data']{$palette_offset++});
 444.112 +                        $blue  = @getid3_lib::BigEndian2Int($chunk['data']{$palette_offset++});
 444.113 +                        $info_png_chunk_type_text[$i] = (($red << 16) | ($green << 8) | ($blue));
 444.114 +                    }
 444.115 +                    break;
 444.116 +
 444.117 +
 444.118 +                case 'tRNS': // Transparency
 444.119 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.120 +                    switch ($info_png['IHDR']['raw']['color_type']) {
 444.121 +                        case 0:
 444.122 +                            $info_png_chunk_type_text['transparent_color_gray']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 2));
 444.123 +                            break;
 444.124 +
 444.125 +                        case 2:
 444.126 +                            $info_png_chunk_type_text['transparent_color_red']   = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 2));
 444.127 +                            $info_png_chunk_type_text['transparent_color_green'] = getid3_lib::BigEndian2Int(substr($chunk['data'], 2, 2));
 444.128 +                            $info_png_chunk_type_text['transparent_color_blue']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 4, 2));
 444.129 +                            break;
 444.130 +
 444.131 +                        case 3:
 444.132 +                            for ($i = 0; $i < strlen($chunk['data']); $i++) {
 444.133 +                                $info_png_chunk_type_text['palette_opacity'][$i] = getid3_lib::BigEndian2Int($chunk['data'][$i]);
 444.134 +                            }
 444.135 +                            break;
 444.136 +
 444.137 +                        case 4:
 444.138 +                        case 6:
 444.139 +                            throw new getid3_exception('Invalid color_type in tRNS chunk: '.$info_png['IHDR']['raw']['color_type']);
 444.140 +
 444.141 +                        default:
 444.142 +                            $getid3->warning('Unhandled color_type in tRNS chunk: '.$info_png['IHDR']['raw']['color_type']);
 444.143 +                            break;
 444.144 +                    }
 444.145 +                    break;
 444.146 +
 444.147 +
 444.148 +                case 'gAMA': // Image Gamma
 444.149 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.150 +                    $info_png_chunk_type_text['gamma']  = getid3_lib::BigEndian2Int($chunk['data']) / 100000;
 444.151 +                    break;
 444.152 +
 444.153 +
 444.154 +                case 'cHRM': // Primary Chromaticities
 444.155 +                    $info_png_chunk_type_text['header']  = $chunk;
 444.156 +                    $info_png_chunk_type_text['white_x'] = getid3_lib::BigEndian2Int(substr($chunk['data'],  0, 4)) / 100000;
 444.157 +                    $info_png_chunk_type_text['white_y'] = getid3_lib::BigEndian2Int(substr($chunk['data'],  4, 4)) / 100000;
 444.158 +                    $info_png_chunk_type_text['red_y']   = getid3_lib::BigEndian2Int(substr($chunk['data'],  8, 4)) / 100000;
 444.159 +                    $info_png_chunk_type_text['red_y']   = getid3_lib::BigEndian2Int(substr($chunk['data'], 12, 4)) / 100000;
 444.160 +                    $info_png_chunk_type_text['green_y'] = getid3_lib::BigEndian2Int(substr($chunk['data'], 16, 4)) / 100000;
 444.161 +                    $info_png_chunk_type_text['green_y'] = getid3_lib::BigEndian2Int(substr($chunk['data'], 20, 4)) / 100000;
 444.162 +                    $info_png_chunk_type_text['blue_y']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 24, 4)) / 100000;
 444.163 +                    $info_png_chunk_type_text['blue_y']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 28, 4)) / 100000;
 444.164 +                    break;
 444.165 +
 444.166 +
 444.167 +                case 'sRGB': // Standard RGB Color Space
 444.168 +                    $info_png_chunk_type_text['header']                 = $chunk;
 444.169 +                    $info_png_chunk_type_text['reindering_intent']      = getid3_lib::BigEndian2Int($chunk['data']);
 444.170 +                    $info_png_chunk_type_text['reindering_intent_text'] = getid3_png::PNGsRGBintentLookup($info_png_chunk_type_text['reindering_intent']);
 444.171 +                    break;
 444.172 +
 444.173 +
 444.174 +                case 'iCCP': // Embedded ICC Profile
 444.175 +                    $info_png_chunk_type_text['header']                  = $chunk;
 444.176 +                    list($profilename, $compressiondata)                 = explode("\x00", $chunk['data'], 2);
 444.177 +                    $info_png_chunk_type_text['profile_name']            = $profilename;
 444.178 +                    $info_png_chunk_type_text['compression_method']      = getid3_lib::BigEndian2Int($compressiondata[0]);
 444.179 +                    $info_png_chunk_type_text['compression_profile']     = substr($compressiondata, 1);
 444.180 +                    $info_png_chunk_type_text['compression_method_text'] = getid3_png::PNGcompressionMethodLookup($info_png_chunk_type_text['compression_method']);
 444.181 +                    break;
 444.182 +
 444.183 +
 444.184 +                case 'tEXt': // Textual Data
 444.185 +                    $info_png_chunk_type_text['header']  = $chunk;
 444.186 +                    list($keyword, $text)                                = explode("\x00", $chunk['data'], 2);
 444.187 +                    $info_png_chunk_type_text['keyword'] = $keyword;
 444.188 +                    $info_png_chunk_type_text['text']    = $text;
 444.189 +
 444.190 +                    $info_png['comments'][$info_png_chunk_type_text['keyword']][] = $info_png_chunk_type_text['text'];
 444.191 +                    break;
 444.192 +
 444.193 +
 444.194 +                case 'zTXt': // Compressed Textual Data
 444.195 +                    $info_png_chunk_type_text['header']                  = $chunk;
 444.196 +                    list($keyword, $otherdata)                           = explode("\x00", $chunk['data'], 2);
 444.197 +                    $info_png_chunk_type_text['keyword']                 = $keyword;
 444.198 +                    $info_png_chunk_type_text['compression_method']      = getid3_lib::BigEndian2Int(substr($otherdata, 0, 1));
 444.199 +                    $info_png_chunk_type_text['compressed_text']         = substr($otherdata, 1);
 444.200 +                    $info_png_chunk_type_text['compression_method_text'] = getid3_png::PNGcompressionMethodLookup($info_png_chunk_type_text['compression_method']);
 444.201 +                    
 444.202 +                    if ($info_png_chunk_type_text['compression_method'] != 0) {
 444.203 +                        // unknown compression method
 444.204 +                        break;
 444.205 +                    }
 444.206 +                    
 444.207 +                    if (function_exists('gzuncompress')) {
 444.208 +                        $info_png_chunk_type_text['text']  = gzuncompress($info_png_chunk_type_text['compressed_text']);
 444.209 +                    }
 444.210 +                    else {
 444.211 +                        if (!@$this->zlib_warning) {
 444.212 +                            $getid3->warning('PHP does not have --with-zlib support - cannot gzuncompress()');
 444.213 +                        }
 444.214 +                        $this->zlib_warning = true;
 444.215 +                    }
 444.216 +                    
 444.217 +
 444.218 +                    if (isset($info_png_chunk_type_text['text'])) {
 444.219 +                        $info_png['comments'][$info_png_chunk_type_text['keyword']][] = $info_png_chunk_type_text['text'];
 444.220 +                    }
 444.221 +                    break;
 444.222 +
 444.223 +
 444.224 +                case 'iTXt': // International Textual Data
 444.225 +                    $info_png_chunk_type_text['header']                  = $chunk;
 444.226 +                    list($keyword, $otherdata)                           = explode("\x00", $chunk['data'], 2);
 444.227 +                    $info_png_chunk_type_text['keyword']                 = $keyword;
 444.228 +                    $info_png_chunk_type_text['compression']             = (bool)getid3_lib::BigEndian2Int(substr($otherdata, 0, 1));
 444.229 +                    $info_png_chunk_type_text['compression_method']      = getid3_lib::BigEndian2Int($otherdata[1]);
 444.230 +                    $info_png_chunk_type_text['compression_method_text'] = getid3_png::PNGcompressionMethodLookup($info_png_chunk_type_text['compression_method']);
 444.231 +                    list($languagetag, $translatedkeyword, $text)        = explode("\x00", substr($otherdata, 2), 3);
 444.232 +                    $info_png_chunk_type_text['language_tag']            = $languagetag;
 444.233 +                    $info_png_chunk_type_text['translated_keyword']      = $translatedkeyword;
 444.234 +
 444.235 +                    if ($info_png_chunk_type_text['compression']) {
 444.236 +
 444.237 +                        switch ($info_png_chunk_type_text['compression_method']) {
 444.238 +                            case 0:
 444.239 +                                if (function_exists('gzuncompress')) {
 444.240 +                                    $info_png_chunk_type_text['text'] = gzuncompress($text);
 444.241 +                                }
 444.242 +                                else {
 444.243 +                                    if (!@$this->zlib_warning) {
 444.244 +                                        $getid3->warning('PHP does not have --with-zlib support - cannot gzuncompress()');
 444.245 +                                    }
 444.246 +                                    $this->zlib_warning = true;
 444.247 +                                }
 444.248 +                                break;
 444.249 +
 444.250 +                            default:
 444.251 +                                // unknown compression method
 444.252 +                                break;
 444.253 +                        }
 444.254 +
 444.255 +                    } else {
 444.256 +
 444.257 +                        $info_png_chunk_type_text['text']                = $text;
 444.258 +
 444.259 +                    }
 444.260 +
 444.261 +                    if (isset($info_png_chunk_type_text['text'])) {
 444.262 +                        $info_png['comments'][$info_png_chunk_type_text['keyword']][] = $info_png_chunk_type_text['text'];
 444.263 +                    }
 444.264 +                    break;
 444.265 +
 444.266 +
 444.267 +                case 'bKGD': // Background Color
 444.268 +                    $info_png_chunk_type_text['header']                   = $chunk;
 444.269 +                    switch ($info_png['IHDR']['raw']['color_type']) {
 444.270 +                        case 0:
 444.271 +                        case 4:
 444.272 +                            $info_png_chunk_type_text['background_gray']  = getid3_lib::BigEndian2Int($chunk['data']);
 444.273 +                            break;
 444.274 +
 444.275 +                        case 2:
 444.276 +                        case 6:
 444.277 +                            $info_png_chunk_type_text['background_red']   = getid3_lib::BigEndian2Int(substr($chunk['data'], 0 * $info_png['IHDR']['raw']['bit_depth'], $info_png['IHDR']['raw']['bit_depth']));
 444.278 +                            $info_png_chunk_type_text['background_green'] = getid3_lib::BigEndian2Int(substr($chunk['data'], 1 * $info_png['IHDR']['raw']['bit_depth'], $info_png['IHDR']['raw']['bit_depth']));
 444.279 +                            $info_png_chunk_type_text['background_blue']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 2 * $info_png['IHDR']['raw']['bit_depth'], $info_png['IHDR']['raw']['bit_depth']));
 444.280 +                            break;
 444.281 +
 444.282 +                        case 3:
 444.283 +                            $info_png_chunk_type_text['background_index'] = getid3_lib::BigEndian2Int($chunk['data']);
 444.284 +                            break;
 444.285 +
 444.286 +                        default:
 444.287 +                            break;
 444.288 +                    }
 444.289 +                    break;
 444.290 +
 444.291 +
 444.292 +                case 'pHYs': // Physical Pixel Dimensions
 444.293 +                    $info_png_chunk_type_text['header']                 = $chunk;
 444.294 +                    $info_png_chunk_type_text['pixels_per_unit_x']      = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 4));
 444.295 +                    $info_png_chunk_type_text['pixels_per_unit_y']      = getid3_lib::BigEndian2Int(substr($chunk['data'], 4, 4));
 444.296 +                    $info_png_chunk_type_text['unit_specifier']         = getid3_lib::BigEndian2Int(substr($chunk['data'], 8, 1));
 444.297 +                    $info_png_chunk_type_text['unit']                   = getid3_png::PNGpHYsUnitLookup($info_png_chunk_type_text['unit_specifier']);
 444.298 +                    break;
 444.299 +
 444.300 +
 444.301 +                case 'sBIT': // Significant Bits
 444.302 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.303 +                    switch ($info_png['IHDR']['raw']['color_type']) {
 444.304 +                        case 0:
 444.305 +                            $info_png_chunk_type_text['significant_bits_gray']  = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 1));
 444.306 +                            break;
 444.307 +
 444.308 +                        case 2:
 444.309 +                        case 3:
 444.310 +                            $info_png_chunk_type_text['significant_bits_red']   = getid3_lib::BigEndian2Int($chunk['data'][0]);
 444.311 +                            $info_png_chunk_type_text['significant_bits_green'] = getid3_lib::BigEndian2Int($chunk['data'][1]);
 444.312 +                            $info_png_chunk_type_text['significant_bits_blue']  = getid3_lib::BigEndian2Int($chunk['data'][2]);
 444.313 +                            break;                                                                                                                     
 444.314 +                                                                                                                                                       
 444.315 +                        case 4:                                                                                                                        
 444.316 +                            $info_png_chunk_type_text['significant_bits_gray']  = getid3_lib::BigEndian2Int($chunk['data'][0]);
 444.317 +                            $info_png_chunk_type_text['significant_bits_alpha'] = getid3_lib::BigEndian2Int($chunk['data'][1]);
 444.318 +                            break;                                                                                                                     
 444.319 +                                                                                                                                                       
 444.320 +                        case 6:                                                                                                                        
 444.321 +                            $info_png_chunk_type_text['significant_bits_red']   = getid3_lib::BigEndian2Int($chunk['data'][0]);
 444.322 +                            $info_png_chunk_type_text['significant_bits_green'] = getid3_lib::BigEndian2Int($chunk['data'][1]);
 444.323 +                            $info_png_chunk_type_text['significant_bits_blue']  = getid3_lib::BigEndian2Int($chunk['data'][2]);
 444.324 +                            $info_png_chunk_type_text['significant_bits_alpha'] = getid3_lib::BigEndian2Int($chunk['data'][3]);
 444.325 +                            break;
 444.326 +
 444.327 +                        default:
 444.328 +                            break;
 444.329 +                    }
 444.330 +                    break;
 444.331 +
 444.332 +
 444.333 +                case 'sPLT': // Suggested Palette
 444.334 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.335 +                    
 444.336 +                    list($palettename, $otherdata) = explode("\x00", $chunk['data'], 2);
 444.337 +                    $info_png_chunk_type_text['palette_name'] = $palettename;
 444.338 +                    
 444.339 +                    $info_png_chunk_type_text['sample_depth_bits']  = getid3_lib::BigEndian2Int($otherdata[0]);
 444.340 +                    $info_png_chunk_type_text['sample_depth_bytes'] = $info_png_chunk_type_text['sample_depth_bits'] / 8;
 444.341 +                    
 444.342 +                    $s_plt_offset = 1;
 444.343 +                    $paletteCounter = 0;
 444.344 +                    while ($s_plt_offset < strlen($otherdata)) {
 444.345 +                        
 444.346 +                        $info_png_chunk_type_text['red'][$paletteCounter] = getid3_lib::BigEndian2Int(substr($otherdata, $s_plt_offset, $info_png_chunk_type_text['sample_depth_bytes']));
 444.347 +                        $s_plt_offset += $info_png_chunk_type_text['sample_depth_bytes'];
 444.348 +                        
 444.349 +                        $info_png_chunk_type_text['green'][$paletteCounter] = getid3_lib::BigEndian2Int(substr($otherdata, $s_plt_offset, $info_png_chunk_type_text['sample_depth_bytes']));
 444.350 +                        $s_plt_offset += $info_png_chunk_type_text['sample_depth_bytes'];
 444.351 +                        
 444.352 +                        $info_png_chunk_type_text['blue'][$paletteCounter] = getid3_lib::BigEndian2Int(substr($otherdata, $s_plt_offset, $info_png_chunk_type_text['sample_depth_bytes']));
 444.353 +                        $s_plt_offset += $info_png_chunk_type_text['sample_depth_bytes'];
 444.354 +                        
 444.355 +                        $info_png_chunk_type_text['alpha'][$paletteCounter] = getid3_lib::BigEndian2Int(substr($otherdata, $s_plt_offset, $info_png_chunk_type_text['sample_depth_bytes']));
 444.356 +                        $s_plt_offset += $info_png_chunk_type_text['sample_depth_bytes'];
 444.357 +                        
 444.358 +                        $info_png_chunk_type_text['frequency'][$paletteCounter] = getid3_lib::BigEndian2Int(substr($otherdata, $s_plt_offset, 2));
 444.359 +                        $s_plt_offset += 2;
 444.360 +                        
 444.361 +                        $paletteCounter++;
 444.362 +                    }
 444.363 +                    break;
 444.364 +
 444.365 +
 444.366 +                case 'hIST': // Palette Histogram
 444.367 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.368 +                    $h_ist_counter = 0;
 444.369 +                    while ($h_ist_counter < strlen($chunk['data'])) {
 444.370 +                        $info_png_chunk_type_text[$h_ist_counter] = getid3_lib::BigEndian2Int(substr($chunk['data'], $h_ist_counter / 2, 2));
 444.371 +                        $h_ist_counter += 2;
 444.372 +                    }
 444.373 +                    break;
 444.374 +
 444.375 +
 444.376 +                case 'tIME': // Image Last-Modification Time
 444.377 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.378 +                    $info_png_chunk_type_text['year']   = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 2));
 444.379 +                    $info_png_chunk_type_text['month']  = getid3_lib::BigEndian2Int($chunk['data']{2});
 444.380 +                    $info_png_chunk_type_text['day']    = getid3_lib::BigEndian2Int($chunk['data']{3});
 444.381 +                    $info_png_chunk_type_text['hour']   = getid3_lib::BigEndian2Int($chunk['data']{4});
 444.382 +                    $info_png_chunk_type_text['minute'] = getid3_lib::BigEndian2Int($chunk['data']{5});
 444.383 +                    $info_png_chunk_type_text['second'] = getid3_lib::BigEndian2Int($chunk['data']{6});
 444.384 +                    $info_png_chunk_type_text['unix']   = gmmktime($info_png_chunk_type_text['hour'], $info_png_chunk_type_text['minute'], $info_png_chunk_type_text['second'], $info_png_chunk_type_text['month'], $info_png_chunk_type_text['day'], $info_png_chunk_type_text['year']);
 444.385 +                    break;
 444.386 +
 444.387 +
 444.388 +                case 'oFFs': // Image Offset
 444.389 +                    $info_png_chunk_type_text['header']         = $chunk;
 444.390 +                    $info_png_chunk_type_text['position_x']     = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 4), false, true);
 444.391 +                    $info_png_chunk_type_text['position_y']     = getid3_lib::BigEndian2Int(substr($chunk['data'], 4, 4), false, true);
 444.392 +                    $info_png_chunk_type_text['unit_specifier'] = getid3_lib::BigEndian2Int($chunk['data'][8]);
 444.393 +                    $info_png_chunk_type_text['unit']           = getid3_png::PNGoFFsUnitLookup($info_png_chunk_type_text['unit_specifier']);
 444.394 +                    break;
 444.395 +
 444.396 +
 444.397 +                case 'pCAL': // Calibration Of Pixel Values
 444.398 +                    $info_png_chunk_type_text['header']             = $chunk;
 444.399 +                    list($calibrationname, $otherdata)              = explode("\x00", $chunk['data'], 2);
 444.400 +                    $info_png_chunk_type_text['calibration_name']   = $calibrationname;
 444.401 +                    $info_png_chunk_type_text['original_zero']      = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 4), false, true);
 444.402 +                    $info_png_chunk_type_text['original_max']       = getid3_lib::BigEndian2Int(substr($chunk['data'], 4, 4), false, true);
 444.403 +                    $info_png_chunk_type_text['equation_type']      = getid3_lib::BigEndian2Int($chunk['data'][8]);
 444.404 +                    $info_png_chunk_type_text['equation_type_text'] = getid3_png::PNGpCALequationTypeLookup($info_png_chunk_type_text['equation_type']);
 444.405 +                    $info_png_chunk_type_text['parameter_count']    = getid3_lib::BigEndian2Int($chunk['data'][9]);
 444.406 +                    $info_png_chunk_type_text['parameters']         = explode("\x00", substr($chunk['data'], 10));
 444.407 +                    break;
 444.408 +
 444.409 +
 444.410 +                case 'sCAL': // Physical Scale Of Image Subject
 444.411 +                    $info_png_chunk_type_text['header']         = $chunk;
 444.412 +                    $info_png_chunk_type_text['unit_specifier'] = getid3_lib::BigEndian2Int(substr($chunk['data'], 0, 1));
 444.413 +                    $info_png_chunk_type_text['unit']           = getid3_png::PNGsCALUnitLookup($info_png_chunk_type_text['unit_specifier']);
 444.414 +                    list($info_png_chunk_type_text['pixel_width'], $info_png_chunk_type_text['pixel_height']) = explode("\x00", substr($chunk['data'], 1));
 444.415 +                    break;
 444.416 +
 444.417 +
 444.418 +                case 'gIFg': // GIF Graphic Control Extension
 444.419 +                    $gIFg_counter = 0;
 444.420 +                    if (isset($info_png_chunk_type_text) && is_array($info_png_chunk_type_text)) {
 444.421 +                        $gIFg_counter = count($info_png_chunk_type_text);
 444.422 +                    }
 444.423 +                    $info_png_chunk_type_text[$gIFg_counter]['header']          = $chunk;
 444.424 +                    $info_png_chunk_type_text[$gIFg_counter]['disposal_method'] = getid3_lib::BigEndian2Int($chunk['data'][0]);
 444.425 +                    $info_png_chunk_type_text[$gIFg_counter]['user_input_flag'] = getid3_lib::BigEndian2Int($chunk['data'][1]);
 444.426 +                    $info_png_chunk_type_text[$gIFg_counter]['delay_time']      = getid3_lib::BigEndian2Int($chunk['data'][2]);
 444.427 +                    break;
 444.428 +
 444.429 +
 444.430 +                case 'gIFx': // GIF Application Extension
 444.431 +                    $gIFx_counter = 0;
 444.432 +                    if (isset($info_png_chunk_type_text) && is_array($info_png_chunk_type_text)) {
 444.433 +                        $gIFx_counter = count($info_png_chunk_type_text);
 444.434 +                    }
 444.435 +                    $info_png_chunk_type_text[$gIFx_counter]['header']                 = $chunk;
 444.436 +                    $info_png_chunk_type_text[$gIFx_counter]['application_identifier'] = substr($chunk['data'],  0, 8);
 444.437 +                    $info_png_chunk_type_text[$gIFx_counter]['authentication_code']    = substr($chunk['data'],  8, 3);
 444.438 +                    $info_png_chunk_type_text[$gIFx_counter]['application_data']       = substr($chunk['data'], 11);
 444.439 +                    break;
 444.440 +
 444.441 +
 444.442 +                case 'IDAT': // Image Data
 444.443 +                    $idat_information_field_index = 0;
 444.444 +                    if (isset($info_png['IDAT']) && is_array($info_png['IDAT'])) {
 444.445 +                        $idat_information_field_index = count($info_png['IDAT']);
 444.446 +                    }
 444.447 +                    unset($chunk['data']);
 444.448 +                    $info_png_chunk_type_text[$idat_information_field_index]['header'] = $chunk;
 444.449 +                    break;
 444.450 +
 444.451 +
 444.452 +                case 'IEND': // Image Trailer
 444.453 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.454 +                    break;
 444.455 +
 444.456 +
 444.457 +                default:
 444.458 +                    $info_png_chunk_type_text['header'] = $chunk;
 444.459 +                    $getid3->warning('Unhandled chunk type: '.$chunk['type_text']);
 444.460 +                    break;
 444.461 +            }
 444.462 +        }
 444.463 +
 444.464 +        return true;
 444.465 +    }
 444.466 +
 444.467 +
 444.468 +
 444.469 +    public static function PNGsRGBintentLookup($sRGB) {
 444.470 +        
 444.471 +        static $lookup = array (
 444.472 +            0 => 'Perceptual',
 444.473 +            1 => 'Relative colorimetric',
 444.474 +            2 => 'Saturation',
 444.475 +            3 => 'Absolute colorimetric'
 444.476 +        );
 444.477 +        return (isset($lookup[$sRGB]) ? $lookup[$sRGB] : 'invalid');
 444.478 +    }
 444.479 +
 444.480 +
 444.481 +
 444.482 +    public static function PNGcompressionMethodLookup($compression_method) {
 444.483 +    
 444.484 +        return ($compression_method == 0 ?  'deflate/inflate' : 'invalid');
 444.485 +    }
 444.486 +
 444.487 +    
 444.488 +    
 444.489 +    public static function PNGpHYsUnitLookup($unit_id) {
 444.490 +    
 444.491 +        static $lookup = array (
 444.492 +            0 => 'unknown',
 444.493 +            1 => 'meter'
 444.494 +        );
 444.495 +        return (isset($lookup[$unit_id]) ? $lookup[$unit_id] : 'invalid');
 444.496 +    }
 444.497 +
 444.498 +    
 444.499 +    
 444.500 +    public static function PNGoFFsUnitLookup($unit_id) {
 444.501 +    
 444.502 +        static $lookup = array (
 444.503 +            0 => 'pixel',
 444.504 +            1 => 'micrometer'
 444.505 +        );
 444.506 +        return (isset($lookup[$unit_id]) ? $lookup[$unit_id] : 'invalid');
 444.507 +    }
 444.508 +
 444.509 +    
 444.510 +    
 444.511 +    public static function PNGpCALequationTypeLookup($equation_type) {
 444.512 +        
 444.513 +        static $lookup = array (
 444.514 +            0 => 'Linear mapping',
 444.515 +            1 => 'Base-e exponential mapping',
 444.516 +            2 => 'Arbitrary-base exponential mapping',
 444.517 +            3 => 'Hyperbolic mapping'
 444.518 +        );
 444.519 +        return (isset($lookup[$equation_type]) ? $lookup[$equation_type] : 'invalid');
 444.520 +    }
 444.521 +
 444.522 +
 444.523 +
 444.524 +    public static function PNGsCALUnitLookup($unit_id) {
 444.525 +
 444.526 +        static $lookup = array (
 444.527 +            0 => 'meter',
 444.528 +            1 => 'radian'
 444.529 +        );
 444.530 +        return (isset($lookup[$unit_id]) ? $lookup[$unit_id] : 'invalid');
 444.531 +    }
 444.532 +
 444.533 +    
 444.534 +    
 444.535 +    public static function IHDRcalculateBitsPerSample($color_type, $bit_depth) {
 444.536 +    
 444.537 +        switch ($color_type) {
 444.538 +            case 0: // Each pixel is a grayscale sample.
 444.539 +                return $bit_depth;
 444.540 +
 444.541 +            case 2: // Each pixel is an R,G,B triple
 444.542 +                return 3 * $bit_depth;
 444.543 +
 444.544 +            case 3: // Each pixel is a palette index; a PLTE chunk must appear.
 444.545 +                return $bit_depth;
 444.546 +
 444.547 +            case 4: // Each pixel is a grayscale sample, followed by an alpha sample.
 444.548 +                return 2 * $bit_depth;
 444.549 +
 444.550 +            case 6: // Each pixel is an R,G,B triple, followed by an alpha sample.
 444.551 +                return 4 * $bit_depth;
 444.552 +        }
 444.553 +        return false;
 444.554 +    }
 444.555 +
 444.556 +}
 444.557 +
 444.558 +
 444.559 +?>
 444.560 \ No newline at end of file
   445.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   445.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.graphic.tiff.php	Mon Feb 22 08:02:39 2010 -0500
   445.3 @@ -0,0 +1,215 @@
   445.4 +<?php
   445.5 +// +----------------------------------------------------------------------+
   445.6 +// | PHP version 5                                                        |
   445.7 +// +----------------------------------------------------------------------+
   445.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   445.9 +// +----------------------------------------------------------------------+
  445.10 +// | This source file is subject to version 2 of the GPL license,         |
  445.11 +// | that is bundled with this package in the file license.txt and is     |
  445.12 +// | available through the world-wide-web at the following url:           |
  445.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  445.14 +// +----------------------------------------------------------------------+
  445.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  445.16 +// +----------------------------------------------------------------------+
  445.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  445.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  445.19 +// +----------------------------------------------------------------------+
  445.20 +// | module.graphic.tiff.php                                              |
  445.21 +// | Module for analyzing TIFF graphic files.                             |
  445.22 +// | dependencies: NONE                                                   |
  445.23 +// +----------------------------------------------------------------------+
  445.24 +//
  445.25 +// $Id: module.graphic.tiff.php,v 1.2 2006/11/02 10:48:02 ah Exp $
  445.26 +
  445.27 +        
  445.28 +        
  445.29 +class getid3_tiff extends getid3_handler
  445.30 +{
  445.31 +
  445.32 +    public function Analyze() {
  445.33 +        
  445.34 +        $getid3 = $this->getid3;
  445.35 +
  445.36 +        fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
  445.37 +        $tiff_header = fread($getid3->fp, 4);
  445.38 +
  445.39 +        $getid3->info['tiff']['byte_order'] = substr($tiff_header, 0, 2) == 'II' ? 'Intel' : 'Motorola';
  445.40 +        $endian2int = substr($tiff_header, 0, 2) == 'II' ? 'LittleEndian2Int' : 'BigEndian2Int';
  445.41 +                
  445.42 +        $getid3->info['fileformat']          = 'tiff';
  445.43 +        $getid3->info['video']['dataformat'] = 'tiff';
  445.44 +        $getid3->info['video']['lossless']   = true;
  445.45 +        $getid3->info['tiff']['ifd']         = array ();
  445.46 +        $current_ifd                         = array ();
  445.47 +
  445.48 +        $field_type_byte_length = array (1=>1, 2=>1, 3=>2, 4=>4, 5=>8);
  445.49 +
  445.50 +        $next_ifd_offset = getid3_lib::$endian2int(fread($getid3->fp, 4));
  445.51 +
  445.52 +        while ($next_ifd_offset > 0) {
  445.53 +
  445.54 +            $current_ifd['offset'] = $next_ifd_offset;
  445.55 +
  445.56 +            fseek($getid3->fp, $getid3->info['avdataoffset'] + $next_ifd_offset, SEEK_SET);
  445.57 +            $current_ifd['fieldcount'] = getid3_lib::$endian2int(fread($getid3->fp, 2));
  445.58 +
  445.59 +            for ($i = 0; $i < $current_ifd['fieldcount']; $i++) {
  445.60 +                
  445.61 +                // shortcut
  445.62 +                $current_ifd['fields'][$i] = array ();
  445.63 +                $current_ifd_fields_i = &$current_ifd['fields'][$i];
  445.64 +                
  445.65 +                $current_ifd_fields_i['raw']['tag']    = getid3_lib::$endian2int(fread($getid3->fp, 2));
  445.66 +                $current_ifd_fields_i['raw']['type']   = getid3_lib::$endian2int(fread($getid3->fp, 2));
  445.67 +                $current_ifd_fields_i['raw']['length'] = getid3_lib::$endian2int(fread($getid3->fp, 4));
  445.68 +                $current_ifd_fields_i['raw']['offset'] = fread($getid3->fp, 4);
  445.69 +
  445.70 +                switch ($current_ifd_fields_i['raw']['type']) {
  445.71 +                    case 1: // BYTE  An 8-bit unsigned integer.
  445.72 +                        if ($current_ifd_fields_i['raw']['length'] <= 4) {
  445.73 +                            $current_ifd_fields_i['value']  = getid3_lib::$endian2int(substr($current_ifd_fields_i['raw']['offset'], 0, 1));
  445.74 +                        } else {
  445.75 +                            $current_ifd_fields_i['offset'] = getid3_lib::$endian2int($current_ifd_fields_i['raw']['offset']);
  445.76 +                        }
  445.77 +                        break;
  445.78 +
  445.79 +                    case 2: // ASCII 8-bit bytes  that store ASCII codes; the last byte must be null.
  445.80 +                        if ($current_ifd_fields_i['raw']['length'] <= 4) {
  445.81 +                            $current_ifd_fields_i['value']  = substr($current_ifd_fields_i['raw']['offset'], 3);
  445.82 +                        } else {
  445.83 +                            $current_ifd_fields_i['offset'] = getid3_lib::$endian2int($current_ifd_fields_i['raw']['offset']);
  445.84 +                        }
  445.85 +                        break;
  445.86 +
  445.87 +                    case 3: // SHORT A 16-bit (2-byte) unsigned integer.
  445.88 +                        if ($current_ifd_fields_i['raw']['length'] <= 2) {
  445.89 +                            $current_ifd_fields_i['value']  = getid3_lib::$endian2int(substr($current_ifd_fields_i['raw']['offset'], 0, 2));
  445.90 +                        } else {
  445.91 +                            $current_ifd_fields_i['offset'] = getid3_lib::$endian2int($current_ifd_fields_i['raw']['offset']);
  445.92 +                        }
  445.93 +                        break;
  445.94 +
  445.95 +                    case 4: // LONG  A 32-bit (4-byte) unsigned integer.
  445.96 +                        if ($current_ifd_fields_i['raw']['length'] <= 1) {
  445.97 +                            $current_ifd_fields_i['value']  = getid3_lib::$endian2int($current_ifd_fields_i['raw']['offset']);
  445.98 +                        } else {
  445.99 +                            $current_ifd_fields_i['offset'] = getid3_lib::$endian2int($current_ifd_fields_i['raw']['offset']);
 445.100 +                        }
 445.101 +                        break;
 445.102 +
 445.103 +                    case 5: // RATIONAL   Two LONG_s:  the first represents the numerator of a fraction, the second the denominator.
 445.104 +                        break;
 445.105 +                }
 445.106 +            }
 445.107 +
 445.108 +            $getid3->info['tiff']['ifd'][] = $current_ifd;
 445.109 +            $current_ifd = array ();
 445.110 +            $next_ifd_offset = getid3_lib::$endian2int(fread($getid3->fp, 4));
 445.111 +
 445.112 +        }
 445.113 +
 445.114 +        foreach ($getid3->info['tiff']['ifd'] as $ifd_id => $ifd_array) {
 445.115 +            foreach ($ifd_array['fields'] as $key => $field_array) {
 445.116 +                switch ($field_array['raw']['tag']) {
 445.117 +                    case 256: // ImageWidth
 445.118 +                    case 257: // ImageLength
 445.119 +                    case 258: // BitsPerSample
 445.120 +                    case 259: // Compression
 445.121 +                        if (!isset($field_array['value'])) {
 445.122 +                            fseek($getid3->fp, $field_array['offset'], SEEK_SET);
 445.123 +                            $getid3->info['tiff']['ifd'][$ifd_id]['fields'][$key]['raw']['data'] = fread($getid3->fp, $field_array['raw']['length'] * $field_type_byte_length[$field_array['raw']['type']]);
 445.124 +                        }
 445.125 +                        break;
 445.126 +
 445.127 +                    case 270: // ImageDescription
 445.128 +                    case 271: // Make
 445.129 +                    case 272: // Model
 445.130 +                    case 305: // Software
 445.131 +                    case 306: // DateTime
 445.132 +                    case 315: // Artist
 445.133 +                    case 316: // HostComputer
 445.134 +                        if (isset($field_array['value'])) {
 445.135 +                            $getid3->info['tiff']['ifd'][$ifd_id]['fields'][$key]['raw']['data'] = $field_array['value'];
 445.136 +                        } else {
 445.137 +                            fseek($getid3->fp, $field_array['offset'], SEEK_SET);
 445.138 +                            $getid3->info['tiff']['ifd'][$ifd_id]['fields'][$key]['raw']['data'] = fread($getid3->fp, $field_array['raw']['length'] * $field_type_byte_length[$field_array['raw']['type']]);
 445.139 +                        }
 445.140 +                        break;
 445.141 +                }
 445.142 +                switch ($field_array['raw']['tag']) {
 445.143 +                    case 256: // ImageWidth
 445.144 +                        $getid3->info['video']['resolution_x'] = $field_array['value'];
 445.145 +                        break;
 445.146 +
 445.147 +                    case 257: // ImageLength
 445.148 +                        $getid3->info['video']['resolution_y'] = $field_array['value'];
 445.149 +                        break;
 445.150 +
 445.151 +                    case 258: // BitsPerSample
 445.152 +                        if (isset($field_array['value'])) {
 445.153 +                            $getid3->info['video']['bits_per_sample'] = $field_array['value'];
 445.154 +                        } else {
 445.155 +                            $getid3->info['video']['bits_per_sample'] = 0;
 445.156 +                            for ($i = 0; $i < $field_array['raw']['length']; $i++) {
 445.157 +                                $getid3->info['video']['bits_per_sample'] += getid3_lib::$endian2int(substr($getid3->info['tiff']['ifd'][$ifd_id]['fields'][$key]['raw']['data'], $i * $field_type_byte_length[$field_array['raw']['type']], $field_type_byte_length[$field_array['raw']['type']]));
 445.158 +                            }
 445.159 +                        }
 445.160 +                        break;
 445.161 +
 445.162 +                    case 259: // Compression
 445.163 +                        $getid3->info['video']['codec'] = getid3_tiff::TIFFcompressionMethod($field_array['value']);
 445.164 +                        break;
 445.165 +
 445.166 +                    case 270: // ImageDescription
 445.167 +                    case 271: // Make
 445.168 +                    case 272: // Model
 445.169 +                    case 305: // Software
 445.170 +                    case 306: // DateTime
 445.171 +                    case 315: // Artist
 445.172 +                    case 316: // HostComputer
 445.173 +                        @$getid3->info['tiff']['comments'][getid3_tiff::TIFFcommentName($field_array['raw']['tag'])][] = $getid3->info['tiff']['ifd'][$ifd_id]['fields'][$key]['raw']['data'];
 445.174 +                        break;
 445.175 +
 445.176 +                    default:
 445.177 +                        break;
 445.178 +                }
 445.179 +            }
 445.180 +        }
 445.181 +
 445.182 +        return true;
 445.183 +    }
 445.184 +
 445.185 +
 445.186 +
 445.187 +    public static function TIFFcompressionMethod($id) {
 445.188 +        
 445.189 +        static $lookup = array (
 445.190 +            1     => 'Uncompressed',
 445.191 +            2     => 'Huffman',
 445.192 +            3     => 'Fax - CCITT 3',
 445.193 +            5     => 'LZW',
 445.194 +            32773 => 'PackBits',
 445.195 +        );
 445.196 +        return (isset($lookup[$id]) ? $lookup[$id] : 'unknown/invalid ('.$id.')');
 445.197 +    }
 445.198 +
 445.199 +
 445.200 +
 445.201 +    public static function TIFFcommentName($id) {
 445.202 +        
 445.203 +        static $lookup = array (
 445.204 +            270 => 'imagedescription',
 445.205 +            271 => 'make',
 445.206 +            272 => 'model',
 445.207 +            305 => 'software',
 445.208 +            306 => 'datetime',
 445.209 +            315 => 'artist',
 445.210 +            316 => 'hostcomputer',
 445.211 +        );
 445.212 +        return (isset($lookup[$id]) ? $lookup[$id] : 'unknown/invalid ('.$id.')');
 445.213 +    }
 445.214 +
 445.215 +}
 445.216 +
 445.217 +
 445.218 +?>
 445.219 \ No newline at end of file
   446.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   446.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.data_hash.php	Mon Feb 22 08:02:39 2010 -0500
   446.3 @@ -0,0 +1,196 @@
   446.4 +<?php
   446.5 +// +----------------------------------------------------------------------+
   446.6 +// | PHP version 5                                                        |
   446.7 +// +----------------------------------------------------------------------+
   446.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   446.9 +// +----------------------------------------------------------------------+
  446.10 +// | This source file is subject to version 2 of the GPL license,         |
  446.11 +// | that is bundled with this package in the file license.txt and is     |
  446.12 +// | available through the world-wide-web at the following url:           |
  446.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  446.14 +// +----------------------------------------------------------------------+
  446.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  446.16 +// +----------------------------------------------------------------------+
  446.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  446.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  446.19 +// +----------------------------------------------------------------------+
  446.20 +// | module.lib.data-hash.php                                             |
  446.21 +// | getID3() library file.                                               |
  446.22 +// | dependencies: NONE.                                                  |
  446.23 +// +----------------------------------------------------------------------+
  446.24 +//
  446.25 +// $Id: module.lib.data_hash.php,v 1.5 2006/12/03 19:28:18 ah Exp $
  446.26 +
  446.27 +
  446.28 +
  446.29 +class getid3_lib_data_hash
  446.30 +{
  446.31 +    
  446.32 +    private $getid3;
  446.33 +    
  446.34 +    
  446.35 +    // constructer - calculate md5/sha1 data
  446.36 +    public function __construct(getID3 $getid3, $algorithm) {
  446.37 +    
  446.38 +        $this->getid3 = $getid3;
  446.39 +        
  446.40 +        // Check algorithm
  446.41 +        if (!preg_match('/^(md5|sha1)$/', $algorithm)) {
  446.42 +            throw new getid3_exception('Unsupported algorithm, "'.$algorithm.'", in GetHashdata()');
  446.43 +        }
  446.44 +        
  446.45 +        
  446.46 +        //// Handle ogg vorbis files
  446.47 +        
  446.48 +        if ((@$getid3->info['fileformat'] == 'ogg') && (@$getid3->info['audio']['dataformat'] == 'vorbis')) {
  446.49 +
  446.50 +            // We cannot get an identical md5_data value for Ogg files where the comments
  446.51 +            // span more than 1 Ogg page (compared to the same audio data with smaller
  446.52 +            // comments) using the normal getID3() method of MD5'ing the data between the
  446.53 +            // end of the comments and the end of the file (minus any trailing tags),
  446.54 +            // because the page sequence numbers of the pages that the audio data is on
  446.55 +            // do not match. Under normal circumstances, where comments are smaller than
  446.56 +            // the nominal 4-8kB page size, then this is not a problem, but if there are
  446.57 +            // very large comments, the only way around it is to strip off the comment
  446.58 +            // tags with vorbiscomment and MD5 that file.
  446.59 +            // This procedure must be applied to ALL Ogg files, not just the ones with
  446.60 +            // comments larger than 1 page, because the below method simply MD5's the
  446.61 +            // whole file with the comments stripped, not just the portion after the
  446.62 +            // comments block (which is the standard getID3() method.
  446.63 +
  446.64 +            // The above-mentioned problem of comments spanning multiple pages and changing
  446.65 +            // page sequence numbers likely happens for OggSpeex and OggFLAC as well, but
  446.66 +            // currently vorbiscomment only works on OggVorbis files.
  446.67 +
  446.68 +            if ((bool)ini_get('safe_mode')) {
  446.69 +                throw new getid3_exception('PHP running in Safe Mode - cannot make system call to vorbiscomment[.exe]  needed for '.$algorithm.'_data.');
  446.70 +            }
  446.71 +        
  446.72 +            if (!preg_match('/^Vorbiscomment /', `vorbiscomment --version 2>&1`)) {
  446.73 +                throw new getid3_exception('vorbiscomment[.exe] binary not found in path. UNIX: typically /usr/bin. Windows: typically c:\windows\system32.');
  446.74 +            }
  446.75 +        
  446.76 +            // Prevent user from aborting script
  446.77 +            $old_abort = ignore_user_abort(true);
  446.78 +
  446.79 +            // Create empty file
  446.80 +            $empty = tempnam('*', 'getID3');
  446.81 +            touch($empty);
  446.82 +
  446.83 +            // Use vorbiscomment to make temp file without comments
  446.84 +            $temp = tempnam('*', 'getID3');
  446.85 +            
  446.86 +            $command_line = 'vorbiscomment -w -c '.escapeshellarg($empty).' '.escapeshellarg(realpath($getid3->filename)).' '.escapeshellarg($temp).' 2>&1';
  446.87 +
  446.88 +            // Error from vorbiscomment
  446.89 +            if ($vorbis_comment_error = `$command_line`) {
  446.90 +                throw new getid3_exception('System call to vorbiscomment[.exe] failed.');
  446.91 +            } 
  446.92 +
  446.93 +            // Get hash of newly created file
  446.94 +            $hash_function = $algorithm . '_file';
  446.95 +            $getid3->info[$algorithm.'_data'] = $hash_function($temp);
  446.96 +
  446.97 +            // Clean up
  446.98 +            unlink($empty);
  446.99 +            unlink($temp);
 446.100 +
 446.101 +            // Reset abort setting
 446.102 +            ignore_user_abort($old_abort);
 446.103 +            
 446.104 +            // Return success
 446.105 +            return true;
 446.106 +        }
 446.107 +
 446.108 +        //// Handle other file formats
 446.109 +        
 446.110 +        // Get hash from part of file
 446.111 +        if (@$getid3->info['avdataoffset'] || (@$getid3->info['avdataend']  &&  @$getid3->info['avdataend'] < $getid3->info['filesize'])) {
 446.112 +            
 446.113 +            if ((bool)ini_get('safe_mode')) {
 446.114 +                $getid3->warning('PHP running in Safe Mode - backtick operator not available, using slower non-system-call '.$algorithm.' algorithm.');
 446.115 +                $hash_function = 'hash_file_partial_safe_mode';
 446.116 +            }
 446.117 +            else {
 446.118 +                $hash_function = 'hash_file_partial';
 446.119 +            }
 446.120 +            
 446.121 +            $getid3->info[$algorithm.'_data'] = $this->$hash_function($getid3->filename, $getid3->info['avdataoffset'], $getid3->info['avdataend'], $algorithm);
 446.122 +        } 
 446.123 +    
 446.124 +        // Get hash from whole file - use built-in md5_file() and sha1_file()
 446.125 +        else {
 446.126 +            $hash_function = $algorithm . '_file';
 446.127 +            $getid3->info[$algorithm.'_data'] = $hash_function($getid3->filename);
 446.128 +        }
 446.129 +    }
 446.130 +    
 446.131 +    
 446.132 +    
 446.133 +    // Return md5/sha1sum for a file from starting position to absolute end position
 446.134 +    // Using windows system call
 446.135 +    private function hash_file_partial($file, $offset, $end, $algorithm) {
 446.136 +        
 446.137 +        // It seems that sha1sum.exe for Windows only works on physical files, does not accept piped data
 446.138 +        // Fall back to create-temp-file method:
 446.139 +        if ($algorithm == 'sha1'  &&  strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
 446.140 +            return $this->hash_file_partial_safe_mode($file, $offset, $end, $algorithm);
 446.141 +        }
 446.142 +        
 446.143 +        // Check for presence of binaries and revert to safe mode if not found
 446.144 +        if (!`head --version`) {
 446.145 +            return $this->hash_file_partial_safe_mode($file, $offset, $end, $algorithm);
 446.146 +        }
 446.147 +        
 446.148 +        if (!`tail --version`) {
 446.149 +            return $this->hash_file_partial_safe_mode($file, $offset, $end, $algorithm);
 446.150 +        }
 446.151 +        
 446.152 +        if (!`${algorithm}sum --version`) {
 446.153 +            return $this->hash_file_partial_safe_mode($file, $offset, $end, $algorithm);
 446.154 +        }   
 446.155 +        
 446.156 +        $size = $end - $offset;
 446.157 +        $command_line  = 'head -c'.$end.' '.escapeshellarg(realpath($file)).' | tail -c'.$size.' | '.$algorithm.'sum';
 446.158 +        return substr(`$command_line`, 0, $algorithm == 'md5' ? 32 : 40);
 446.159 +    }
 446.160 +    
 446.161 +    
 446.162 +
 446.163 +    // Return md5/sha1sum for a file from starting position to absolute end position
 446.164 +    // Using slow safe_mode temp file
 446.165 +    private function hash_file_partial_safe_mode($file, $offset, $end, $algorithm) {        
 446.166 +
 446.167 +        // Attempt to create a temporary file in the system temp directory - invalid dirname should force to system temp dir
 446.168 +        if (($data_filename = tempnam('*', 'getID3')) === false) {
 446.169 +            throw new getid3_exception('Unable to create temporary file.');
 446.170 +        }
 446.171 +
 446.172 +        // Init
 446.173 +        $result = false;
 446.174 +
 446.175 +        // Copy parts of file
 446.176 +        if ($fp = @fopen($file, 'rb')) {
 446.177 +
 446.178 +            if ($fp_data = @fopen($data_filename, 'wb')) {
 446.179 +
 446.180 +                fseek($fp, $offset, SEEK_SET);
 446.181 +                $bytes_left_to_write = $end - $offset;
 446.182 +                while (($bytes_left_to_write > 0) && ($buffer = fread($fp, getid3::FREAD_BUFFER_SIZE))) {
 446.183 +                    $bytes_written = fwrite($fp_data, $buffer, $bytes_left_to_write);
 446.184 +                    $bytes_left_to_write -= $bytes_written;
 446.185 +                }
 446.186 +                fclose($fp_data);
 446.187 +                $hash_function = $algorithm . '_file';
 446.188 +                $result = $hash_function($data_filename);
 446.189 +
 446.190 +            }
 446.191 +            fclose($fp);
 446.192 +        }
 446.193 +        unlink($data_filename);
 446.194 +        return $result;
 446.195 +    }
 446.196 +
 446.197 +}
 446.198 +
 446.199 +?>
 446.200 \ No newline at end of file
   447.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   447.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.iconv_replacement.php	Mon Feb 22 08:02:39 2010 -0500
   447.3 @@ -0,0 +1,415 @@
   447.4 +<?php
   447.5 +// +----------------------------------------------------------------------+
   447.6 +// | PHP version 5                                                        |
   447.7 +// +----------------------------------------------------------------------+
   447.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   447.9 +// +----------------------------------------------------------------------+
  447.10 +// | This source file is subject to version 2 of the GPL license,         |
  447.11 +// | that is bundled with this package in the file license.txt and is     |
  447.12 +// | available through the world-wide-web at the following url:           |
  447.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  447.14 +// +----------------------------------------------------------------------+
  447.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  447.16 +// +----------------------------------------------------------------------+
  447.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  447.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  447.19 +// +----------------------------------------------------------------------+
  447.20 +// | module.lib.iconv_replacement.php                                     |
  447.21 +// | getID3() library file.                                               |
  447.22 +// | dependencies: NONE, required by getid3.php if no iconv() present.    |
  447.23 +// +----------------------------------------------------------------------+
  447.24 +//
  447.25 +// $Id: module.lib.iconv_replacement.php,v 1.4 2006/11/02 10:48:02 ah Exp $
  447.26 +
  447.27 +
  447.28 +class getid3_iconv_replacement
  447.29 +{
  447.30 +
  447.31 +    public static function iconv($in_charset, $out_charset, $string) {
  447.32 +
  447.33 +        if ($in_charset == $out_charset) {
  447.34 +            return $string;
  447.35 +        }
  447.36 +        
  447.37 +        static $supported_charsets = array (
  447.38 +            'ISO-8859-1'    => 'iso88591', 
  447.39 +            'UTF-8'         => 'utf8',
  447.40 +            'UTF-16BE'      => 'utf16be', 
  447.41 +            'UTF-16LE'      => 'utf16le', 
  447.42 +            'UTF-16'        => 'utf16'
  447.43 +        );
  447.44 +
  447.45 +        // Convert
  447.46 +        $function_name = 'iconv_' . @$supported_charsets[$in_charset] . '_' . @$supported_charsets[$out_charset];
  447.47 +        
  447.48 +        if (is_callable(array('getid3_iconv_replacement', $function_name))) {
  447.49 +            return getid3_iconv_replacement::$function_name($string);
  447.50 +        }
  447.51 +        
  447.52 +        // Invalid charset used
  447.53 +        if (!@$supported_charsets[$in_charset]) {
  447.54 +            throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $in_charset . ' charset.');
  447.55 +        }
  447.56 +        
  447.57 +        if (!@$supported_charsets[$out_charset]) {
  447.58 +            throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $out_charset . ' charset.');
  447.59 +        }
  447.60 +    }
  447.61 +
  447.62 +
  447.63 +
  447.64 +    public static function iconv_int_utf8($charval) {
  447.65 +        if ($charval < 128) {
  447.66 +            // 0bbbbbbb
  447.67 +            $newcharstring = chr($charval);
  447.68 +        } elseif ($charval < 2048) {
  447.69 +            // 110bbbbb 10bbbbbb
  447.70 +            $newcharstring  = chr(($charval >> 6) | 0xC0);
  447.71 +            $newcharstring .= chr(($charval & 0x3F) | 0x80);
  447.72 +        } elseif ($charval < 65536) {
  447.73 +            // 1110bbbb 10bbbbbb 10bbbbbb
  447.74 +            $newcharstring  = chr(($charval >> 12) | 0xE0);
  447.75 +            $newcharstring .= chr(($charval >>  6) | 0xC0);
  447.76 +            $newcharstring .= chr(($charval & 0x3F) | 0x80);
  447.77 +        } else {
  447.78 +            // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
  447.79 +            $newcharstring  = chr(($charval >> 18) | 0xF0);
  447.80 +            $newcharstring .= chr(($charval >> 12) | 0xC0);
  447.81 +            $newcharstring .= chr(($charval >>  6) | 0xC0);
  447.82 +            $newcharstring .= chr(($charval & 0x3F) | 0x80);
  447.83 +        }
  447.84 +        return $newcharstring;
  447.85 +    }
  447.86 +
  447.87 +
  447.88 +
  447.89 +    // ISO-8859-1 => UTF-8
  447.90 +    public static function iconv_iso88591_utf8($string, $bom=false) {
  447.91 +        if (function_exists('utf8_encode')) {
  447.92 +            return utf8_encode($string);
  447.93 +        }
  447.94 +        // utf8_encode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)
  447.95 +        $newcharstring = '';
  447.96 +        if ($bom) {
  447.97 +            $newcharstring .= "\xEF\xBB\xBF";
  447.98 +        }
  447.99 +        for ($i = 0; $i < strlen($string); $i++) {
 447.100 +            $charval = ord($string{$i});
 447.101 +            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
 447.102 +        }
 447.103 +        return $newcharstring;
 447.104 +    }
 447.105 +
 447.106 +
 447.107 +
 447.108 +    // ISO-8859-1 => UTF-16BE
 447.109 +    public static function iconv_iso88591_utf16be($string, $bom=false) {
 447.110 +        $newcharstring = '';
 447.111 +        if ($bom) {
 447.112 +            $newcharstring .= "\xFE\xFF";
 447.113 +        }
 447.114 +        for ($i = 0; $i < strlen($string); $i++) {
 447.115 +            $newcharstring .= "\x00".$string{$i};
 447.116 +        }
 447.117 +        return $newcharstring;
 447.118 +    }
 447.119 +
 447.120 +
 447.121 +
 447.122 +    // ISO-8859-1 => UTF-16LE
 447.123 +    public static function iconv_iso88591_utf16le($string, $bom=false) {
 447.124 +        $newcharstring = '';
 447.125 +        if ($bom) {
 447.126 +            $newcharstring .= "\xFF\xFE";
 447.127 +        }
 447.128 +        for ($i = 0; $i < strlen($string); $i++) {
 447.129 +            $newcharstring .= $string{$i}."\x00";
 447.130 +        }
 447.131 +        return $newcharstring;
 447.132 +    }
 447.133 +
 447.134 +
 447.135 +
 447.136 +    // ISO-8859-1 => UTF-16
 447.137 +    public static function iconv_iso88591_utf16($string) {
 447.138 +        return getid3_lib::iconv_iso88591_utf16le($string, true);
 447.139 +    }
 447.140 +
 447.141 +
 447.142 +
 447.143 +    // UTF-8 => ISO-8859-1
 447.144 +    public static function iconv_utf8_iso88591($string) {
 447.145 +        if (function_exists('utf8_decode')) {
 447.146 +            return utf8_decode($string);
 447.147 +        }
 447.148 +        // utf8_decode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)
 447.149 +        $newcharstring = '';
 447.150 +        $offset = 0;
 447.151 +        $stringlength = strlen($string);
 447.152 +        while ($offset < $stringlength) {
 447.153 +            if ((ord($string{$offset}) | 0x07) == 0xF7) {
 447.154 +                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
 447.155 +                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
 447.156 +                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
 447.157 +                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
 447.158 +                            (ord($string{($offset + 3)}) & 0x3F);
 447.159 +                $offset += 4;
 447.160 +            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
 447.161 +                // 1110bbbb 10bbbbbb 10bbbbbb
 447.162 +                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
 447.163 +                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
 447.164 +                            (ord($string{($offset + 2)}) & 0x3F);
 447.165 +                $offset += 3;
 447.166 +            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
 447.167 +                // 110bbbbb 10bbbbbb
 447.168 +                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
 447.169 +                            (ord($string{($offset + 1)}) & 0x3F);
 447.170 +                $offset += 2;
 447.171 +            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
 447.172 +                // 0bbbbbbb
 447.173 +                $charval = ord($string{$offset});
 447.174 +                $offset += 1;
 447.175 +            } else {
 447.176 +                // error? throw some kind of warning here?
 447.177 +                $charval = false;
 447.178 +                $offset += 1;
 447.179 +            }
 447.180 +            if ($charval !== false) {
 447.181 +                $newcharstring .= (($charval < 256) ? chr($charval) : '?');
 447.182 +            }
 447.183 +        }
 447.184 +        return $newcharstring;
 447.185 +    }
 447.186 +
 447.187 +
 447.188 +
 447.189 +    // UTF-8 => UTF-16BE
 447.190 +    public static function iconv_utf8_utf16be($string, $bom=false) {
 447.191 +        $newcharstring = '';
 447.192 +        if ($bom) {
 447.193 +            $newcharstring .= "\xFE\xFF";
 447.194 +        }
 447.195 +        $offset = 0;
 447.196 +        $stringlength = strlen($string);
 447.197 +        while ($offset < $stringlength) {
 447.198 +            if ((ord($string{$offset}) | 0x07) == 0xF7) {
 447.199 +                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
 447.200 +                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
 447.201 +                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
 447.202 +                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
 447.203 +                            (ord($string{($offset + 3)}) & 0x3F);
 447.204 +                $offset += 4;
 447.205 +            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
 447.206 +                // 1110bbbb 10bbbbbb 10bbbbbb
 447.207 +                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
 447.208 +                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
 447.209 +                            (ord($string{($offset + 2)}) & 0x3F);
 447.210 +                $offset += 3;
 447.211 +            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
 447.212 +                // 110bbbbb 10bbbbbb
 447.213 +                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
 447.214 +                            (ord($string{($offset + 1)}) & 0x3F);
 447.215 +                $offset += 2;
 447.216 +            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
 447.217 +                // 0bbbbbbb
 447.218 +                $charval = ord($string{$offset});
 447.219 +                $offset += 1;
 447.220 +            } else {
 447.221 +                // error? throw some kind of warning here?
 447.222 +                $charval = false;
 447.223 +                $offset += 1;
 447.224 +            }
 447.225 +            if ($charval !== false) {
 447.226 +                $newcharstring .= (($charval < 65536) ? getid3_lib::BigEndian2String($charval, 2) : "\x00".'?');
 447.227 +            }
 447.228 +        }
 447.229 +        return $newcharstring;
 447.230 +    }
 447.231 +
 447.232 +
 447.233 +
 447.234 +    // UTF-8 => UTF-16LE
 447.235 +    public static function iconv_utf8_utf16le($string, $bom=false) {
 447.236 +        $newcharstring = '';
 447.237 +        if ($bom) {
 447.238 +            $newcharstring .= "\xFF\xFE";
 447.239 +        }
 447.240 +        $offset = 0;
 447.241 +        $stringlength = strlen($string);
 447.242 +        while ($offset < $stringlength) {
 447.243 +            if ((ord($string{$offset}) | 0x07) == 0xF7) {
 447.244 +                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
 447.245 +                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
 447.246 +                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
 447.247 +                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
 447.248 +                            (ord($string{($offset + 3)}) & 0x3F);
 447.249 +                $offset += 4;
 447.250 +            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
 447.251 +                // 1110bbbb 10bbbbbb 10bbbbbb
 447.252 +                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
 447.253 +                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
 447.254 +                            (ord($string{($offset + 2)}) & 0x3F);
 447.255 +                $offset += 3;
 447.256 +            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
 447.257 +                // 110bbbbb 10bbbbbb
 447.258 +                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
 447.259 +                            (ord($string{($offset + 1)}) & 0x3F);
 447.260 +                $offset += 2;
 447.261 +            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
 447.262 +                // 0bbbbbbb
 447.263 +                $charval = ord($string{$offset});
 447.264 +                $offset += 1;
 447.265 +            } else {
 447.266 +                // error? maybe throw some warning here?
 447.267 +                $charval = false;
 447.268 +                $offset += 1;
 447.269 +            }
 447.270 +            if ($charval !== false) {
 447.271 +                $newcharstring .= (($charval < 65536) ? getid3_lib::LittleEndian2String($charval, 2) : '?'."\x00");
 447.272 +            }
 447.273 +        }
 447.274 +        return $newcharstring;
 447.275 +    }
 447.276 +
 447.277 +    
 447.278 +    
 447.279 +    // UTF-8 => UTF-16
 447.280 +    public static function iconv_utf8_utf16($string) {
 447.281 +        return getid3_lib::iconv_utf8_utf16le($string, true);
 447.282 +    }
 447.283 +
 447.284 +    
 447.285 +    
 447.286 +    // UTF-16BE => ISO-8859-1
 447.287 +    public static function iconv_utf16be_iso88591($string) {
 447.288 +        if (substr($string, 0, 2) == "\xFE\xFF") {
 447.289 +            // strip BOM
 447.290 +            $string = substr($string, 2);
 447.291 +        }
 447.292 +        $newcharstring = '';
 447.293 +        for ($i = 0; $i < strlen($string); $i += 2) {
 447.294 +            $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));
 447.295 +            $newcharstring .= (($charval < 256) ? chr($charval) : '?');
 447.296 +        }
 447.297 +        return $newcharstring;
 447.298 +    }
 447.299 +
 447.300 +    
 447.301 +    
 447.302 +    // UTF-16BE => UTF-8
 447.303 +    public static function iconv_utf16be_utf8($string) {
 447.304 +        if (substr($string, 0, 2) == "\xFE\xFF") {
 447.305 +            // strip BOM
 447.306 +            $string = substr($string, 2);
 447.307 +        }
 447.308 +        $newcharstring = '';
 447.309 +        for ($i = 0; $i < strlen($string); $i += 2) {
 447.310 +            $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));
 447.311 +            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
 447.312 +        }
 447.313 +        return $newcharstring;
 447.314 +    }
 447.315 +    
 447.316 +    
 447.317 +    
 447.318 +    // UTF-16BE => UTF-16LE
 447.319 +    public static function iconv_utf16be_utf16le($string) {
 447.320 +        return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16be_utf8($string));
 447.321 +    }
 447.322 +    
 447.323 +    
 447.324 +    
 447.325 +    // UTF-16BE => UTF-16
 447.326 +    public static function iconv_utf16be_utf16($string) {
 447.327 +        return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16be_utf8($string));
 447.328 +    }
 447.329 +    
 447.330 +    
 447.331 +    
 447.332 +    // UTF-16LE => ISO-8859-1
 447.333 +    public static function iconv_utf16le_iso88591($string) {
 447.334 +        if (substr($string, 0, 2) == "\xFF\xFE") {
 447.335 +            // strip BOM
 447.336 +            $string = substr($string, 2);
 447.337 +        }
 447.338 +        $newcharstring = '';
 447.339 +        for ($i = 0; $i < strlen($string); $i += 2) {
 447.340 +            $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));
 447.341 +            $newcharstring .= (($charval < 256) ? chr($charval) : '?');
 447.342 +        }
 447.343 +        return $newcharstring;
 447.344 +    }
 447.345 +
 447.346 +    
 447.347 +    
 447.348 +    // UTF-16LE => UTF-8
 447.349 +    public static function iconv_utf16le_utf8($string) {
 447.350 +        if (substr($string, 0, 2) == "\xFF\xFE") {
 447.351 +            // strip BOM
 447.352 +            $string = substr($string, 2);
 447.353 +        }
 447.354 +        $newcharstring = '';
 447.355 +        for ($i = 0; $i < strlen($string); $i += 2) {
 447.356 +            $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));
 447.357 +            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
 447.358 +        }
 447.359 +        return $newcharstring;
 447.360 +    }
 447.361 +
 447.362 +    
 447.363 +    
 447.364 +    // UTF-16LE => UTF-16BE
 447.365 +    public static function iconv_utf16le_utf16be($string) {
 447.366 +        return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16le_utf8($string));
 447.367 +    }
 447.368 +    
 447.369 +    
 447.370 +    
 447.371 +    // UTF-16LE => UTF-16
 447.372 +    public static function iconv_utf16le_utf16($string) {
 447.373 +        return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16le_utf8($string));
 447.374 +    }
 447.375 +    
 447.376 +    
 447.377 +    
 447.378 +    // UTF-16 => ISO-8859-1
 447.379 +    public static function iconv_utf16_iso88591($string) {
 447.380 +        $bom = substr($string, 0, 2);
 447.381 +        if ($bom == "\xFE\xFF") {
 447.382 +            return getid3_lib::iconv_utf16be_iso88591(substr($string, 2));
 447.383 +        } elseif ($bom == "\xFF\xFE") {
 447.384 +            return getid3_lib::iconv_utf16le_iso88591(substr($string, 2));
 447.385 +        }
 447.386 +        return $string;
 447.387 +    }
 447.388 +
 447.389 +    
 447.390 +    
 447.391 +    // UTF-16 => UTF-8
 447.392 +    public static function iconv_utf16_utf8($string) {
 447.393 +        $bom = substr($string, 0, 2);
 447.394 +        if ($bom == "\xFE\xFF") {
 447.395 +            return getid3_iconv_replacement::iconv_utf16be_utf8(substr($string, 2));
 447.396 +        } elseif ($bom == "\xFF\xFE") {
 447.397 +            return getid3_iconv_replacement::iconv_utf16le_utf8(substr($string, 2));
 447.398 +        }
 447.399 +        return $string;
 447.400 +    }
 447.401 +    
 447.402 +    
 447.403 +    
 447.404 +    // UTF-16 => UTF-16BE
 447.405 +    public static function iconv_utf16_utf16be($string) {
 447.406 +        return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16_utf8($string));
 447.407 +    }
 447.408 +    
 447.409 +    
 447.410 +    
 447.411 +    // UTF-16 => UTF-16LE
 447.412 +    public static function iconv_utf16_utf16le($string) {
 447.413 +        return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16_utf8($string));
 447.414 +    }
 447.415 +
 447.416 +}
 447.417 +
 447.418 +?>
 447.419 \ No newline at end of file
   448.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   448.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.image_size.php	Mon Feb 22 08:02:39 2010 -0500
   448.3 @@ -0,0 +1,126 @@
   448.4 +<?php
   448.5 +// +----------------------------------------------------------------------+
   448.6 +// | PHP version 5                                                        |
   448.7 +// +----------------------------------------------------------------------+
   448.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   448.9 +// +----------------------------------------------------------------------+
  448.10 +// | This source file is subject to version 2 of the GPL license,         |
  448.11 +// | that is bundled with this package in the file license.txt and is     |
  448.12 +// | available through the world-wide-web at the following url:           |
  448.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  448.14 +// +----------------------------------------------------------------------+
  448.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  448.16 +// +----------------------------------------------------------------------+
  448.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  448.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  448.19 +// +----------------------------------------------------------------------+
  448.20 +// | module.lib.data-hash.php                                             |
  448.21 +// | getID3() library file.                                               |
  448.22 +// | dependencies: NONE.                                                  |
  448.23 +// +----------------------------------------------------------------------+
  448.24 +//
  448.25 +// $Id: module.lib.image_size.php,v 1.2 2006/11/02 10:48:02 ah Exp $
  448.26 +
  448.27 +
  448.28 +
  448.29 +class getid3_lib_image_size
  448.30 +{
  448.31 +    
  448.32 +    const GIF_SIG   = "\x47\x49\x46";                           // 'GIF'
  448.33 +    const PNG_SIG   = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A";
  448.34 +    const JPG_SIG   = "\xFF\xD8\xFF";
  448.35 +    const JPG_SOS   = "\xDA";                                   // Start Of Scan - image data start
  448.36 +    const JPG_SOF0  = "\xC0";                                   // Start Of Frame N
  448.37 +    const JPG_SOF1  = "\xC1";                                   // N indicates which compression process
  448.38 +    const JPG_SOF2  = "\xC2";                                   // Only SOF0-SOF2 are now in common use
  448.39 +    const JPG_SOF3  = "\xC3";                                   // NB: codes C4 and CC are *not* SOF markers
  448.40 +    const JPG_SOF5  = "\xC5";                                   
  448.41 +    const JPG_SOF6  = "\xC6";                                   
  448.42 +    const JPG_SOF7  = "\xC7";                                   
  448.43 +    const JPG_SOF9  = "\xC9";                                   
  448.44 +    const JPG_SOF10 = "\xCA";                                   
  448.45 +    const JPG_SOF11 = "\xCB";                                   // NB: codes C4 and CC are *not* SOF markers
  448.46 +    const JPG_SOF13 = "\xCD";                                   
  448.47 +    const JPG_SOF14 = "\xCE";                                   
  448.48 +    const JPG_SOF15 = "\xCF";                                   
  448.49 +    const JPG_EOI   = "\xD9";                                   // End Of Image (end of datastream)
  448.50 +
  448.51 +
  448.52 +    static public function get($img_data) {
  448.53 +
  448.54 +        $height = $width  = $type   = '';
  448.55 +        
  448.56 +        if ((substr($img_data, 0, 3) == getid3_lib_image_size::GIF_SIG) && (strlen($img_data) > 10)) {
  448.57 +            
  448.58 +            $dim = unpack('v2dim', substr($img_data, 6, 4));
  448.59 +            $width  = $dim['dim1'];
  448.60 +            $height = $dim['dim2'];
  448.61 +            $type = 1;
  448.62 +            
  448.63 +        } elseif ((substr($img_data, 0, 8) == getid3_lib_image_size::PNG_SIG) && (strlen($img_data) > 24)) {
  448.64 +            
  448.65 +            $dim = unpack('N2dim', substr($img_data, 16, 8));
  448.66 +            $width  = $dim['dim1'];
  448.67 +            $height = $dim['dim2'];
  448.68 +            $type = 3;
  448.69 +            
  448.70 +        } elseif ((substr($img_data, 0, 3) == getid3_lib_image_size::JPG_SIG) && (strlen($img_data) > 4)) {
  448.71 +            
  448.72 +            ///////////////// JPG CHUNK SCAN ////////////////////
  448.73 +            $img_pos = $type = 2;
  448.74 +            $buffer = strlen($img_data) - 2;
  448.75 +            while ($img_pos < strlen($img_data)) {
  448.76 +            
  448.77 +                // synchronize to the marker 0xFF
  448.78 +                $img_pos = strpos($img_data, 0xFF, $img_pos) + 1;
  448.79 +                $marker = $img_data[$img_pos];
  448.80 +                do {
  448.81 +                    $marker = ord($img_data[$img_pos++]);
  448.82 +                } while ($marker == 255);
  448.83 +            
  448.84 +                // find dimensions of block
  448.85 +                switch (chr($marker)) {
  448.86 +            
  448.87 +                    // Grab width/height from SOF segment (these are acceptable chunk types)
  448.88 +                    case getid3_lib_image_size::JPG_SOF0:
  448.89 +                    case getid3_lib_image_size::JPG_SOF1:
  448.90 +                    case getid3_lib_image_size::JPG_SOF2:
  448.91 +                    case getid3_lib_image_size::JPG_SOF3:
  448.92 +                    case getid3_lib_image_size::JPG_SOF5:
  448.93 +                    case getid3_lib_image_size::JPG_SOF6:
  448.94 +                    case getid3_lib_image_size::JPG_SOF7:
  448.95 +                    case getid3_lib_image_size::JPG_SOF9:
  448.96 +                    case getid3_lib_image_size::JPG_SOF10:
  448.97 +                    case getid3_lib_image_size::JPG_SOF11:
  448.98 +                    case getid3_lib_image_size::JPG_SOF13:
  448.99 +                    case getid3_lib_image_size::JPG_SOF14:
 448.100 +                    case getid3_lib_image_size::JPG_SOF15:
 448.101 +                        $dim = unpack('n2dim', substr($img_data, $img_pos + 3, 4));
 448.102 +                        $height = $dim['dim1'];
 448.103 +                        $width  = $dim['dim2'];
 448.104 +                        break 2; // found it so exit
 448.105 +            
 448.106 +                    case getid3_lib_image_size::JPG_EOI:
 448.107 +                    case getid3_lib_image_size::JPG_SOS:
 448.108 +                        return false;      
 448.109 +            
 448.110 +                    default:   // We're not interested in other markers
 448.111 +                        $skiplen = (ord($img_data[$img_pos++]) << 8) + ord($img_data[$img_pos++]) - 2;
 448.112 +                        // if the skip is more than what we've read in, read more
 448.113 +                        $buffer -= $skiplen;
 448.114 +                        if ($buffer < 512) { // if the buffer of data is too low, read more file.
 448.115 +                            return false; 
 448.116 +                        }
 448.117 +                        $img_pos += $skiplen;
 448.118 +                        break;
 448.119 +                } 
 448.120 +            } 
 448.121 +        } 
 448.122 +
 448.123 +        return array ($width, $height, $type);
 448.124 +    } // end function
 448.125 +
 448.126 +
 448.127 +}
 448.128 +
 448.129 +?>
 448.130 \ No newline at end of file
   449.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   449.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.misc.iso.php	Mon Feb 22 08:02:39 2010 -0500
   449.3 @@ -0,0 +1,450 @@
   449.4 +<?php
   449.5 +// +----------------------------------------------------------------------+
   449.6 +// | PHP version 5                                                        |
   449.7 +// +----------------------------------------------------------------------+
   449.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   449.9 +// +----------------------------------------------------------------------+
  449.10 +// | This source file is subject to version 2 of the GPL license,         |
  449.11 +// | that is bundled with this package in the file license.txt and is     |
  449.12 +// | available through the world-wide-web at the following url:           |
  449.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  449.14 +// +----------------------------------------------------------------------+
  449.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  449.16 +// +----------------------------------------------------------------------+
  449.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  449.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  449.19 +// +----------------------------------------------------------------------+
  449.20 +// | module.misc.iso.php                                                  |
  449.21 +// | Module for analyzing ISO files                                       |
  449.22 +// | dependencies: NONE                                                   |
  449.23 +// +----------------------------------------------------------------------+
  449.24 +//
  449.25 +// $Id: module.misc.iso.php,v 1.3 2006/11/02 10:48:02 ah Exp $
  449.26 +
  449.27 +
  449.28 +
  449.29 +class getid3_iso extends getid3_handler
  449.30 +{
  449.31 +
  449.32 +    public function Analyze() {
  449.33 +        
  449.34 +        $getid3 = $this->getid3;
  449.35 +        
  449.36 +        $getid3->info['fileformat'] = 'iso';
  449.37 +
  449.38 +        for ($i = 16; $i <= 19; $i++) {
  449.39 +            fseek($getid3->fp, 2048 * $i, SEEK_SET);
  449.40 +            $iso_header = fread($getid3->fp, 2048);
  449.41 +            if (substr($iso_header, 1, 5) == 'CD001') {
  449.42 +                switch (ord($iso_header{0})) {
  449.43 +                    case 1:
  449.44 +                        $getid3->info['iso']['primary_volume_descriptor']['offset'] = 2048 * $i;
  449.45 +                        $this->ParsePrimaryVolumeDescriptor($iso_header);
  449.46 +                        break;
  449.47 +
  449.48 +                    case 2:
  449.49 +                        $getid3->info['iso']['supplementary_volume_descriptor']['offset'] = 2048 * $i;
  449.50 +                        $this->ParseSupplementaryVolumeDescriptor($iso_header);
  449.51 +                        break;
  449.52 +
  449.53 +                    default:
  449.54 +                        // skip
  449.55 +                        break;
  449.56 +                }
  449.57 +            }
  449.58 +        }
  449.59 +
  449.60 +        $this->ParsePathTable();
  449.61 +
  449.62 +        $getid3->info['iso']['files'] = array ();
  449.63 +        foreach ($getid3->info['iso']['path_table']['directories'] as $directory_num => $directory_data) {
  449.64 +            $getid3->info['iso']['directories'][$directory_num] = $this->ParseDirectoryRecord($directory_data);
  449.65 +        }
  449.66 +
  449.67 +        return true;
  449.68 +    }
  449.69 +
  449.70 +
  449.71 +
  449.72 +    private function ParsePrimaryVolumeDescriptor(&$iso_header) {
  449.73 +        
  449.74 +        $getid3 = $this->getid3;
  449.75 +        
  449.76 +        // ISO integer values are stored *BOTH* Little-Endian AND Big-Endian format!!
  449.77 +        // ie 12345 == 0x3039  is stored as $39 $30 $30 $39 in a 4-byte field
  449.78 +
  449.79 +        $getid3->info['iso']['primary_volume_descriptor']['raw'] = array ();
  449.80 +        $info_iso_primaryVD     = &$getid3->info['iso']['primary_volume_descriptor'];
  449.81 +        $info_iso_primaryVD_raw = &$info_iso_primaryVD['raw'];
  449.82 +
  449.83 +        $info_iso_primaryVD_raw['volume_descriptor_type'] = getid3_lib::LittleEndian2Int(substr($iso_header,    0, 1));
  449.84 +        $info_iso_primaryVD_raw['standard_identifier']    = substr($iso_header,    1, 5);
  449.85 +        if ($info_iso_primaryVD_raw['standard_identifier'] != 'CD001') {
  449.86 +            throw new getid3_exception('Expected "CD001" at offset ('.($info_iso_primaryVD['offset'] + 1).'), found "'.$info_iso_primaryVD_raw['standard_identifier'].'" instead');
  449.87 +        }
  449.88 +        
  449.89 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_iso_primaryVD_raw, $iso_header, 6, 
  449.90 +            array (
  449.91 +                'volume_descriptor_version'     => 1,
  449.92 +                'IGNORE-unused_1'               => 1,
  449.93 +                'system_identifier'             => -32,     // string
  449.94 +                'volume_identifier'             => -32,     // string
  449.95 +                'IGNORE-unused_2'               => 8,
  449.96 +                'volume_space_size'             => 4,
  449.97 +                'IGNORE-1'                      => 4,
  449.98 +                'IGNORE-unused_3'               => 32,
  449.99 +                'volume_set_size'               => 2,
 449.100 +                'IGNORE-2'                      => 2,
 449.101 +                'volume_sequence_number'        => 2,
 449.102 +                'IGNORE-3'                      => 2,
 449.103 +                'logical_block_size'            => 2,
 449.104 +                'IGNORE-4'                      => 2,
 449.105 +                'path_table_size'               => 4,
 449.106 +                'IGNORE-5'                      => 4,
 449.107 +                'path_table_l_location'         => 2,
 449.108 +                'IGNORE-6'                      => 2,
 449.109 +                'path_table_l_opt_location'     => 2,
 449.110 +                'IGNORE-7'                      => 2,
 449.111 +                'path_table_m_location'         => 2,
 449.112 +                'IGNORE-8'                      => 2,
 449.113 +                'path_table_m_opt_location'     => 2,
 449.114 +                'IGNORE-9'                      => 2,
 449.115 +                'root_directory_record'         => -34,     // string
 449.116 +                'volume_set_identifier'         => -128,    // string
 449.117 +                'publisher_identifier'          => -128,    // string
 449.118 +                'data_preparer_identifier'      => -128,    // string
 449.119 +                'application_identifier'        => -128,    // string
 449.120 +                'copyright_file_identifier'     => -37,     // string
 449.121 +                'abstract_file_identifier'      => -37,     // string
 449.122 +                'bibliographic_file_identifier' => -37,     // string
 449.123 +                'volume_creation_date_time'     => -17,     // string
 449.124 +                'volume_modification_date_time' => -17,     // string
 449.125 +                'volume_expiration_date_time'   => -17,     // string
 449.126 +                'volume_effective_date_time'    => -17,     // string
 449.127 +                'file_structure_version'        => 1,
 449.128 +                'IGNORE-unused_4'               => 1,
 449.129 +                'application_data'              => -512     // string
 449.130 +            )
 449.131 +        );
 449.132 +
 449.133 +        $info_iso_primaryVD['system_identifier']             = trim($info_iso_primaryVD_raw['system_identifier']);
 449.134 +        $info_iso_primaryVD['volume_identifier']             = trim($info_iso_primaryVD_raw['volume_identifier']);
 449.135 +        $info_iso_primaryVD['volume_set_identifier']         = trim($info_iso_primaryVD_raw['volume_set_identifier']);
 449.136 +        $info_iso_primaryVD['publisher_identifier']          = trim($info_iso_primaryVD_raw['publisher_identifier']);
 449.137 +        $info_iso_primaryVD['data_preparer_identifier']      = trim($info_iso_primaryVD_raw['data_preparer_identifier']);
 449.138 +        $info_iso_primaryVD['application_identifier']        = trim($info_iso_primaryVD_raw['application_identifier']);
 449.139 +        $info_iso_primaryVD['copyright_file_identifier']     = trim($info_iso_primaryVD_raw['copyright_file_identifier']);
 449.140 +        $info_iso_primaryVD['abstract_file_identifier']      = trim($info_iso_primaryVD_raw['abstract_file_identifier']);
 449.141 +        $info_iso_primaryVD['bibliographic_file_identifier'] = trim($info_iso_primaryVD_raw['bibliographic_file_identifier']);
 449.142 +        
 449.143 +        $info_iso_primaryVD['volume_creation_date_time']     = getid3_iso::ISOtimeText2UNIXtime($info_iso_primaryVD_raw['volume_creation_date_time']);
 449.144 +        $info_iso_primaryVD['volume_modification_date_time'] = getid3_iso::ISOtimeText2UNIXtime($info_iso_primaryVD_raw['volume_modification_date_time']);
 449.145 +        $info_iso_primaryVD['volume_expiration_date_time']   = getid3_iso::ISOtimeText2UNIXtime($info_iso_primaryVD_raw['volume_expiration_date_time']);
 449.146 +        $info_iso_primaryVD['volume_effective_date_time']    = getid3_iso::ISOtimeText2UNIXtime($info_iso_primaryVD_raw['volume_effective_date_time']);
 449.147 +
 449.148 +        if (($info_iso_primaryVD_raw['volume_space_size'] * 2048) > $getid3->info['filesize']) {
 449.149 +            throw new getid3_exception('Volume Space Size ('.($info_iso_primaryVD_raw['volume_space_size'] * 2048).' bytes) is larger than the file size ('.$getid3->info['filesize'].' bytes) (truncated file?)');
 449.150 +        }
 449.151 +
 449.152 +        return true;
 449.153 +    }
 449.154 +
 449.155 +
 449.156 +
 449.157 +    private function ParseSupplementaryVolumeDescriptor(&$iso_header) {
 449.158 +        
 449.159 +        $getid3 = $this->getid3;
 449.160 +        
 449.161 +        // ISO integer values are stored Both-Endian format!!
 449.162 +        // ie 12345 == 0x3039  is stored as $39 $30 $30 $39 in a 4-byte field
 449.163 +
 449.164 +        $getid3->info['iso']['supplementary_volume_descriptor']['raw'] = array ();
 449.165 +        $info_iso_supplementaryVD     = &$getid3->info['iso']['supplementary_volume_descriptor'];
 449.166 +        $info_iso_supplementaryVD_raw = &$info_iso_supplementaryVD['raw'];
 449.167 +
 449.168 +        $info_iso_supplementaryVD_raw['volume_descriptor_type'] = getid3_lib::LittleEndian2Int(substr($iso_header, 0, 1));
 449.169 +        $info_iso_supplementaryVD_raw['standard_identifier']    = substr($iso_header, 1, 5);
 449.170 +        if ($info_iso_supplementaryVD_raw['standard_identifier'] != 'CD001') {
 449.171 +            throw new getid3_exception('Expected "CD001" at offset ('.($info_iso_supplementaryVD['offset'] + 1).'), found "'.$info_iso_supplementaryVD_raw['standard_identifier'].'" instead');
 449.172 +        }
 449.173 +
 449.174 +        getid3_lib::ReadSequence('LittleEndian2Int', $info_iso_supplementaryVD_raw, $iso_header, 6, 
 449.175 +            array (
 449.176 +                'volume_descriptor_version'     => 1,
 449.177 +                'IGNORE-unused_1'               => -1,
 449.178 +                'system_identifier'             => -32,
 449.179 +                'volume_identifier'             => -32,
 449.180 +                'IGNORE-unused_2'               => -8,
 449.181 +                'volume_space_size'             => 4,
 449.182 +                'IGNORE-1'                      => 4,
 449.183 +                'IGNORE-unused_3'               => -32,
 449.184 +                'volume_set_size'               => 2,
 449.185 +                'IGNORE-2'                      => 2,
 449.186 +                'volume_sequence_number'        => 2,
 449.187 +                'IGNORE-3'                      => 2,
 449.188 +                'logical_block_size'            => 2,
 449.189 +                'IGNORE-4'                      => 2,
 449.190 +                'path_table_size'               => 4,
 449.191 +                'IGNORE-5'                      => 4,
 449.192 +                'path_table_l_location'         => 2,
 449.193 +                'IGNORE-6'                      => 2,
 449.194 +                'path_table_l_opt_location'     => 2,
 449.195 +                'IGNORE-7'                      => 2,
 449.196 +                'path_table_m_location'         => 2,
 449.197 +                'IGNORE-8'                      => 2,
 449.198 +                'path_table_m_opt_location'     => 2,
 449.199 +                'IGNORE-9'                      => 2,
 449.200 +                'root_directory_record'         => -34,
 449.201 +                'volume_set_identifier'         => -128,
 449.202 +                'publisher_identifier'          => -128,
 449.203 +                'data_preparer_identifier'      => -128,
 449.204 +                'application_identifier'        => -128,
 449.205 +                'copyright_file_identifier'     => -37,
 449.206 +                'abstract_file_identifier'      => -37,
 449.207 +                'bibliographic_file_identifier' => -37,
 449.208 +                'volume_creation_date_time'     => -17,
 449.209 +                'volume_modification_date_time' => -17,
 449.210 +                'volume_expiration_date_time'   => -17,
 449.211 +                'volume_effective_date_time'    => -17,
 449.212 +                'file_structure_version'        => 1,
 449.213 +                'IGNORE-unused_4'               => 1,
 449.214 +                'application_data'              => -512
 449.215 +            )
 449.216 +        );
 449.217 +
 449.218 +        $info_iso_supplementaryVD['system_identifier']              = trim($info_iso_supplementaryVD_raw['system_identifier']);
 449.219 +        $info_iso_supplementaryVD['volume_identifier']              = trim($info_iso_supplementaryVD_raw['volume_identifier']);
 449.220 +        $info_iso_supplementaryVD['volume_set_identifier']          = trim($info_iso_supplementaryVD_raw['volume_set_identifier']);
 449.221 +        $info_iso_supplementaryVD['publisher_identifier']           = trim($info_iso_supplementaryVD_raw['publisher_identifier']);
 449.222 +        $info_iso_supplementaryVD['data_preparer_identifier']       = trim($info_iso_supplementaryVD_raw['data_preparer_identifier']);
 449.223 +        $info_iso_supplementaryVD['application_identifier']         = trim($info_iso_supplementaryVD_raw['application_identifier']);
 449.224 +        $info_iso_supplementaryVD['copyright_file_identifier']      = trim($info_iso_supplementaryVD_raw['copyright_file_identifier']);
 449.225 +        $info_iso_supplementaryVD['abstract_file_identifier']       = trim($info_iso_supplementaryVD_raw['abstract_file_identifier']);
 449.226 +        $info_iso_supplementaryVD['bibliographic_file_identifier']  = trim($info_iso_supplementaryVD_raw['bibliographic_file_identifier']);
 449.227 +        
 449.228 +        $info_iso_supplementaryVD['volume_creation_date_time']      = getid3_iso::ISOtimeText2UNIXtime($info_iso_supplementaryVD_raw['volume_creation_date_time']);
 449.229 +        $info_iso_supplementaryVD['volume_modification_date_time']  = getid3_iso::ISOtimeText2UNIXtime($info_iso_supplementaryVD_raw['volume_modification_date_time']);
 449.230 +        $info_iso_supplementaryVD['volume_expiration_date_time']    = getid3_iso::ISOtimeText2UNIXtime($info_iso_supplementaryVD_raw['volume_expiration_date_time']);
 449.231 +        $info_iso_supplementaryVD['volume_effective_date_time']     = getid3_iso::ISOtimeText2UNIXtime($info_iso_supplementaryVD_raw['volume_effective_date_time']);
 449.232 +
 449.233 +        if (($info_iso_supplementaryVD_raw['volume_space_size'] * $info_iso_supplementaryVD_raw['logical_block_size']) > $getid3->info['filesize']) {
 449.234 +            throw new getid3_exception('Volume Space Size ('.($info_iso_supplementaryVD_raw['volume_space_size'] * $info_iso_supplementaryVD_raw['logical_block_size']).' bytes) is larger than the file size ('.$getid3->info['filesize'].' bytes) (truncated file?)');
 449.235 +        }
 449.236 +
 449.237 +        return true;
 449.238 +    }
 449.239 +
 449.240 +
 449.241 +
 449.242 +    private function ParsePathTable() {
 449.243 +        
 449.244 +        $getid3 = $this->getid3;
 449.245 +        
 449.246 +        if (!isset($getid3->info['iso']['supplementary_volume_descriptor']['raw']['path_table_l_location']) && !isset($getid3->info['iso']['primary_volume_descriptor']['raw']['path_table_l_location'])) {
 449.247 +            return false;
 449.248 +        }
 449.249 +        if (isset($getid3->info['iso']['supplementary_volume_descriptor']['raw']['path_table_l_location'])) {
 449.250 +            $path_table_location = $getid3->info['iso']['supplementary_volume_descriptor']['raw']['path_table_l_location'];
 449.251 +            $path_table_size     = $getid3->info['iso']['supplementary_volume_descriptor']['raw']['path_table_size'];
 449.252 +            $text_encoding       = 'UTF-16BE'; // Big-Endian Unicode
 449.253 +        } 
 449.254 +        else {
 449.255 +            $path_table_location = $getid3->info['iso']['primary_volume_descriptor']['raw']['path_table_l_location'];
 449.256 +            $path_table_size     = $getid3->info['iso']['primary_volume_descriptor']['raw']['path_table_size'];
 449.257 +            $text_encoding       = 'ISO-8859-1'; // Latin-1
 449.258 +        }
 449.259 +
 449.260 +        if (($path_table_location * 2048) > $getid3->info['filesize']) {
 449.261 +            throw new getid3_exception('Path Table Location specifies an offset ('.($path_table_location * 2048).') beyond the end-of-file ('.$getid3->info['filesize'].')');
 449.262 +        }
 449.263 +
 449.264 +        $getid3->info['iso']['path_table']['offset'] = $path_table_location * 2048;
 449.265 +        fseek($getid3->fp, $getid3->info['iso']['path_table']['offset'], SEEK_SET);
 449.266 +        $getid3->info['iso']['path_table']['raw'] = fread($getid3->fp, $path_table_size);
 449.267 +
 449.268 +        $offset = 0;
 449.269 +        $pathcounter = 1;
 449.270 +        while ($offset < $path_table_size) {
 449.271 +            
 449.272 +            $getid3->info['iso']['path_table']['directories'][$pathcounter] = array ();
 449.273 +            $info_iso_pathtable_directories_current = &$getid3->info['iso']['path_table']['directories'][$pathcounter];
 449.274 +
 449.275 +            getid3_lib::ReadSequence('LittleEndian2Int', $info_iso_pathtable_directories_current, $getid3->info['iso']['path_table']['raw'], $offset, 
 449.276 +                array (
 449.277 +                       'length'           => 1,
 449.278 +                    'extended_length'  => 1,
 449.279 +                    'location_logical' => 4,
 449.280 +                    'parent_directory' => 2,
 449.281 +                )
 449.282 +            );
 449.283 +            
 449.284 +            $info_iso_pathtable_directories_current['name'] = substr($getid3->info['iso']['path_table']['raw'], $offset+8, $info_iso_pathtable_directories_current['length']);
 449.285 +            
 449.286 +            $offset += 8 + $info_iso_pathtable_directories_current['length'] + ($info_iso_pathtable_directories_current['length'] % 2);
 449.287 +
 449.288 +            $info_iso_pathtable_directories_current['name_ascii'] = $getid3->iconv($text_encoding, $getid3->encoding, $info_iso_pathtable_directories_current['name'], true);
 449.289 +
 449.290 +            $info_iso_pathtable_directories_current['location_bytes'] = $info_iso_pathtable_directories_current['location_logical'] * 2048;
 449.291 +            if ($pathcounter == 1) {
 449.292 +                $info_iso_pathtable_directories_current['full_path'] = '/';
 449.293 +            }
 449.294 +            else {
 449.295 +                $info_iso_pathtable_directories_current['full_path'] = $getid3->info['iso']['path_table']['directories'][$info_iso_pathtable_directories_current['parent_directory']]['full_path'].$info_iso_pathtable_directories_current['name_ascii'].'/';
 449.296 +            }
 449.297 +            $full_path_array[] = $info_iso_pathtable_directories_current['full_path'];
 449.298 +
 449.299 +            $pathcounter++;
 449.300 +        }
 449.301 +
 449.302 +        return true;
 449.303 +    }
 449.304 +
 449.305 +
 449.306 +
 449.307 +    private function ParseDirectoryRecord($directory_data) {
 449.308 +        
 449.309 +        $getid3 = $this->getid3;
 449.310 +        
 449.311 +        $text_encoding = isset($getid3->info['iso']['supplementary_volume_descriptor']) ? 'UTF-16BE' : 'ISO-8859-1'; 
 449.312 +
 449.313 +        fseek($getid3->fp, $directory_data['location_bytes'], SEEK_SET);
 449.314 +        $directory_record_data = fread($getid3->fp, 1);
 449.315 +        
 449.316 +        while (ord($directory_record_data{0}) > 33) {
 449.317 +
 449.318 +            $directory_record_data .= fread($getid3->fp, ord($directory_record_data{0}) - 1);
 449.319 +            
 449.320 +            $this_directory_record = array ();
 449.321 +            $this_directory_record['raw'] = array ();
 449.322 +            $this_directory_record_raw = &$this_directory_record['raw'];
 449.323 +            
 449.324 +            getid3_lib::ReadSequence('LittleEndian2Int', $this_directory_record_raw, $directory_record_data, 0, 
 449.325 +                array (
 449.326 +                    'length'                    => 1,
 449.327 +                    'extended_attribute_length' => 1,
 449.328 +                    'offset_logical'            => 4,
 449.329 +                    'IGNORE-1'                  => 4,
 449.330 +                    'filesize'                  => 4,
 449.331 +                    'IGNORE-2'                  => 4,
 449.332 +                    'recording_date_time'       => -7,
 449.333 +                    'file_flags'                => 1,
 449.334 +                    'file_unit_size'            => 1,
 449.335 +                    'interleave_gap_size'       => 1,
 449.336 +                    'volume_sequence_number'    => 2,
 449.337 +                    'IGNORE-3'                  => 2,
 449.338 +                    'file_identifier_length'    => 1,
 449.339 +                )
 449.340 +            );
 449.341 +
 449.342 +            $this_directory_record_raw['file_identifier'] = substr($directory_record_data, 33, $this_directory_record_raw['file_identifier_length']);
 449.343 +            
 449.344 +            $this_directory_record['file_identifier_ascii']     = $getid3->iconv($text_encoding, $getid3->encoding, $this_directory_record_raw['file_identifier'], true);
 449.345 +            $this_directory_record['filesize']                  = $this_directory_record_raw['filesize'];
 449.346 +            $this_directory_record['offset_bytes']              = $this_directory_record_raw['offset_logical'] * 2048;
 449.347 +            $this_directory_record['file_flags']['hidden']      = (bool)($this_directory_record_raw['file_flags'] & 0x01);
 449.348 +            $this_directory_record['file_flags']['directory']   = (bool)($this_directory_record_raw['file_flags'] & 0x02);
 449.349 +            $this_directory_record['file_flags']['associated']  = (bool)($this_directory_record_raw['file_flags'] & 0x04);
 449.350 +            $this_directory_record['file_flags']['extended']    = (bool)($this_directory_record_raw['file_flags'] & 0x08);
 449.351 +            $this_directory_record['file_flags']['permissions'] = (bool)($this_directory_record_raw['file_flags'] & 0x10);
 449.352 +            $this_directory_record['file_flags']['multiple']    = (bool)($this_directory_record_raw['file_flags'] & 0x80);
 449.353 +            $this_directory_record['recording_timestamp']       = getid3_iso::ISOtime2UNIXtime($this_directory_record_raw['recording_date_time']);
 449.354 +
 449.355 +            if ($this_directory_record['file_flags']['directory']) {
 449.356 +                $this_directory_record['filename'] = $directory_data['full_path'];
 449.357 +            }
 449.358 +            else {
 449.359 +                $this_directory_record['filename'] = $directory_data['full_path'].getid3_iso::ISOstripFilenameVersion($this_directory_record['file_identifier_ascii']);
 449.360 +                $getid3->info['iso']['files'] = getid3_iso::array_merge_clobber($getid3->info['iso']['files'], getid3_iso::CreateDeepArray($this_directory_record['filename'], '/', $this_directory_record['filesize']));
 449.361 +            }
 449.362 +            
 449.363 +            $directory_record[]    = $this_directory_record;
 449.364 +            $directory_record_data = fread($getid3->fp, 1);
 449.365 +        }
 449.366 +        
 449.367 +        return $directory_record;
 449.368 +    }
 449.369 +
 449.370 +
 449.371 +
 449.372 +    public static function ISOstripFilenameVersion($iso_filename) {
 449.373 +
 449.374 +        // convert 'filename.ext;1' to 'filename.ext'
 449.375 +        if (!strstr($iso_filename, ';')) {
 449.376 +            return $iso_filename;
 449.377 +        }
 449.378 +        return substr($iso_filename, 0, strpos($iso_filename, ';'));
 449.379 +    }
 449.380 +
 449.381 +
 449.382 +
 449.383 +    public static function ISOtimeText2UNIXtime($iso_time) {
 449.384 +
 449.385 +        if (!(int)substr($iso_time, 0, 4)) {
 449.386 +            return false;
 449.387 +        }
 449.388 +        
 449.389 +        return gmmktime((int)substr($iso_time, 8, 2), (int)substr($iso_time, 10, 2), (int)substr($iso_time, 12, 2), (int)substr($iso_time, 4, 2), (int)substr($iso_time, 6, 2), (int)substr($iso_time, 0, 4));
 449.390 +    }
 449.391 +    
 449.392 +    
 449.393 +
 449.394 +    public static function ISOtime2UNIXtime($iso_time) {
 449.395 +    
 449.396 +        // Represented by seven bytes:
 449.397 +        // 1: Number of years since 1900
 449.398 +        // 2: Month of the year from 1 to 12
 449.399 +        // 3: Day of the Month from 1 to 31
 449.400 +        // 4: Hour of the day from 0 to 23
 449.401 +        // 5: Minute of the hour from 0 to 59
 449.402 +        // 6: second of the minute from 0 to 59
 449.403 +        // 7: Offset from Greenwich Mean Time in number of 15 minute intervals from -48 (West) to +52 (East)
 449.404 +
 449.405 +        return gmmktime(ord($iso_time[3]), ord($iso_time[4]), ord($iso_time[5]), ord($iso_time[1]), ord($iso_time[2]), ord($iso_time[0]) + 1900);
 449.406 +    }
 449.407 +
 449.408 +
 449.409 +
 449.410 +    public static function array_merge_clobber($array1, $array2) {
 449.411 +
 449.412 +        // written by kcØhireability*com
 449.413 +        // taken from http://www.php.net/manual/en/function.array-merge-recursive.php
 449.414 +        
 449.415 +        if (!is_array($array1) || !is_array($array2)) {
 449.416 +            return false;
 449.417 +        }
 449.418 +        
 449.419 +        $newarray = $array1;
 449.420 +        foreach ($array2 as $key => $val) {
 449.421 +            if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) {
 449.422 +                $newarray[$key] = getid3_iso::array_merge_clobber($newarray[$key], $val);
 449.423 +            } else {
 449.424 +                $newarray[$key] = $val;
 449.425 +            }
 449.426 +        }
 449.427 +        return $newarray;
 449.428 +    }
 449.429 +    
 449.430 +    
 449.431 +    
 449.432 +    public static function CreateDeepArray($array_path, $separator, $value) {
 449.433 +
 449.434 +        // assigns $value to a nested array path:
 449.435 +        //   $foo = getid3_lib::CreateDeepArray('/path/to/my', '/', 'file.txt')
 449.436 +        // is the same as:
 449.437 +        //   $foo = array ('path'=>array('to'=>'array('my'=>array('file.txt'))));
 449.438 +        // or
 449.439 +        //   $foo['path']['to']['my'] = 'file.txt';
 449.440 +        
 449.441 +        while ($array_path{0} == $separator) {
 449.442 +            $array_path = substr($array_path, 1);
 449.443 +        }
 449.444 +        if (($pos = strpos($array_path, $separator)) !== false) {
 449.445 +            return array (substr($array_path, 0, $pos) => getid3_iso::CreateDeepArray(substr($array_path, $pos + 1), $separator, $value));
 449.446 +        }
 449.447 +        
 449.448 +        return array ($array_path => $value);
 449.449 +    }
 449.450 +
 449.451 +}
 449.452 +
 449.453 +?>
 449.454 \ No newline at end of file
   450.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   450.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.apetag.php	Mon Feb 22 08:02:39 2010 -0500
   450.3 @@ -0,0 +1,312 @@
   450.4 +<?php
   450.5 +// +----------------------------------------------------------------------+
   450.6 +// | PHP version 5                                                        |
   450.7 +// +----------------------------------------------------------------------+
   450.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   450.9 +// +----------------------------------------------------------------------+
  450.10 +// | This source file is subject to version 2 of the GPL license,         |
  450.11 +// | that is bundled with this package in the file license.txt and is     |
  450.12 +// | available through the world-wide-web at the following url:           |
  450.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  450.14 +// +----------------------------------------------------------------------+
  450.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  450.16 +// +----------------------------------------------------------------------+
  450.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  450.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  450.19 +// +----------------------------------------------------------------------+
  450.20 +// | module.tag.apetag.php                                                |
  450.21 +// | module for analyzing APE tags                                        |
  450.22 +// | dependencies: NONE                                                   |
  450.23 +// +----------------------------------------------------------------------+
  450.24 +//
  450.25 +// $Id: module.tag.apetag.php,v 1.5 2006/11/16 14:05:21 ah Exp $
  450.26 +
  450.27 +
  450.28 +
  450.29 +class getid3_apetag extends getid3_handler
  450.30 +{
  450.31 +    /*
  450.32 +    ID3v1_TAG_SIZE     = 128;
  450.33 +    APETAG_HEADER_SIZE = 32;
  450.34 +    LYRICS3_TAG_SIZE   = 10;
  450.35 +    */
  450.36 +
  450.37 +    public $option_override_end_offset = 0;
  450.38 +
  450.39 +
  450.40 +
  450.41 +    public function Analyze() {
  450.42 +
  450.43 +        $getid3 = $this->getid3;
  450.44 +
  450.45 +        if ($this->option_override_end_offset == 0) {
  450.46 +
  450.47 +            fseek($getid3->fp, 0 - 170, SEEK_END);                                                              // 170 = ID3v1_TAG_SIZE + APETAG_HEADER_SIZE + LYRICS3_TAG_SIZE
  450.48 +            $apetag_footer_id3v1 = fread($getid3->fp, 170);                                                     // 170 = ID3v1_TAG_SIZE + APETAG_HEADER_SIZE + LYRICS3_TAG_SIZE
  450.49 +
  450.50 +            // APE tag found before ID3v1
  450.51 +            if (substr($apetag_footer_id3v1, strlen($apetag_footer_id3v1) - 160, 8) == 'APETAGEX') {            // 160 = ID3v1_TAG_SIZE + APETAG_HEADER_SIZE
  450.52 +                $getid3->info['ape']['tag_offset_end'] = filesize($getid3->filename) - 128;                     // 128 = ID3v1_TAG_SIZE
  450.53 +            }
  450.54 +
  450.55 +            // APE tag found, no ID3v1
  450.56 +            elseif (substr($apetag_footer_id3v1, strlen($apetag_footer_id3v1) - 32, 8) == 'APETAGEX') {         // 32 = APETAG_HEADER_SIZE
  450.57 +                $getid3->info['ape']['tag_offset_end'] = filesize($getid3->filename);
  450.58 +            }
  450.59 +
  450.60 +        }
  450.61 +        else {
  450.62 +
  450.63 +            fseek($getid3->fp, $this->option_override_end_offset - 32, SEEK_SET);                               // 32 = APETAG_HEADER_SIZE
  450.64 +            if (fread($getid3->fp, 8) == 'APETAGEX') {
  450.65 +                $getid3->info['ape']['tag_offset_end'] = $this->option_override_end_offset;
  450.66 +            }
  450.67 +
  450.68 +        }
  450.69 +
  450.70 +        // APE tag not found
  450.71 +        if (!@$getid3->info['ape']['tag_offset_end']) {
  450.72 +            return false;
  450.73 +        }
  450.74 +
  450.75 +        // Shortcut
  450.76 +        $info_ape = &$getid3->info['ape'];
  450.77 +
  450.78 +        // Read and parse footer
  450.79 +        fseek($getid3->fp, $info_ape['tag_offset_end'] - 32, SEEK_SET);                                         // 32 = APETAG_HEADER_SIZE
  450.80 +        $apetag_footer_data = fread($getid3->fp, 32);
  450.81 +        if (!($this->ParseAPEHeaderFooter($apetag_footer_data, $info_ape['footer']))) {
  450.82 +            throw new getid3_exception('Error parsing APE footer at offset '.$info_ape['tag_offset_end']);
  450.83 +        }
  450.84 +
  450.85 +        if (isset($info_ape['footer']['flags']['header']) && $info_ape['footer']['flags']['header']) {
  450.86 +            fseek($getid3->fp, $info_ape['tag_offset_end'] - $info_ape['footer']['raw']['tagsize'] - 32, SEEK_SET);
  450.87 +            $info_ape['tag_offset_start'] = ftell($getid3->fp);
  450.88 +            $apetag_data = fread($getid3->fp, $info_ape['footer']['raw']['tagsize'] + 32);
  450.89 +        }
  450.90 +        else {
  450.91 +            $info_ape['tag_offset_start'] = $info_ape['tag_offset_end'] - $info_ape['footer']['raw']['tagsize'];
  450.92 +            fseek($getid3->fp, $info_ape['tag_offset_start'], SEEK_SET);
  450.93 +            $apetag_data = fread($getid3->fp, $info_ape['footer']['raw']['tagsize']);
  450.94 +        }
  450.95 +        $getid3->info['avdataend'] = $info_ape['tag_offset_start'];
  450.96 +
  450.97 +        if (isset($getid3->info['id3v1']['tag_offset_start']) && ($getid3->info['id3v1']['tag_offset_start'] < $info_ape['tag_offset_end'])) {
  450.98 +            $getid3->warning('ID3v1 tag information ignored since it appears to be a false synch in APEtag data');
  450.99 +            unset($getid3->info['id3v1']);
 450.100 +        }
 450.101 +
 450.102 +        $offset = 0;
 450.103 +        if (isset($info_ape['footer']['flags']['header']) && $info_ape['footer']['flags']['header']) {
 450.104 +            if (!$this->ParseAPEHeaderFooter(substr($apetag_data, 0, 32), $info_ape['header'])) {
 450.105 +                throw new getid3_exception('Error parsing APE header at offset '.$info_ape['tag_offset_start']);
 450.106 +            }
 450.107 +            $offset = 32;
 450.108 +        }
 450.109 +
 450.110 +        // Shortcut
 450.111 +        $getid3->info['replay_gain'] = array ();
 450.112 +        $info_replaygain = &$getid3->info['replay_gain'];
 450.113 +
 450.114 +        for ($i = 0; $i < $info_ape['footer']['raw']['tag_items']; $i++) {
 450.115 +            $value_size = getid3_lib::LittleEndian2Int(substr($apetag_data, $offset,     4));
 450.116 +            $item_flags = getid3_lib::LittleEndian2Int(substr($apetag_data, $offset + 4, 4));
 450.117 +            $offset += 8;
 450.118 +
 450.119 +            if (strstr(substr($apetag_data, $offset), "\x00") === false) {
 450.120 +                throw new getid3_exception('Cannot find null-byte (0x00) seperator between ItemKey #'.$i.' and value. ItemKey starts ' . $offset . ' bytes into the APE tag, at file offset '.($info_ape['tag_offset_start'] + $offset));
 450.121 +            }
 450.122 +
 450.123 +            $item_key_length = strpos($apetag_data, "\x00", $offset) - $offset;
 450.124 +            $item_key        = strtolower(substr($apetag_data, $offset, $item_key_length));
 450.125 +
 450.126 +            // Shortcut
 450.127 +            $info_ape['items'][$item_key] = array ();
 450.128 +            $info_ape_items_current = &$info_ape['items'][$item_key];
 450.129 +
 450.130 +            $offset += $item_key_length + 1; // skip 0x00 terminator
 450.131 +            $info_ape_items_current['data'] = substr($apetag_data, $offset, $value_size);
 450.132 +            $offset += $value_size;
 450.133 +
 450.134 +
 450.135 +            $info_ape_items_current['flags'] = $this->ParseAPEtagFlags($item_flags);
 450.136 +
 450.137 +            switch ($info_ape_items_current['flags']['item_contents_raw']) {
 450.138 +                case 0: // UTF-8
 450.139 +                case 3: // Locator (URL, filename, etc), UTF-8 encoded
 450.140 +                    $info_ape_items_current['data'] = explode("\x00", trim($info_ape_items_current['data']));
 450.141 +                    break;
 450.142 +
 450.143 +                default: // binary data
 450.144 +                    break;
 450.145 +            }
 450.146 +
 450.147 +            switch (strtolower($item_key)) {
 450.148 +                case 'replaygain_track_gain':
 450.149 +                    $info_replaygain['track']['adjustment'] = (float)str_replace(',', '.', $info_ape_items_current['data'][0]); // float casting will see "0,95" as zero!
 450.150 +                    $info_replaygain['track']['originator'] = 'unspecified';
 450.151 +                    break;
 450.152 +
 450.153 +                case 'replaygain_track_peak':
 450.154 +                    $info_replaygain['track']['peak']       = (float)str_replace(',', '.', $info_ape_items_current['data'][0]); // float casting will see "0,95" as zero!
 450.155 +                    $info_replaygain['track']['originator'] = 'unspecified';
 450.156 +                    if ($info_replaygain['track']['peak'] <= 0) {
 450.157 +                        $getid3->warning('ReplayGain Track peak from APEtag appears invalid: '.$info_replaygain['track']['peak'].' (original value = "'.$info_ape_items_current['data'][0].'")');
 450.158 +                    }
 450.159 +                    break;
 450.160 +
 450.161 +                case 'replaygain_album_gain':
 450.162 +                    $info_replaygain['album']['adjustment'] = (float)str_replace(',', '.', $info_ape_items_current['data'][0]); // float casting will see "0,95" as zero!
 450.163 +                    $info_replaygain['album']['originator'] = 'unspecified';
 450.164 +                    break;
 450.165 +
 450.166 +                case 'replaygain_album_peak':
 450.167 +                    $info_replaygain['album']['peak']       = (float)str_replace(',', '.', $info_ape_items_current['data'][0]); // float casting will see "0,95" as zero!
 450.168 +                    $info_replaygain['album']['originator'] = 'unspecified';
 450.169 +                    if ($info_replaygain['album']['peak'] <= 0) {
 450.170 +                        $getid3->warning('ReplayGain Album peak from APEtag appears invalid: '.$info_replaygain['album']['peak'].' (original value = "'.$info_ape_items_current['data'][0].'")');
 450.171 +                    }
 450.172 +                    break;
 450.173 +
 450.174 +                case 'mp3gain_undo':
 450.175 +                    list($mp3gain_undo_left, $mp3gain_undo_right, $mp3gain_undo_wrap) = explode(',', $info_ape_items_current['data'][0]);
 450.176 +                    $info_replaygain['mp3gain']['undo_left']  = intval($mp3gain_undo_left);
 450.177 +                    $info_replaygain['mp3gain']['undo_right'] = intval($mp3gain_undo_right);
 450.178 +                    $info_replaygain['mp3gain']['undo_wrap']  = (($mp3gain_undo_wrap == 'Y') ? true : false);
 450.179 +                    break;
 450.180 +
 450.181 +                case 'mp3gain_minmax':
 450.182 +                    list($mp3gain_globalgain_min, $mp3gain_globalgain_max) = explode(',', $info_ape_items_current['data'][0]);
 450.183 +                    $info_replaygain['mp3gain']['globalgain_track_min'] = intval($mp3gain_globalgain_min);
 450.184 +                    $info_replaygain['mp3gain']['globalgain_track_max'] = intval($mp3gain_globalgain_max);
 450.185 +                    break;
 450.186 +
 450.187 +                case 'mp3gain_album_minmax':
 450.188 +                    list($mp3gain_globalgain_album_min, $mp3gain_globalgain_album_max) = explode(',', $info_ape_items_current['data'][0]);
 450.189 +                    $info_replaygain['mp3gain']['globalgain_album_min'] = intval($mp3gain_globalgain_album_min);
 450.190 +                    $info_replaygain['mp3gain']['globalgain_album_max'] = intval($mp3gain_globalgain_album_max);
 450.191 +                    break;
 450.192 +
 450.193 +                case 'tracknumber':
 450.194 +                    foreach ($info_ape_items_current['data'] as $comment) {
 450.195 +                        $info_ape['comments']['track'][] = $comment;
 450.196 +                    }
 450.197 +                    break;
 450.198 +
 450.199 +                default:
 450.200 +                    foreach ($info_ape_items_current['data'] as $comment) {
 450.201 +                        $info_ape['comments'][strtolower($item_key)][] = $comment;
 450.202 +                    }
 450.203 +                    break;
 450.204 +            }
 450.205 +
 450.206 +        }
 450.207 +        if (empty($info_replaygain)) {
 450.208 +            unset($getid3->info['replay_gain']);
 450.209 +        }
 450.210 +
 450.211 +        return true;
 450.212 +    }
 450.213 +
 450.214 +
 450.215 +
 450.216 +    protected function ParseAPEheaderFooter($data, &$target) {
 450.217 +
 450.218 +        // http://www.uni-jena.de/~pfk/mpp/sv8/apeheader.html
 450.219 +
 450.220 +        if (substr($data, 0, 8) != 'APETAGEX') {
 450.221 +            return false;
 450.222 +        }
 450.223 +
 450.224 +        // shortcut
 450.225 +        $target['raw'] = array ();
 450.226 +        $target_raw = &$target['raw'];
 450.227 +
 450.228 +        $target_raw['footer_tag']   = 'APETAGEX';
 450.229 +
 450.230 +        getid3_lib::ReadSequence("LittleEndian2Int", $target_raw, $data, 8,
 450.231 +            array (
 450.232 +                'version'      => 4,
 450.233 +                'tagsize'      => 4,
 450.234 +                'tag_items'    => 4,
 450.235 +                'global_flags' => 4
 450.236 +            )
 450.237 +        );
 450.238 +        $target_raw['reserved'] = substr($data, 24, 8);
 450.239 +
 450.240 +        $target['tag_version'] = $target_raw['version'] / 1000;
 450.241 +        if ($target['tag_version'] >= 2) {
 450.242 +
 450.243 +            $target['flags'] = $this->ParseAPEtagFlags($target_raw['global_flags']);
 450.244 +        }
 450.245 +
 450.246 +        return true;
 450.247 +    }
 450.248 +
 450.249 +
 450.250 +
 450.251 +    protected function ParseAPEtagFlags($raw_flag_int) {
 450.252 +
 450.253 +        // "Note: APE Tags 1.0 do not use any of the APE Tag flags.
 450.254 +        // All are set to zero on creation and ignored on reading."
 450.255 +        // http://www.uni-jena.de/~pfk/mpp/sv8/apetagflags.html
 450.256 +
 450.257 +        $target['header']            = (bool) ($raw_flag_int & 0x80000000);
 450.258 +        $target['footer']            = (bool) ($raw_flag_int & 0x40000000);
 450.259 +        $target['this_is_header']    = (bool) ($raw_flag_int & 0x20000000);
 450.260 +        $target['item_contents_raw'] =        ($raw_flag_int & 0x00000006) >> 1;
 450.261 +        $target['read_only']         = (bool) ($raw_flag_int & 0x00000001);
 450.262 +
 450.263 +        $target['item_contents']     = getid3_apetag::APEcontentTypeFlagLookup($target['item_contents_raw']);
 450.264 +
 450.265 +        return $target;
 450.266 +    }
 450.267 +
 450.268 +
 450.269 +
 450.270 +    public static function APEcontentTypeFlagLookup($content_type_id) {
 450.271 +
 450.272 +        static $lookup = array (
 450.273 +            0 => 'utf-8',
 450.274 +            1 => 'binary',
 450.275 +            2 => 'external',
 450.276 +            3 => 'reserved'
 450.277 +        );
 450.278 +        return (isset($lookup[$content_type_id]) ? $lookup[$content_type_id] : 'invalid');
 450.279 +    }
 450.280 +
 450.281 +
 450.282 +
 450.283 +    public static function APEtagItemIsUTF8Lookup($item_key) {
 450.284 +
 450.285 +        static $lookup = array (
 450.286 +            'title',
 450.287 +            'subtitle',
 450.288 +            'artist',
 450.289 +            'album',
 450.290 +            'debut album',
 450.291 +            'publisher',
 450.292 +            'conductor',
 450.293 +            'track',
 450.294 +            'composer',
 450.295 +            'comment',
 450.296 +            'copyright',
 450.297 +            'publicationright',
 450.298 +            'file',
 450.299 +            'year',
 450.300 +            'record date',
 450.301 +            'record location',
 450.302 +            'genre',
 450.303 +            'media',
 450.304 +            'related',
 450.305 +            'isrc',
 450.306 +            'abstract',
 450.307 +            'language',
 450.308 +            'bibliography'
 450.309 +        );
 450.310 +        return in_array(strtolower($item_key), $lookup);
 450.311 +    }
 450.312 +
 450.313 +}
 450.314 +
 450.315 +?>
 450.316 \ No newline at end of file
   451.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   451.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.id3v1.php	Mon Feb 22 08:02:39 2010 -0500
   451.3 @@ -0,0 +1,324 @@
   451.4 +<?php
   451.5 +// +----------------------------------------------------------------------+
   451.6 +// | PHP version 5                                                        |
   451.7 +// +----------------------------------------------------------------------+
   451.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   451.9 +// +----------------------------------------------------------------------+
  451.10 +// | This source file is subject to version 2 of the GPL license,         |
  451.11 +// | that is bundled with this package in the file license.txt and is     |
  451.12 +// | available through the world-wide-web at the following url:           |
  451.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  451.14 +// +----------------------------------------------------------------------+
  451.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  451.16 +// +----------------------------------------------------------------------+
  451.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  451.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  451.19 +// +----------------------------------------------------------------------+
  451.20 +// | module.tag.id3v1.php                                                 |
  451.21 +// | module for analyzing ID3v1 tags                                      |
  451.22 +// | dependencies: NONE                                                   |
  451.23 +// +----------------------------------------------------------------------+
  451.24 +//
  451.25 +// $Id: module.tag.id3v1.php,v 1.6 2006/11/16 16:19:52 ah Exp $
  451.26 +
  451.27 +        
  451.28 +        
  451.29 +class getid3_id3v1 extends getid3_handler
  451.30 +{
  451.31 +
  451.32 +    public function Analyze() {
  451.33 +
  451.34 +        $getid3 = $this->getid3;
  451.35 +                
  451.36 +        fseek($getid3->fp, -256, SEEK_END);
  451.37 +        $pre_id3v1 = fread($getid3->fp, 128);
  451.38 +        $id3v1_tag = fread($getid3->fp, 128);
  451.39 +
  451.40 +        if (substr($id3v1_tag, 0, 3) == 'TAG') {
  451.41 +        
  451.42 +            $getid3->info['avdataend'] -= 128;
  451.43 +        
  451.44 +            // Shortcut
  451.45 +            $getid3->info['id3v1'] = array ();
  451.46 +            $info_id3v1 = &$getid3->info['id3v1'];
  451.47 +
  451.48 +            $info_id3v1['title']   = getid3_id3v1::cutfield(substr($id3v1_tag,  3, 30));
  451.49 +            $info_id3v1['artist']  = getid3_id3v1::cutfield(substr($id3v1_tag, 33, 30));
  451.50 +            $info_id3v1['album']   = getid3_id3v1::cutfield(substr($id3v1_tag, 63, 30));
  451.51 +            $info_id3v1['year']    = getid3_id3v1::cutfield(substr($id3v1_tag, 93,  4));
  451.52 +            $info_id3v1['comment'] = substr($id3v1_tag,  97, 30);  // can't remove nulls yet, track detection depends on them
  451.53 +            $info_id3v1['genreid'] = ord(substr($id3v1_tag, 127, 1));
  451.54 +
  451.55 +            // If second-last byte of comment field is null and last byte of comment field is non-null then this is ID3v1.1 and the comment field is 28 bytes long and the 30th byte is the track number
  451.56 +            if (($id3v1_tag{125} === "\x00") && ($id3v1_tag{126} !== "\x00")) {
  451.57 +                $info_id3v1['track']   = ord(substr($info_id3v1['comment'], 29,  1));
  451.58 +                $info_id3v1['comment'] =     substr($info_id3v1['comment'],  0, 28);
  451.59 +            }
  451.60 +            $info_id3v1['comment'] = getid3_id3v1::cutfield($info_id3v1['comment']);
  451.61 +
  451.62 +            $info_id3v1['genre'] = getid3_id3v1::LookupGenreName($info_id3v1['genreid']);
  451.63 +            if (!empty($info_id3v1['genre'])) {
  451.64 +                unset($info_id3v1['genreid']);
  451.65 +            }
  451.66 +            if (empty($info_id3v1['genre']) || (@$info_id3v1['genre'] == 'Unknown')) {
  451.67 +                unset($info_id3v1['genre']);
  451.68 +            }
  451.69 +
  451.70 +            foreach ($info_id3v1 as $key => $value) {
  451.71 +                $key != 'comments' and $info_id3v1['comments'][$key][0] = $value;
  451.72 +            }
  451.73 +
  451.74 +            $info_id3v1['tag_offset_end']   = filesize($getid3->filename);
  451.75 +            $info_id3v1['tag_offset_start'] = $info_id3v1['tag_offset_end'] - 128;
  451.76 +        }   
  451.77 +            
  451.78 +        if (substr($pre_id3v1, 0, 3) == 'TAG') {
  451.79 +            // The way iTunes handles tags is, well, brain-damaged.
  451.80 +            // It completely ignores v1 if ID3v2 is present.
  451.81 +            // This goes as far as adding a new v1 tag *even if there already is one*
  451.82 +
  451.83 +            // A suspected double-ID3v1 tag has been detected, but it could be that the "TAG" identifier is a legitimate part of an APE or Lyrics3 tag
  451.84 +            if (substr($pre_id3v1, 96, 8) == 'APETAGEX') {
  451.85 +                // an APE tag footer was found before the last ID3v1, assume false "TAG" synch
  451.86 +            } elseif (substr($pre_id3v1, 119, 6) == 'LYRICS') {
  451.87 +                // a Lyrics3 tag footer was found before the last ID3v1, assume false "TAG" synch
  451.88 +            } else {
  451.89 +                // APE and Lyrics3 footers not found - assume double ID3v1
  451.90 +                $getid3->warning('Duplicate ID3v1 tag detected - this has been known to happen with iTunes.');
  451.91 +                $getid3->info['avdataend'] -= 128;
  451.92 +            }
  451.93 +        }
  451.94 +
  451.95 +        return true;
  451.96 +    }
  451.97 +    
  451.98 +    
  451.99 +
 451.100 +    public static function cutfield($str) {
 451.101 +        
 451.102 +        return trim(substr($str, 0, strcspn($str, "\x00")));
 451.103 +    }
 451.104 +
 451.105 +
 451.106 +
 451.107 +    public static function ArrayOfGenres($allow_SCMPX_extended=false) {
 451.108 +        
 451.109 +        static $lookup = array (
 451.110 +            0    => 'Blues',
 451.111 +            1    => 'Classic Rock',
 451.112 +            2    => 'Country',
 451.113 +            3    => 'Dance',
 451.114 +            4    => 'Disco',
 451.115 +            5    => 'Funk',
 451.116 +            6    => 'Grunge',
 451.117 +            7    => 'Hip-Hop',
 451.118 +            8    => 'Jazz',
 451.119 +            9    => 'Metal',
 451.120 +            10   => 'New Age',
 451.121 +            11   => 'Oldies',
 451.122 +            12   => 'Other',
 451.123 +            13   => 'Pop',
 451.124 +            14   => 'R&B',
 451.125 +            15   => 'Rap',
 451.126 +            16   => 'Reggae',
 451.127 +            17   => 'Rock',
 451.128 +            18   => 'Techno',
 451.129 +            19   => 'Industrial',
 451.130 +            20   => 'Alternative',
 451.131 +            21   => 'Ska',
 451.132 +            22   => 'Death Metal',
 451.133 +            23   => 'Pranks',
 451.134 +            24   => 'Soundtrack',
 451.135 +            25   => 'Euro-Techno',
 451.136 +            26   => 'Ambient',
 451.137 +            27   => 'Trip-Hop',
 451.138 +            28   => 'Vocal',
 451.139 +            29   => 'Jazz+Funk',
 451.140 +            30   => 'Fusion',
 451.141 +            31   => 'Trance',
 451.142 +            32   => 'Classical',
 451.143 +            33   => 'Instrumental',
 451.144 +            34   => 'Acid',
 451.145 +            35   => 'House',
 451.146 +            36   => 'Game',
 451.147 +            37   => 'Sound Clip',
 451.148 +            38   => 'Gospel',
 451.149 +            39   => 'Noise',
 451.150 +            40   => 'Alt. Rock',
 451.151 +            41   => 'Bass',
 451.152 +            42   => 'Soul',
 451.153 +            43   => 'Punk',
 451.154 +            44   => 'Space',
 451.155 +            45   => 'Meditative',
 451.156 +            46   => 'Instrumental Pop',
 451.157 +            47   => 'Instrumental Rock',
 451.158 +            48   => 'Ethnic',
 451.159 +            49   => 'Gothic',
 451.160 +            50   => 'Darkwave',
 451.161 +            51   => 'Techno-Industrial',
 451.162 +            52   => 'Electronic',
 451.163 +            53   => 'Pop-Folk',
 451.164 +            54   => 'Eurodance',
 451.165 +            55   => 'Dream',
 451.166 +            56   => 'Southern Rock',
 451.167 +            57   => 'Comedy',
 451.168 +            58   => 'Cult',
 451.169 +            59   => 'Gangsta Rap',
 451.170 +            60   => 'Top 40',
 451.171 +            61   => 'Christian Rap',
 451.172 +            62   => 'Pop/Funk',
 451.173 +            63   => 'Jungle',
 451.174 +            64   => 'Native American',
 451.175 +            65   => 'Cabaret',
 451.176 +            66   => 'New Wave',
 451.177 +            67   => 'Psychedelic',
 451.178 +            68   => 'Rave',
 451.179 +            69   => 'Showtunes',
 451.180 +            70   => 'Trailer',
 451.181 +            71   => 'Lo-Fi',
 451.182 +            72   => 'Tribal',
 451.183 +            73   => 'Acid Punk',
 451.184 +            74   => 'Acid Jazz',
 451.185 +            75   => 'Polka',
 451.186 +            76   => 'Retro',
 451.187 +            77   => 'Musical',
 451.188 +            78   => 'Rock & Roll',
 451.189 +            79   => 'Hard Rock',
 451.190 +            80   => 'Folk',
 451.191 +            81   => 'Folk/Rock',
 451.192 +            82   => 'National Folk',
 451.193 +            83   => 'Swing',
 451.194 +            84   => 'Fast-Fusion',
 451.195 +            85   => 'Bebob',
 451.196 +            86   => 'Latin',
 451.197 +            87   => 'Revival',
 451.198 +            88   => 'Celtic',
 451.199 +            89   => 'Bluegrass',
 451.200 +            90   => 'Avantgarde',
 451.201 +            91   => 'Gothic Rock',
 451.202 +            92   => 'Progressive Rock',
 451.203 +            93   => 'Psychedelic Rock',
 451.204 +            94   => 'Symphonic Rock',
 451.205 +            95   => 'Slow Rock',
 451.206 +            96   => 'Big Band',
 451.207 +            97   => 'Chorus',
 451.208 +            98   => 'Easy Listening',
 451.209 +            99   => 'Acoustic',
 451.210 +            100  => 'Humour',
 451.211 +            101  => 'Speech',
 451.212 +            102  => 'Chanson',
 451.213 +            103  => 'Opera',
 451.214 +            104  => 'Chamber Music',
 451.215 +            105  => 'Sonata',
 451.216 +            106  => 'Symphony',
 451.217 +            107  => 'Booty Bass',
 451.218 +            108  => 'Primus',
 451.219 +            109  => 'Porn Groove',
 451.220 +            110  => 'Satire',
 451.221 +            111  => 'Slow Jam',
 451.222 +            112  => 'Club',
 451.223 +            113  => 'Tango',
 451.224 +            114  => 'Samba',
 451.225 +            115  => 'Folklore',
 451.226 +            116  => 'Ballad',
 451.227 +            117  => 'Power Ballad',
 451.228 +            118  => 'Rhythmic Soul',
 451.229 +            119  => 'Freestyle',
 451.230 +            120  => 'Duet',
 451.231 +            121  => 'Punk Rock',
 451.232 +            122  => 'Drum Solo',
 451.233 +            123  => 'A Cappella',
 451.234 +            124  => 'Euro-House',
 451.235 +            125  => 'Dance Hall',
 451.236 +            126  => 'Goa',
 451.237 +            127  => 'Drum & Bass',
 451.238 +            128  => 'Club-House',
 451.239 +            129  => 'Hardcore',
 451.240 +            130  => 'Terror',
 451.241 +            131  => 'Indie',
 451.242 +            132  => 'BritPop',
 451.243 +            133  => 'Negerpunk',
 451.244 +            134  => 'Polsk Punk',
 451.245 +            135  => 'Beat',
 451.246 +            136  => 'Christian Gangsta Rap',
 451.247 +            137  => 'Heavy Metal',
 451.248 +            138  => 'Black Metal',
 451.249 +            139  => 'Crossover',
 451.250 +            140  => 'Contemporary Christian',
 451.251 +            141  => 'Christian Rock',
 451.252 +            142  => 'Merengue',
 451.253 +            143  => 'Salsa',
 451.254 +            144  => 'Trash Metal',
 451.255 +            145  => 'Anime',
 451.256 +            146  => 'JPop',
 451.257 +            147  => 'Synthpop',
 451.258 +
 451.259 +            255  => 'Unknown',
 451.260 +
 451.261 +            'CR' => 'Cover',
 451.262 +            'RX' => 'Remix'
 451.263 +        );
 451.264 +
 451.265 +        static $lookupSCMPX = array ();
 451.266 +        if ($allow_SCMPX_extended && empty($lookupSCMPX)) {
 451.267 +            $lookupSCMPX = $lookup;
 451.268 +            // http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended
 451.269 +            // Extended ID3v1 genres invented by SCMPX
 451.270 +            // Note that 255 "Japanese Anime" conflicts with standard "Unknown"
 451.271 +            $lookupSCMPX[240] = 'Sacred';
 451.272 +            $lookupSCMPX[241] = 'Northern Europe';
 451.273 +            $lookupSCMPX[242] = 'Irish & Scottish';
 451.274 +            $lookupSCMPX[243] = 'Scotland';
 451.275 +            $lookupSCMPX[244] = 'Ethnic Europe';
 451.276 +            $lookupSCMPX[245] = 'Enka';
 451.277 +            $lookupSCMPX[246] = 'Children\'s Song';
 451.278 +            $lookupSCMPX[247] = 'Japanese Sky';
 451.279 +            $lookupSCMPX[248] = 'Japanese Heavy Rock';
 451.280 +            $lookupSCMPX[249] = 'Japanese Doom Rock';
 451.281 +            $lookupSCMPX[250] = 'Japanese J-POP';
 451.282 +            $lookupSCMPX[251] = 'Japanese Seiyu';
 451.283 +            $lookupSCMPX[252] = 'Japanese Ambient Techno';
 451.284 +            $lookupSCMPX[253] = 'Japanese Moemoe';
 451.285 +            $lookupSCMPX[254] = 'Japanese Tokusatsu';
 451.286 +            //$lookupSCMPX[255] = 'Japanese Anime';
 451.287 +        }
 451.288 +
 451.289 +        return ($allow_SCMPX_extended ? $lookupSCMPX : $lookup);
 451.290 +    }
 451.291 +
 451.292 +
 451.293 +
 451.294 +    public static function LookupGenreName($genre_id, $allow_SCMPX_extended=true) {
 451.295 +    
 451.296 +        switch ($genre_id) {
 451.297 +            case 'RX':
 451.298 +            case 'CR':
 451.299 +                break;
 451.300 +            default:
 451.301 +                $genre_id = intval($genre_id); // to handle 3 or '3' or '03'
 451.302 +                break;
 451.303 +        }
 451.304 +        $lookup = getid3_id3v1::ArrayOfGenres($allow_SCMPX_extended);
 451.305 +        return (isset($lookup[$genre_id]) ? $lookup[$genre_id] : false);
 451.306 +    }
 451.307 +    
 451.308 +
 451.309 +    public static function LookupGenreID($genre, $allow_SCMPX_extended=false) {
 451.310 +        
 451.311 +        $lookup = getid3_id3v1::ArrayOfGenres($allow_SCMPX_extended);
 451.312 +        $lower_case_no_space_search_term = strtolower(str_replace(' ', '', $genre));
 451.313 +        foreach ($lookup as $key => $value) {
 451.314 +            foreach ($lookup as $key => $value) {
 451.315 +                if (strtolower(str_replace(' ', '', $value)) == $lower_case_no_space_search_term) {
 451.316 +                    return $key;
 451.317 +                }
 451.318 +            }
 451.319 +            return false;
 451.320 +        }
 451.321 +        return (isset($lookup[$genre_id]) ? $lookup[$genre_id] : false);
 451.322 +    }
 451.323 +
 451.324 +}
 451.325 +
 451.326 +
 451.327 +?>
 451.328 \ No newline at end of file
   452.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   452.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.id3v2.php	Mon Feb 22 08:02:39 2010 -0500
   452.3 @@ -0,0 +1,3280 @@
   452.4 +<?php
   452.5 +// +----------------------------------------------------------------------+
   452.6 +// | PHP version 5                                                        |
   452.7 +// +----------------------------------------------------------------------+
   452.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   452.9 +// +----------------------------------------------------------------------+
  452.10 +// | This source file is subject to version 2 of the GPL license,         |
  452.11 +// | that is bundled with this package in the file license.txt and is     |
  452.12 +// | available through the world-wide-web at the following url:           |
  452.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  452.14 +// +----------------------------------------------------------------------+
  452.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  452.16 +// +----------------------------------------------------------------------+
  452.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  452.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  452.19 +// +----------------------------------------------------------------------+
  452.20 +// | module.tag.id3v2.php                                                 |
  452.21 +// | module for analyzing ID3v2 tags                                      |
  452.22 +// | dependencies: module.tag.id3v1.php                                   |
  452.23 +// |               module.lib.image_size.php (optional)                   |
  452.24 +// |               zlib support in PHP (optional)                         |
  452.25 +// +----------------------------------------------------------------------+
  452.26 +//
  452.27 +// $Id: module.tag.id3v2.php,v 1.15 2006/12/03 23:47:29 ah Exp $
  452.28 +
  452.29 +
  452.30 +        
  452.31 +        
  452.32 +class getid3_id3v2 extends getid3_handler
  452.33 +{
  452.34 +
  452.35 +    public $option_starting_offset = 0;
  452.36 +
  452.37 +
  452.38 +    public function Analyze() {
  452.39 +
  452.40 +        $getid3 = $this->getid3;
  452.41 +        
  452.42 +        // dependency
  452.43 +        $getid3->include_module('tag.id3v1');
  452.44 +        
  452.45 +        if ($getid3->option_tags_images) {        
  452.46 +            $getid3->include_module('lib.image_size');
  452.47 +        }
  452.48 +
  452.49 +
  452.50 +        //    Overall tag structure:
  452.51 +        //        +-----------------------------+
  452.52 +        //        |      Header (10 bytes)      |
  452.53 +        //        +-----------------------------+
  452.54 +        //        |       Extended Header       |
  452.55 +        //        | (variable length, OPTIONAL) |
  452.56 +        //        +-----------------------------+
  452.57 +        //        |   Frames (variable length)  |
  452.58 +        //        +-----------------------------+
  452.59 +        //        |           Padding           |
  452.60 +        //        | (variable length, OPTIONAL) |
  452.61 +        //        +-----------------------------+
  452.62 +        //        | Footer (10 bytes, OPTIONAL) |
  452.63 +        //        +-----------------------------+
  452.64 +        //
  452.65 +        //    Header
  452.66 +        //        ID3v2/file identifier      "ID3"
  452.67 +        //        ID3v2 version              $04 00
  452.68 +        //        ID3v2 flags                (%ab000000 in v2.2, %abc00000 in v2.3, %abcd0000 in v2.4.x)
  452.69 +        //        ID3v2 size                 4 * %0xxxxxxx
  452.70 +
  452.71 +
  452.72 +        // shortcuts
  452.73 +        $getid3->info['id3v2']['header'] = true;
  452.74 +        $info_id3v2          = &$getid3->info['id3v2'];
  452.75 +        $info_id3v2['flags'] = array ();
  452.76 +        $info_id3v2_flags    = &$info_id3v2['flags'];
  452.77 +
  452.78 +
  452.79 +        $this->fseek($this->option_starting_offset, SEEK_SET);
  452.80 +        $header = $this->fread(10);
  452.81 +        if (substr($header, 0, 3) == 'ID3'  &&  strlen($header) == 10) {
  452.82 +
  452.83 +            $info_id3v2['majorversion'] = ord($header{3});
  452.84 +            $info_id3v2['minorversion'] = ord($header{4});
  452.85 +
  452.86 +            // shortcut
  452.87 +            $id3v2_major_version = &$info_id3v2['majorversion'];
  452.88 +
  452.89 +        } else {
  452.90 +            unset($getid3->info['id3v2']);
  452.91 +            return false;
  452.92 +
  452.93 +        }
  452.94 +
  452.95 +        if ($id3v2_major_version > 4) { // this script probably won't correctly parse ID3v2.5.x and above (if it ever exists)
  452.96 +            throw new getid3_exception('this script only parses up to ID3v2.4.x - this tag is ID3v2.'.$id3v2_major_version.'.'.$info_id3v2['minorversion']);
  452.97 +        }
  452.98 +
  452.99 +        $id3_flags = ord($header{5});
 452.100 +        switch ($id3v2_major_version) {
 452.101 +            case 2:
 452.102 +                // %ab000000 in v2.2
 452.103 +                $info_id3v2_flags['unsynch']     = (bool)($id3_flags & 0x80); // a - Unsynchronisation
 452.104 +                $info_id3v2_flags['compression'] = (bool)($id3_flags & 0x40); // b - Compression
 452.105 +                break;
 452.106 +
 452.107 +            case 3:
 452.108 +                // %abc00000 in v2.3
 452.109 +                $info_id3v2_flags['unsynch']     = (bool)($id3_flags & 0x80); // a - Unsynchronisation
 452.110 +                $info_id3v2_flags['exthead']     = (bool)($id3_flags & 0x40); // b - Extended header
 452.111 +                $info_id3v2_flags['experim']     = (bool)($id3_flags & 0x20); // c - Experimental indicator
 452.112 +                break;
 452.113 +
 452.114 +            case 4:
 452.115 +                // %abcd0000 in v2.4
 452.116 +                $info_id3v2_flags['unsynch']     = (bool)($id3_flags & 0x80); // a - Unsynchronisation
 452.117 +                $info_id3v2_flags['exthead']     = (bool)($id3_flags & 0x40); // b - Extended header
 452.118 +                $info_id3v2_flags['experim']     = (bool)($id3_flags & 0x20); // c - Experimental indicator
 452.119 +                $info_id3v2_flags['isfooter']    = (bool)($id3_flags & 0x10); // d - Footer present
 452.120 +                break;
 452.121 +        }
 452.122 +
 452.123 +        $info_id3v2['headerlength'] = getid3_lib::BigEndianSyncSafe2Int(substr($header, 6, 4)) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length
 452.124 +
 452.125 +        $info_id3v2['tag_offset_start'] = $this->option_starting_offset;
 452.126 +        $info_id3v2['tag_offset_end']   = $info_id3v2['tag_offset_start'] + $info_id3v2['headerlength'];
 452.127 +
 452.128 +
 452.129 +        // Frames
 452.130 +        
 452.131 +        //     All ID3v2 frames consists of one frame header followed by one or more
 452.132 +        //     fields containing the actual information. The header is always 10
 452.133 +        //     bytes and laid out as follows:
 452.134 +        //
 452.135 +        //     Frame ID      $xx xx xx xx  (four characters)
 452.136 +        //     Size      4 * %0xxxxxxx
 452.137 +        //     Flags         $xx xx
 452.138 +
 452.139 +        $size_of_frames = $info_id3v2['headerlength'] - 10; // not including 10-byte initial header
 452.140 +        if (@$info_id3v2['exthead']['length']) {
 452.141 +            $size_of_frames -= ($info_id3v2['exthead']['length'] + 4);
 452.142 +        }
 452.143 +        
 452.144 +        if (@$info_id3v2_flags['isfooter']) {
 452.145 +            $size_of_frames -= 10; // footer takes last 10 bytes of ID3v2 header, after frame data, before audio
 452.146 +        }
 452.147 +        
 452.148 +        if ($size_of_frames > 0) {
 452.149 +            $frame_data = $this->fread($size_of_frames); // read all frames from file into $frame_data variable
 452.150 +
 452.151 +            //    if entire frame data is unsynched, de-unsynch it now (ID3v2.3.x)
 452.152 +            if (@$info_id3v2_flags['unsynch'] && ($id3v2_major_version <= 3)) {
 452.153 +                $frame_data = str_replace("\xFF\x00", "\xFF", $frame_data);
 452.154 +            }
 452.155 +        
 452.156 +            //        [in ID3v2.4.0] Unsynchronisation [S:6.1] is done on frame level, instead
 452.157 +            //        of on tag level, making it easier to skip frames, increasing the streamability
 452.158 +            //        of the tag. The unsynchronisation flag in the header [S:3.1] indicates that
 452.159 +            //        there exists an unsynchronised frame, while the new unsynchronisation flag in
 452.160 +            //        the frame header [S:4.1.2] indicates unsynchronisation.
 452.161 +
 452.162 +             //$frame_data_offset = 10 + (@$info_id3v2['exthead']['length'] ? $info_id3v2['exthead']['length'] + 4 : 0); // how many bytes into the stream - start from after the 10-byte header (and extended header length+4, if present)
 452.163 +             $frame_data_offset = 10; // how many bytes into the stream - start from after the 10-byte header
 452.164 +
 452.165 +             //    Extended Header
 452.166 +             if (@$info_id3v2_flags['exthead']) {
 452.167 +                     $extended_header_offset = 0;
 452.168 +
 452.169 +                 if ($id3v2_major_version == 3) {
 452.170 +
 452.171 +                     // v2.3 definition:
 452.172 +                     //Extended header size  $xx xx xx xx   // 32-bit integer
 452.173 +                     //Extended Flags        $xx xx
 452.174 +                     //     %x0000000 %00000000 // v2.3
 452.175 +                     //     x - CRC data present
 452.176 +                     //Size of padding       $xx xx xx xx
 452.177 +
 452.178 +                     $info_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 4), 0);
 452.179 +                     $extended_header_offset += 4;
 452.180 +
 452.181 +                     $info_id3v2['exthead']['flag_bytes'] = 2;
 452.182 +                     $info_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, $info_id3v2['exthead']['flag_bytes']));
 452.183 +                     $extended_header_offset += $info_id3v2['exthead']['flag_bytes'];
 452.184 +
 452.185 +                     $info_id3v2['exthead']['flags']['crc'] = (bool) ($info_id3v2['exthead']['flag_raw'] & 0x8000);
 452.186 +
 452.187 +                     $info_id3v2['exthead']['padding_size'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 4));
 452.188 +                     $extended_header_offset += 4;
 452.189 +
 452.190 +                     if ($info_id3v2['exthead']['flags']['crc']) {
 452.191 +                         $info_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 4));
 452.192 +                         $extended_header_offset += 4;
 452.193 +                     }
 452.194 +                     $extended_header_offset += $info_id3v2['exthead']['padding_size'];
 452.195 +
 452.196 +                 } 
 452.197 +                 
 452.198 +                 elseif ($id3v2_major_version == 4) {
 452.199 +
 452.200 +                     // v2.4 definition:
 452.201 +                     //Extended header size   4 * %0xxxxxxx // 28-bit synchsafe integer
 452.202 +                     //Number of flag bytes       $01
 452.203 +                     //Extended Flags             $xx
 452.204 +                     //     %0bcd0000 // v2.4
 452.205 +                     //     b - Tag is an update
 452.206 +                     //         Flag data length       $00
 452.207 +                     //     c - CRC data present
 452.208 +                     //         Flag data length       $05
 452.209 +                     //         Total frame CRC    5 * %0xxxxxxx
 452.210 +                     //     d - Tag restrictions
 452.211 +                     //         Flag data length       $01
 452.212 +
 452.213 +                     $info_id3v2['exthead']['length']     = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 4), 1);
 452.214 +                     $extended_header_offset += 4;
 452.215 +
 452.216 +                     $info_id3v2['exthead']['flag_bytes'] = 1;
 452.217 +                     $info_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, $info_id3v2['exthead']['flag_bytes']));
 452.218 +                     $extended_header_offset += $info_id3v2['exthead']['flag_bytes'];
 452.219 +
 452.220 +                     $info_id3v2['exthead']['flags']['update']       = (bool) ($info_id3v2['exthead']['flag_raw'] & 0x4000);
 452.221 +                     $info_id3v2['exthead']['flags']['crc']          = (bool) ($info_id3v2['exthead']['flag_raw'] & 0x2000);
 452.222 +                     $info_id3v2['exthead']['flags']['restrictions'] = (bool) ($info_id3v2['exthead']['flag_raw'] & 0x1000);
 452.223 +
 452.224 +                     if ($info_id3v2['exthead']['flags']['crc']) {
 452.225 +                         $info_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 5), 1);
 452.226 +                         $extended_header_offset += 5;
 452.227 +                     }
 452.228 +                     if ($info_id3v2['exthead']['flags']['restrictions']) {
 452.229 +                         // %ppqrrstt
 452.230 +                         $restrictions_raw = getid3_lib::BigEndian2Int(substr($frame_data, $extended_header_offset, 1));
 452.231 +                         $extended_header_offset += 1;
 452.232 +                         $info_id3v2['exthead']['flags']['restrictions']['tagsize']  = ($restrictions_raw && 0xC0) >> 6; // p - Tag size restrictions
 452.233 +                         $info_id3v2['exthead']['flags']['restrictions']['textenc']  = ($restrictions_raw && 0x20) >> 5; // q - Text encoding restrictions
 452.234 +                         $info_id3v2['exthead']['flags']['restrictions']['textsize'] = ($restrictions_raw && 0x18) >> 3; // r - Text fields size restrictions
 452.235 +                         $info_id3v2['exthead']['flags']['restrictions']['imgenc']   = ($restrictions_raw && 0x04) >> 2; // s - Image encoding restrictions
 452.236 +                             $info_id3v2['exthead']['flags']['restrictions']['imgsize']  = ($restrictions_raw && 0x03) >> 0; // t - Image size restrictions
 452.237 +                     }
 452.238 +
 452.239 +                 }
 452.240 +                 $frame_data_offset += $extended_header_offset;
 452.241 +                 $frame_data = substr($frame_data, $extended_header_offset);
 452.242 +             } // end extended header
 452.243 + 
 452.244 +            
 452.245 +            
 452.246 +            
 452.247 +            
 452.248 +            
 452.249 +            while (isset($frame_data) && (strlen($frame_data) > 0)) { // cycle through until no more frame data is left to parse
 452.250 +                if (strlen($frame_data) <= ($id3v2_major_version == 2 ? 6 : 10)) {
 452.251 +                    // insufficient room left in ID3v2 header for actual data - must be padding
 452.252 +                    $info_id3v2['padding']['start']  = $frame_data_offset;
 452.253 +                    $info_id3v2['padding']['length'] = strlen($frame_data);
 452.254 +                    $info_id3v2['padding']['valid']  = true;
 452.255 +                    for ($i = 0; $i < $info_id3v2['padding']['length']; $i++) {
 452.256 +                        if ($frame_data{$i} != "\x00") {
 452.257 +                            $info_id3v2['padding']['valid'] = false;
 452.258 +                            $info_id3v2['padding']['errorpos'] = $info_id3v2['padding']['start'] + $i;
 452.259 +                            $getid3->warning('Invalid ID3v2 padding found at offset '.$info_id3v2['padding']['errorpos'].' (the remaining '.($info_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
 452.260 +                            break;
 452.261 +                        }
 452.262 +                    }
 452.263 +                    break; // skip rest of ID3v2 header
 452.264 +                }
 452.265 +                
 452.266 +                if ($id3v2_major_version == 2) {
 452.267 +                    // Frame ID  $xx xx xx (three characters)
 452.268 +                    // Size      $xx xx xx (24-bit integer)
 452.269 +                    // Flags     $xx xx
 452.270 +
 452.271 +                    $frame_header = substr($frame_data, 0, 6); // take next 6 bytes for header
 452.272 +                    $frame_data    = substr($frame_data, 6);    // and leave the rest in $frame_data
 452.273 +                    $frame_name   = substr($frame_header, 0, 3);
 452.274 +                    $frame_size   = getid3_lib::BigEndian2Int(substr($frame_header, 3, 3));
 452.275 +                    $frame_flags  = 0; // not used for anything in ID3v2.2, just set to avoid E_NOTICEs
 452.276 +
 452.277 +
 452.278 +                } elseif ($id3v2_major_version > 2) {
 452.279 +
 452.280 +                    // Frame ID  $xx xx xx xx (four characters)
 452.281 +                    // Size      $xx xx xx xx (32-bit integer in v2.3, 28-bit synchsafe in v2.4+)
 452.282 +                    // Flags     $xx xx
 452.283 +
 452.284 +                    $frame_header = substr($frame_data, 0, 10); // take next 10 bytes for header
 452.285 +                    $frame_data    = substr($frame_data, 10);    // and leave the rest in $frame_data
 452.286 +
 452.287 +                    $frame_name = substr($frame_header, 0, 4);
 452.288 +
 452.289 +                    if ($id3v2_major_version == 3) {
 452.290 +                        $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4)); // 32-bit integer
 452.291 +
 452.292 +                    } else { // ID3v2.4+
 452.293 +                        $frame_size = getid3_lib::BigEndianSyncSafe2Int(substr($frame_header, 4, 4)); // 32-bit synchsafe integer (28-bit value)
 452.294 +                    }
 452.295 +
 452.296 +                    if ($frame_size < (strlen($frame_data) + 4)) {
 452.297 +                        $nextFrameID = substr($frame_data, $frame_size, 4);
 452.298 +                        if (getid3_id3v2::IsValidID3v2FrameName($nextFrameID, $id3v2_major_version)) {
 452.299 +                            // next frame is OK
 452.300 +                        } elseif (($frame_name == "\x00".'MP3') || ($frame_name == "\x00\x00".'MP') || ($frame_name == ' MP3') || ($frame_name == 'MP3e')) {
 452.301 +                            // MP3ext known broken frames - "ok" for the purposes of this test
 452.302 +                        } elseif (($id3v2_major_version == 4) && (getid3_id3v2::IsValidID3v2FrameName(substr($frame_data, getid3_lib::BigEndian2Int(substr($frame_header, 4, 4)), 4), 3))) {
 452.303 +                            $getid3->warning('ID3v2 tag written as ID3v2.4, but with non-synchsafe integers (ID3v2.3 style). Older versions of (Helium2; iTunes) are known culprits of this. Tag has been parsed as ID3v2.3');
 452.304 +                            $id3v2_major_version = 3;
 452.305 +                            $frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4)); // 32-bit integer
 452.306 +                        }
 452.307 +                    }
 452.308 +
 452.309 +
 452.310 +                    $frame_flags = getid3_lib::BigEndian2Int(substr($frame_header, 8, 2));
 452.311 +                }
 452.312 +
 452.313 +                if ((($id3v2_major_version == 2) && ($frame_name == "\x00\x00\x00")) || ($frame_name == "\x00\x00\x00\x00")) {
 452.314 +                    // padding encountered
 452.315 +
 452.316 +                    $info_id3v2['padding']['start']  = $frame_data_offset;
 452.317 +                    $info_id3v2['padding']['length'] = strlen($frame_header) + strlen($frame_data);
 452.318 +                    $info_id3v2['padding']['valid']  = true;
 452.319 +                    
 452.320 +                    $len = strlen($frame_data);
 452.321 +                    for ($i = 0; $i < $len; $i++) {
 452.322 +                        if ($frame_data{$i} != "\x00") {
 452.323 +                            $info_id3v2['padding']['valid'] = false;
 452.324 +                            $info_id3v2['padding']['errorpos'] = $info_id3v2['padding']['start'] + $i;
 452.325 +                            $getid3->warning('Invalid ID3v2 padding found at offset '.$info_id3v2['padding']['errorpos'].' (the remaining '.($info_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
 452.326 +                            break;
 452.327 +                        }
 452.328 +                    }
 452.329 +                    break; // skip rest of ID3v2 header
 452.330 +                }
 452.331 +
 452.332 +                if ($frame_name == 'COM ') {
 452.333 +                    $getid3->warning('error parsing "'.$frame_name.'" ('.$frame_data_offset.' bytes into the ID3v2.'.$id3v2_major_version.' tag). (ERROR: IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_major_version.'))). [Note: this particular error has been known to happen with tags edited by iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably others too)]');
 452.334 +                    $frame_name = 'COMM';
 452.335 +                }
 452.336 +                if (($frame_size <= strlen($frame_data)) && (getid3_id3v2::IsValidID3v2FrameName($frame_name, $id3v2_major_version))) {
 452.337 +
 452.338 +                    unset($parsed_frame);
 452.339 +                    $parsed_frame['frame_name']      = $frame_name;
 452.340 +                    $parsed_frame['frame_flags_raw'] = $frame_flags;
 452.341 +                    $parsed_frame['data']            = substr($frame_data, 0, $frame_size);
 452.342 +                    $parsed_frame['datalength']      = (int)($frame_size);
 452.343 +                    $parsed_frame['dataoffset']      = $frame_data_offset;
 452.344 +
 452.345 +                    $this->ParseID3v2Frame($parsed_frame);
 452.346 +                    $info_id3v2[$frame_name][] = $parsed_frame;
 452.347 +
 452.348 +                    $frame_data = substr($frame_data, $frame_size);
 452.349 +
 452.350 +                } else { // invalid frame length or FrameID
 452.351 +
 452.352 +                    if ($frame_size <= strlen($frame_data)) {
 452.353 +
 452.354 +                        if (getid3_id3v2::IsValidID3v2FrameName(substr($frame_data, $frame_size, 4), $id3v2_major_version)) {
 452.355 +
 452.356 +                            // next frame is valid, just skip the current frame
 452.357 +                            $frame_data = substr($frame_data, $frame_size);
 452.358 +                            $getid3->warning('Next ID3v2 frame is valid, skipping current frame.');
 452.359 +
 452.360 +                        } else {
 452.361 +
 452.362 +                            // next frame is invalid too, abort processing
 452.363 +                            throw new getid3_exception('Next ID3v2 frame is also invalid, aborting processing.');
 452.364 +
 452.365 +                        }
 452.366 +
 452.367 +                    } elseif ($frame_size == strlen($frame_data)) {
 452.368 +
 452.369 +                        // this is the last frame, just skip
 452.370 +                        $getid3->warning('This was the last ID3v2 frame.');
 452.371 +
 452.372 +                    } else {
 452.373 +
 452.374 +                        // next frame is invalid too, abort processing
 452.375 +                        $frame_data = null;
 452.376 +                        $getid3->warning('Invalid ID3v2 frame size, aborting.');
 452.377 +
 452.378 +                    }
 452.379 +                    if (!getid3_id3v2::IsValidID3v2FrameName($frame_name, $id3v2_major_version)) {
 452.380 +
 452.381 +                        switch ($frame_name) {
 452.382 +                            
 452.383 +                            case "\x00\x00".'MP':
 452.384 +                            case "\x00".'MP3':
 452.385 +                            case ' MP3':
 452.386 +                            case 'MP3e':
 452.387 +                            case "\x00".'MP':
 452.388 +                            case ' MP':
 452.389 +                            case 'MP3':
 452.390 +                                $getid3->warning('error parsing "'.$frame_name.'" ('.$frame_data_offset.' bytes into the ID3v2.'.$id3v2_major_version.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_major_version.'))). [Note: this particular error has been known to happen with tags edited by "MP3ext (www.mutschler.de/mp3ext/)"]');
 452.391 +                                break;
 452.392 +
 452.393 +                            default:
 452.394 +                                $getid3->warning('error parsing "'.$frame_name.'" ('.$frame_data_offset.' bytes into the ID3v2.'.$id3v2_major_version.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_major_version.'))).');
 452.395 +                                break;
 452.396 +                        }
 452.397 +
 452.398 +                    } elseif ($frame_size > strlen(@$frame_data)){
 452.399 +
 452.400 +                        throw new getid3_exception('error parsing "'.$frame_name.'" ('.$frame_data_offset.' bytes into the ID3v2.'.$id3v2_major_version.' tag). (ERROR: $frame_size ('.$frame_size.') > strlen($frame_data) ('.strlen($frame_data).')).');
 452.401 +
 452.402 +                    } else {
 452.403 +
 452.404 +                        throw new getid3_exception('error parsing "'.$frame_name.'" ('.$frame_data_offset.' bytes into the ID3v2.'.$id3v2_major_version.' tag).');
 452.405 +
 452.406 +                    }
 452.407 +
 452.408 +                }
 452.409 +                $frame_data_offset += ($frame_size + ($id3v2_major_version == 2 ? 6 : 10));
 452.410 +
 452.411 +            }
 452.412 +
 452.413 +        }
 452.414 +
 452.415 +
 452.416 +        //    Footer
 452.417 +    
 452.418 +        //    The footer is a copy of the header, but with a different identifier.
 452.419 +        //        ID3v2 identifier           "3DI"
 452.420 +        //        ID3v2 version              $04 00
 452.421 +        //        ID3v2 flags                %abcd0000
 452.422 +        //        ID3v2 size             4 * %0xxxxxxx
 452.423 +
 452.424 +        if (isset($info_id3v2_flags['isfooter']) && $info_id3v2_flags['isfooter']) {
 452.425 +            $footer = fread ($getid3->fp, 10);
 452.426 +            if (substr($footer, 0, 3) == '3DI') {
 452.427 +                $info_id3v2['footer'] = true;
 452.428 +                $info_id3v2['majorversion_footer'] = ord($footer{3});
 452.429 +                $info_id3v2['minorversion_footer'] = ord($footer{4});
 452.430 +            }
 452.431 +            if ($info_id3v2['majorversion_footer'] <= 4) {
 452.432 +                $id3_flags = ord($footer{5});
 452.433 +                $info_id3v2_flags['unsynch_footer']  = (bool)($id3_flags & 0x80);
 452.434 +                $info_id3v2_flags['extfoot_footer']  = (bool)($id3_flags & 0x40);
 452.435 +                $info_id3v2_flags['experim_footer']  = (bool)($id3_flags & 0x20);
 452.436 +                $info_id3v2_flags['isfooter_footer'] = (bool)($id3_flags & 0x10);
 452.437 +
 452.438 +                $info_id3v2['footerlength'] = getid3_lib::BigEndianSyncSafe2Int(substr($footer, 6, 4));
 452.439 +            }
 452.440 +        } // end footer
 452.441 +
 452.442 +        if (isset($info_id3v2['comments']['genre'])) {
 452.443 +            foreach ($info_id3v2['comments']['genre'] as $key => $value) {
 452.444 +                unset($info_id3v2['comments']['genre'][$key]);
 452.445 +                $info_id3v2['comments'] = getid3_id3v2::array_merge_noclobber($info_id3v2['comments'], getid3_id3v2::ParseID3v2GenreString($value));
 452.446 +            }
 452.447 +        }
 452.448 +
 452.449 +        if (isset($info_id3v2['comments']['track'])) {
 452.450 +            foreach ($info_id3v2['comments']['track'] as $key => $value) {
 452.451 +                if (strstr($value, '/')) {
 452.452 +                    list($info_id3v2['comments']['track'][$key], $info_id3v2['comments']['totaltracks'][$key]) = explode('/', $info_id3v2['comments']['track'][$key]);
 452.453 +                }
 452.454 +            }
 452.455 +        }
 452.456 +        
 452.457 +        // Use year from recording time if year not set
 452.458 +        if (!isset($info_id3v2['comments']['year']) && ereg('^([0-9]{4})', @$info_id3v2['comments']['recording_time'][0], $matches)) {
 452.459 +			$info_id3v2['comments']['year'] = array ($matches[1]);
 452.460 +		}
 452.461 +
 452.462 +        // Set avdataoffset
 452.463 +        $getid3->info['avdataoffset'] = $info_id3v2['headerlength'];
 452.464 +        if (isset($info_id3v2['footer'])) {
 452.465 +            $getid3->info['avdataoffset'] += 10;
 452.466 +        }
 452.467 +
 452.468 +        return true;
 452.469 +    }
 452.470 +
 452.471 +
 452.472 +
 452.473 +    private function ParseID3v2Frame(&$parsed_frame) {
 452.474 +        
 452.475 +        $getid3 = $this->getid3;
 452.476 +
 452.477 +        $id3v2_major_version = $getid3->info['id3v2']['majorversion'];
 452.478 +
 452.479 +        $frame_name_long  = getid3_id3v2::FrameNameLongLookup($parsed_frame['frame_name']);
 452.480 +        if ($frame_name_long) {
 452.481 +            $parsed_frame['framenamelong']  = $frame_name_long; 
 452.482 +        }
 452.483 +        
 452.484 +        $frame_name_short = getid3_id3v2::FrameNameShortLookup($parsed_frame['frame_name']);
 452.485 +        if ($frame_name_short) {
 452.486 +            $parsed_frame['framenameshort']  = $frame_name_short; 
 452.487 +        }
 452.488 +
 452.489 +        if ($id3v2_major_version >= 3) { // frame flags are not part of the ID3v2.2 standard
 452.490 +
 452.491 +            if ($id3v2_major_version == 3) {
 452.492 +
 452.493 +                //    Frame Header Flags
 452.494 +                //    %abc00000 %ijk00000
 452.495 +
 452.496 +                $parsed_frame['flags']['TagAlterPreservation']  = (bool)($parsed_frame['frame_flags_raw'] & 0x8000); // a - Tag alter preservation
 452.497 +                $parsed_frame['flags']['FileAlterPreservation'] = (bool)($parsed_frame['frame_flags_raw'] & 0x4000); // b - File alter preservation
 452.498 +                $parsed_frame['flags']['ReadOnly']              = (bool)($parsed_frame['frame_flags_raw'] & 0x2000); // c - Read only
 452.499 +                $parsed_frame['flags']['compression']           = (bool)($parsed_frame['frame_flags_raw'] & 0x0080); // i - Compression
 452.500 +                $parsed_frame['flags']['Encryption']            = (bool)($parsed_frame['frame_flags_raw'] & 0x0040); // j - Encryption
 452.501 +                $parsed_frame['flags']['GroupingIdentity']      = (bool)($parsed_frame['frame_flags_raw'] & 0x0020); // k - Grouping identity
 452.502 +
 452.503 +
 452.504 +            } elseif ($id3v2_major_version == 4) {
 452.505 +
 452.506 +                //    Frame Header Flags
 452.507 +                //    %0abc0000 %0h00kmnp
 452.508 +
 452.509 +                $parsed_frame['flags']['TagAlterPreservation']  = (bool)($parsed_frame['frame_flags_raw'] & 0x4000); // a - Tag alter preservation
 452.510 +                $parsed_frame['flags']['FileAlterPreservation'] = (bool)($parsed_frame['frame_flags_raw'] & 0x2000); // b - File alter preservation
 452.511 +                $parsed_frame['flags']['ReadOnly']              = (bool)($parsed_frame['frame_flags_raw'] & 0x1000); // c - Read only
 452.512 +                $parsed_frame['flags']['GroupingIdentity']      = (bool)($parsed_frame['frame_flags_raw'] & 0x0040); // h - Grouping identity
 452.513 +                $parsed_frame['flags']['compression']           = (bool)($parsed_frame['frame_flags_raw'] & 0x0008); // k - Compression
 452.514 +                $parsed_frame['flags']['Encryption']            = (bool)($parsed_frame['frame_flags_raw'] & 0x0004); // m - Encryption
 452.515 +                $parsed_frame['flags']['Unsynchronisation']     = (bool)($parsed_frame['frame_flags_raw'] & 0x0002); // n - Unsynchronisation
 452.516 +                $parsed_frame['flags']['DataLengthIndicator']   = (bool)($parsed_frame['frame_flags_raw'] & 0x0001); // p - Data length indicator
 452.517 +
 452.518 +                // Frame-level de-unsynchronisation - ID3v2.4
 452.519 +                if ($parsed_frame['flags']['Unsynchronisation']) {
 452.520 +                    $parsed_frame['data'] = str_replace("\xFF\x00", "\xFF", $parsed_frame['data']);
 452.521 +                }
 452.522 +            }
 452.523 +
 452.524 +            //    Frame-level de-compression
 452.525 +            if ($parsed_frame['flags']['compression']) {
 452.526 +                $parsed_frame['decompressed_size'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], 0, 4));
 452.527 +                
 452.528 +                if (!function_exists('gzuncompress')) {
 452.529 +                    $getid3->warning('gzuncompress() support required to decompress ID3v2 frame "'.$parsed_frame['frame_name'].'"');
 452.530 +                } elseif ($decompressed_data = @gzuncompress(substr($parsed_frame['data'], 4))) {
 452.531 +                    $parsed_frame['data'] = $decompressed_data;
 452.532 +                } else {
 452.533 +                    $getid3->warning('gzuncompress() failed on compressed contents of ID3v2 frame "'.$parsed_frame['frame_name'].'"');
 452.534 +                }
 452.535 +            }
 452.536 +        }
 452.537 +
 452.538 +
 452.539 +        if (isset($parsed_frame['datalength']) && ($parsed_frame['datalength'] == 0)) {
 452.540 +
 452.541 +            $warning = 'Frame "'.$parsed_frame['frame_name'].'" at offset '.$parsed_frame['dataoffset'].' has no data portion';
 452.542 +            switch ($parsed_frame['frame_name']) {
 452.543 +                case 'WCOM':
 452.544 +                    $warning .= ' (this is known to happen with files tagged by RioPort)';
 452.545 +                    break;
 452.546 +
 452.547 +                default:
 452.548 +                    break;
 452.549 +            }
 452.550 +            $getid3->warning($warning);
 452.551 +            return true;
 452.552 +        }
 452.553 +        
 452.554 +        
 452.555 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'UFID')) ||   // 4.1   UFID Unique file identifier
 452.556 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'UFI'))) {    // 4.1   UFI  Unique file identifier
 452.557 +
 452.558 +            //   There may be more than one 'UFID' frame in a tag,
 452.559 +            //   but only one with the same 'Owner identifier'.
 452.560 +            // <Header for 'Unique file identifier', ID: 'UFID'>
 452.561 +            // Owner identifier        <text string> $00
 452.562 +            // Identifier              <up to 64 bytes binary data>
 452.563 +
 452.564 +            $frame_terminator_pos = strpos($parsed_frame['data'], "\x00");
 452.565 +            $frame_id_string = substr($parsed_frame['data'], 0, $frame_terminator_pos);
 452.566 +            $parsed_frame['ownerid'] = $frame_id_string;
 452.567 +            $parsed_frame['data'] = substr($parsed_frame['data'], $frame_terminator_pos + strlen("\x00"));
 452.568 +            unset($parsed_frame['data']);
 452.569 +            return true;
 452.570 +        }
 452.571 +
 452.572 +
 452.573 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'TXXX')) ||   // 4.2.2 TXXX User defined text information frame
 452.574 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'TXX'))) {    // 4.2.2 TXX  User defined text information frame
 452.575 +
 452.576 +            //   There may be more than one 'TXXX' frame in each tag,
 452.577 +            //   but only one with the same description.
 452.578 +            // <Header for 'User defined text information frame', ID: 'TXXX'>
 452.579 +            // Text encoding     $xx
 452.580 +            // Description       <text string according to encoding> $00 (00)
 452.581 +            // Value             <text string according to encoding>
 452.582 +
 452.583 +            $frame_offset = 0;
 452.584 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.585 +
 452.586 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.587 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.588 +            }
 452.589 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
 452.590 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.591 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.592 +            }
 452.593 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
 452.594 +            if (ord($frame_description) === 0) {
 452.595 +                $frame_description = '';
 452.596 +            }
 452.597 +            $parsed_frame['encodingid']  = $frame_text_encoding;
 452.598 +            $parsed_frame['encoding']    = $this->TextEncodingNameLookup($frame_text_encoding);
 452.599 +
 452.600 +            $parsed_frame['description'] = $frame_description;
 452.601 +            $parsed_frame['data'] = substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
 452.602 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.603 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = trim($getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']));
 452.604 +            }
 452.605 +            unset($parsed_frame['data']);
 452.606 +            return true;
 452.607 +        }
 452.608 +        
 452.609 +
 452.610 +        if ($parsed_frame['frame_name']{0} == 'T') { // 4.2. T??[?] Text information frame
 452.611 +
 452.612 +            //   There may only be one text information frame of its kind in an tag.
 452.613 +            // <Header for 'Text information frame', ID: 'T000' - 'TZZZ',
 452.614 +            // excluding 'TXXX' described in 4.2.6.>
 452.615 +            // Text encoding                $xx
 452.616 +            // Information                  <text string(s) according to encoding>
 452.617 +
 452.618 +            $frame_offset = 0;
 452.619 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.620 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.621 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.622 +            }
 452.623 +
 452.624 +            $parsed_frame['data'] = (string)substr($parsed_frame['data'], $frame_offset);
 452.625 +
 452.626 +            $parsed_frame['encodingid'] = $frame_text_encoding;
 452.627 +            $parsed_frame['encoding']   = $this->TextEncodingNameLookup($frame_text_encoding);
 452.628 +
 452.629 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.630 +                
 452.631 +                // remove possible terminating \x00 (put by encoding id or software bug)
 452.632 +                $string = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']);
 452.633 +                if ($string[strlen($string)-1] = "\x00") {
 452.634 +                    $string = substr($string, 0, strlen($string)-1);
 452.635 +                }
 452.636 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $string;
 452.637 +                unset($string);
 452.638 +            }
 452.639 +            return true;
 452.640 +        }
 452.641 +
 452.642 +
 452.643 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'WXXX')) ||   // 4.3.2 WXXX User defined URL link frame
 452.644 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'WXX'))) {    // 4.3.2 WXX  User defined URL link frame
 452.645 +            
 452.646 +            //   There may be more than one 'WXXX' frame in each tag,
 452.647 +            //   but only one with the same description
 452.648 +            // <Header for 'User defined URL link frame', ID: 'WXXX'>
 452.649 +            // Text encoding     $xx
 452.650 +            // Description       <text string according to encoding> $00 (00)
 452.651 +            // URL               <text string>
 452.652 +
 452.653 +            $frame_offset = 0;
 452.654 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.655 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.656 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.657 +            }
 452.658 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
 452.659 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.660 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.661 +            }
 452.662 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
 452.663 +
 452.664 +            if (ord($frame_description) === 0) {
 452.665 +                $frame_description = '';
 452.666 +            }
 452.667 +            $parsed_frame['data'] = substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
 452.668 +
 452.669 +            $frame_terminator_pos = strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
 452.670 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.671 +                $frame_terminator_pos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.672 +            }
 452.673 +            if ($frame_terminator_pos) {
 452.674 +                // there are null bytes after the data - this is not according to spec
 452.675 +                // only use data up to first null byte
 452.676 +                $frame_urldata = (string)substr($parsed_frame['data'], 0, $frame_terminator_pos);
 452.677 +            } else {
 452.678 +                // no null bytes following data, just use all data
 452.679 +                $frame_urldata = (string)$parsed_frame['data'];
 452.680 +            }
 452.681 +
 452.682 +            $parsed_frame['encodingid']  = $frame_text_encoding;
 452.683 +            $parsed_frame['encoding']    = $this->TextEncodingNameLookup($frame_text_encoding);
 452.684 +
 452.685 +            $parsed_frame['url']         = $frame_urldata;
 452.686 +            $parsed_frame['description'] = $frame_description;
 452.687 +            if (!empty($parsed_frame['framenameshort']) && $parsed_frame['url']) {
 452.688 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['url']);
 452.689 +            }
 452.690 +            unset($parsed_frame['data']);
 452.691 +            return true;
 452.692 +        }
 452.693 +
 452.694 +
 452.695 +        if ($parsed_frame['frame_name']{0} == 'W') {        // 4.3. W??? URL link frames
 452.696 +
 452.697 +            //   There may only be one URL link frame of its kind in a tag,
 452.698 +            //   except when stated otherwise in the frame description
 452.699 +            // <Header for 'URL link frame', ID: 'W000' - 'WZZZ', excluding 'WXXX'
 452.700 +            // described in 4.3.2.>
 452.701 +            // URL              <text string>
 452.702 +
 452.703 +            $parsed_frame['url'] = trim($parsed_frame['data']);
 452.704 +            if (!empty($parsed_frame['framenameshort']) && $parsed_frame['url']) {
 452.705 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $parsed_frame['url'];
 452.706 +            }
 452.707 +            unset($parsed_frame['data']);
 452.708 +            return true;
 452.709 +        }
 452.710 +
 452.711 +
 452.712 +        if ((($id3v2_major_version == 3) && ($parsed_frame['frame_name'] == 'IPLS')) ||    // 4.4  IPLS Involved people list (ID3v2.3 only)
 452.713 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'IPL'))) {     // 4.4  IPL  Involved people list (ID3v2.2 only)
 452.714 +
 452.715 +            //   There may only be one 'IPL' frame in each tag
 452.716 +            // <Header for 'User defined URL link frame', ID: 'IPL'>
 452.717 +            // Text encoding     $xx
 452.718 +            // People list strings    <textstrings>
 452.719 +
 452.720 +            $frame_offset = 0;
 452.721 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.722 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.723 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.724 +            }
 452.725 +            $parsed_frame['encodingid'] = $frame_text_encoding;
 452.726 +            $parsed_frame['encoding']   = $this->TextEncodingNameLookup($parsed_frame['encodingid']);
 452.727 +
 452.728 +            $parsed_frame['data']       = (string)substr($parsed_frame['data'], $frame_offset);
 452.729 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.730 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']);
 452.731 +            }
 452.732 +            return true;
 452.733 +        }
 452.734 +
 452.735 +
 452.736 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'MCDI')) ||    // 4.4   MCDI Music CD identifier
 452.737 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'MCI'))) {     // 4.5   MCI  Music CD identifier
 452.738 +
 452.739 +            //   There may only be one 'MCDI' frame in each tag
 452.740 +            // <Header for 'Music CD identifier', ID: 'MCDI'>
 452.741 +            // CD TOC                <binary data>
 452.742 +
 452.743 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.744 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $parsed_frame['data'];
 452.745 +            }
 452.746 +            return true;
 452.747 +        }
 452.748 +
 452.749 +
 452.750 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'ETCO')) ||    // 4.5   ETCO Event timing codes
 452.751 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'ETC'))) {     // 4.6   ETC  Event timing codes
 452.752 +
 452.753 +            //   There may only be one 'ETCO' frame in each tag
 452.754 +            // <Header for 'Event timing codes', ID: 'ETCO'>
 452.755 +            // Time stamp format    $xx
 452.756 +            //   Where time stamp format is:
 452.757 +            // $01  (32-bit value) MPEG frames from beginning of file
 452.758 +            // $02  (32-bit value) milliseconds from beginning of file
 452.759 +            //   Followed by a list of key events in the following format:
 452.760 +            // Type of event   $xx
 452.761 +            // Time stamp      $xx (xx ...)
 452.762 +            //   The 'Time stamp' is set to zero if directly at the beginning of the sound
 452.763 +            //   or after the previous event. All events MUST be sorted in chronological order.
 452.764 +
 452.765 +            $frame_offset = 0;
 452.766 +            $parsed_frame['timestampformat'] = ord($parsed_frame['data']{$frame_offset++});
 452.767 +
 452.768 +            while ($frame_offset < strlen($parsed_frame['data'])) {
 452.769 +                $parsed_frame['typeid']    = $parsed_frame['data']{$frame_offset++};
 452.770 +                $parsed_frame['type']      = getid3_id3v2::ETCOEventLookup($parsed_frame['typeid']);
 452.771 +                $parsed_frame['timestamp'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
 452.772 +                $frame_offset += 4;
 452.773 +            }
 452.774 +            unset($parsed_frame['data']);
 452.775 +            return true;
 452.776 +        }
 452.777 +
 452.778 +
 452.779 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'MLLT')) ||     // 4.6   MLLT MPEG location lookup table
 452.780 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'MLL'))) {      // 4.7   MLL MPEG location lookup table
 452.781 +            
 452.782 +            //   There may only be one 'MLLT' frame in each tag
 452.783 +            // <Header for 'Location lookup table', ID: 'MLLT'>
 452.784 +            // MPEG frames between reference  $xx xx
 452.785 +            // Bytes between reference        $xx xx xx
 452.786 +            // Milliseconds between reference $xx xx xx
 452.787 +            // Bits for bytes deviation       $xx
 452.788 +            // Bits for milliseconds dev.     $xx
 452.789 +            //   Then for every reference the following data is included;
 452.790 +            // Deviation in bytes         %xxx....
 452.791 +            // Deviation in milliseconds  %xxx....
 452.792 +
 452.793 +            $frame_offset = 0;
 452.794 +            $parsed_frame['framesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], 0, 2));
 452.795 +            $parsed_frame['bytesbetweenreferences']  = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], 2, 3));
 452.796 +            $parsed_frame['msbetweenreferences']     = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], 5, 3));
 452.797 +            $parsed_frame['bitsforbytesdeviation']   = getid3_lib::BigEndian2Int($parsed_frame['data'][8]);
 452.798 +            $parsed_frame['bitsformsdeviation']      = getid3_lib::BigEndian2Int($parsed_frame['data'][9]);
 452.799 +            $parsed_frame['data'] = substr($parsed_frame['data'], 10);
 452.800 +            
 452.801 +            while ($frame_offset < strlen($parsed_frame['data'])) {
 452.802 +                $deviation_bitstream .= getid3_lib::BigEndian2Bin($parsed_frame['data']{$frame_offset++});
 452.803 +            }
 452.804 +            $reference_counter = 0;
 452.805 +            while (strlen($deviation_bitstream) > 0) {
 452.806 +                $parsed_frame[$reference_counter]['bytedeviation'] = bindec(substr($deviation_bitstream, 0, $parsed_frame['bitsforbytesdeviation']));
 452.807 +                $parsed_frame[$reference_counter]['msdeviation']   = bindec(substr($deviation_bitstream, $parsed_frame['bitsforbytesdeviation'], $parsed_frame['bitsformsdeviation']));
 452.808 +                $deviation_bitstream = substr($deviation_bitstream, $parsed_frame['bitsforbytesdeviation'] + $parsed_frame['bitsformsdeviation']);
 452.809 +                $reference_counter++;
 452.810 +            }
 452.811 +            unset($parsed_frame['data']);
 452.812 +            return true;
 452.813 +        }
 452.814 +
 452.815 +
 452.816 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'SYTC')) ||    // 4.7   SYTC Synchronised tempo codes
 452.817 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'STC'))) {     // 4.8   STC  Synchronised tempo codes
 452.818 +            
 452.819 +            //   There may only be one 'SYTC' frame in each tag
 452.820 +            // <Header for 'Synchronised tempo codes', ID: 'SYTC'>
 452.821 +            // Time stamp format   $xx
 452.822 +            // Tempo data          <binary data>
 452.823 +            //   Where time stamp format is:
 452.824 +            // $01  (32-bit value) MPEG frames from beginning of file
 452.825 +            // $02  (32-bit value) milliseconds from beginning of file
 452.826 +
 452.827 +            $frame_offset = 0;
 452.828 +            $parsed_frame['timestampformat'] = ord($parsed_frame['data']{$frame_offset++});
 452.829 +            $timestamp_counter = 0;
 452.830 +            while ($frame_offset < strlen($parsed_frame['data'])) {
 452.831 +                $parsed_frame[$timestamp_counter]['tempo'] = ord($parsed_frame['data']{$frame_offset++});
 452.832 +                if ($parsed_frame[$timestamp_counter]['tempo'] == 255) {
 452.833 +                    $parsed_frame[$timestamp_counter]['tempo'] += ord($parsed_frame['data']{$frame_offset++});
 452.834 +                }
 452.835 +                $parsed_frame[$timestamp_counter]['timestamp'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
 452.836 +                $frame_offset += 4;
 452.837 +                $timestamp_counter++;
 452.838 +            }
 452.839 +            unset($parsed_frame['data']);
 452.840 +            return true;
 452.841 +        }
 452.842 +
 452.843 +  
 452.844 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'USLT')) ||    // 4.8   USLT Unsynchronised lyric/text transcription
 452.845 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'ULT'))) {     // 4.9   ULT  Unsynchronised lyric/text transcription
 452.846 +            
 452.847 +            //   There may be more than one 'Unsynchronised lyrics/text transcription' frame
 452.848 +            //   in each tag, but only one with the same language and content descriptor.
 452.849 +            // <Header for 'Unsynchronised lyrics/text transcription', ID: 'USLT'>
 452.850 +            // Text encoding        $xx
 452.851 +            // Language             $xx xx xx
 452.852 +            // Content descriptor   <text string according to encoding> $00 (00)
 452.853 +            // Lyrics/text          <full text string according to encoding>
 452.854 +
 452.855 +            $frame_offset = 0;
 452.856 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.857 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.858 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.859 +            }
 452.860 +            $frame_language = substr($parsed_frame['data'], $frame_offset, 3);
 452.861 +            $frame_offset += 3;
 452.862 +            if ($frame_offset > strlen($parsed_frame['data'])) {
 452.863 +                $frame_offset = strlen($parsed_frame['data']) - 1;
 452.864 +            }
 452.865 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
 452.866 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.867 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.868 +            }
 452.869 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
 452.870 +            if (ord($frame_description) === 0) {
 452.871 +                $frame_description = '';
 452.872 +            }
 452.873 +            $parsed_frame['data'] = substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
 452.874 +
 452.875 +            $parsed_frame['encodingid']   = $frame_text_encoding;
 452.876 +            $parsed_frame['encoding']     = $this->TextEncodingNameLookup($frame_text_encoding);
 452.877 +
 452.878 +            $parsed_frame['data']         = $parsed_frame['data'];
 452.879 +            $parsed_frame['language']     = $frame_language;
 452.880 +            $parsed_frame['languagename'] = getid3_id3v2::LanguageLookup($frame_language, false);
 452.881 +            $parsed_frame['description']  = $frame_description;
 452.882 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.883 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']);
 452.884 +            }
 452.885 +            unset($parsed_frame['data']);
 452.886 +            return true;
 452.887 +        }
 452.888 +
 452.889 +
 452.890 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'SYLT')) ||    // 4.9   SYLT Synchronised lyric/text
 452.891 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'SLT'))) {     // 4.10  SLT  Synchronised lyric/text
 452.892 +            
 452.893 +            //   There may be more than one 'SYLT' frame in each tag,
 452.894 +            //   but only one with the same language and content descriptor.
 452.895 +            // <Header for 'Synchronised lyrics/text', ID: 'SYLT'>
 452.896 +            // Text encoding        $xx
 452.897 +            // Language             $xx xx xx
 452.898 +            // Time stamp format    $xx
 452.899 +            //   $01  (32-bit value) MPEG frames from beginning of file
 452.900 +            //   $02  (32-bit value) milliseconds from beginning of file
 452.901 +            // Content type         $xx
 452.902 +            // Content descriptor   <text string according to encoding> $00 (00)
 452.903 +            //   Terminated text to be synced (typically a syllable)
 452.904 +            //   Sync identifier (terminator to above string)   $00 (00)
 452.905 +            //   Time stamp                                     $xx (xx ...)
 452.906 +
 452.907 +            $frame_offset = 0;
 452.908 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.909 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.910 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.911 +            }
 452.912 +            $frame_language = substr($parsed_frame['data'], $frame_offset, 3);
 452.913 +            $frame_offset += 3;
 452.914 +            $parsed_frame['timestampformat'] = ord($parsed_frame['data']{$frame_offset++});
 452.915 +            $parsed_frame['contenttypeid']   = ord($parsed_frame['data']{$frame_offset++});
 452.916 +            $parsed_frame['contenttype']     = getid3_id3v2::SYTLContentTypeLookup($parsed_frame['contenttypeid']);
 452.917 +            $parsed_frame['encodingid']      = $frame_text_encoding;
 452.918 +            $parsed_frame['encoding']        = $this->TextEncodingNameLookup($frame_text_encoding);
 452.919 +
 452.920 +            $parsed_frame['language']        = $frame_language;
 452.921 +            $parsed_frame['languagename']    = getid3_id3v2::LanguageLookup($frame_language, false);
 452.922 +
 452.923 +            $timestamp_index = 0;
 452.924 +            $frame_remaining_data = substr($parsed_frame['data'], $frame_offset);
 452.925 +            while (strlen($frame_remaining_data)) {
 452.926 +                $frame_offset = 0;
 452.927 +                $frame_terminator_pos = strpos($frame_remaining_data, getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
 452.928 +                if ($frame_terminator_pos === false) {
 452.929 +                    $frame_remaining_data = '';
 452.930 +                } else {
 452.931 +                    if (ord(substr($frame_remaining_data, $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.932 +                        $frame_terminator_pos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.933 +                    }
 452.934 +                    $parsed_frame['lyrics'][$timestamp_index]['data'] = substr($frame_remaining_data, $frame_offset, $frame_terminator_pos - $frame_offset);
 452.935 +
 452.936 +                    $frame_remaining_data = substr($frame_remaining_data, $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
 452.937 +                    if (($timestamp_index == 0) && (ord($frame_remaining_data{0}) != 0)) {
 452.938 +                        // timestamp probably omitted for first data item
 452.939 +                    } else {
 452.940 +                        $parsed_frame['lyrics'][$timestamp_index]['timestamp'] = getid3_lib::BigEndian2Int(substr($frame_remaining_data, 0, 4));
 452.941 +                        $frame_remaining_data = substr($frame_remaining_data, 4);
 452.942 +                    }
 452.943 +                    $timestamp_index++;
 452.944 +                }
 452.945 +            }
 452.946 +            unset($parsed_frame['data']);
 452.947 +            return true;
 452.948 +        }
 452.949 +
 452.950 +
 452.951 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'COMM')) ||    // 4.10  COMM Comments
 452.952 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'COM'))) {     // 4.11  COM  Comments
 452.953 +            
 452.954 +            //   There may be more than one comment frame in each tag,
 452.955 +            //   but only one with the same language and content descriptor.
 452.956 +            // <Header for 'Comment', ID: 'COMM'>
 452.957 +            // Text encoding          $xx
 452.958 +            // Language               $xx xx xx
 452.959 +            // Short content descrip. <text string according to encoding> $00 (00)
 452.960 +            // The actual text        <full text string according to encoding>
 452.961 +
 452.962 +            if (strlen($parsed_frame['data']) < 5) {
 452.963 +
 452.964 +                $getid3->warning('Invalid data (too short) for "'.$parsed_frame['frame_name'].'" frame at offset '.$parsed_frame['dataoffset']);
 452.965 +                return true;
 452.966 +            }
 452.967 +
 452.968 +            $frame_offset = 0;
 452.969 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
 452.970 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
 452.971 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
 452.972 +            }
 452.973 +            $frame_language = substr($parsed_frame['data'], $frame_offset, 3);
 452.974 +            $frame_offset += 3;
 452.975 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
 452.976 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
 452.977 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
 452.978 +            }
 452.979 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
 452.980 +            if (ord($frame_description) === 0) {
 452.981 +                $frame_description = '';
 452.982 +            }
 452.983 +            $frame_text = (string)substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
 452.984 +
 452.985 +            $parsed_frame['encodingid']   = $frame_text_encoding;
 452.986 +            $parsed_frame['encoding']     = $this->TextEncodingNameLookup($frame_text_encoding);
 452.987 +
 452.988 +            $parsed_frame['language']     = $frame_language;
 452.989 +            $parsed_frame['languagename'] = getid3_id3v2::LanguageLookup($frame_language, false);
 452.990 +            $parsed_frame['description']  = $frame_description;
 452.991 +            $parsed_frame['data']         = $frame_text;
 452.992 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
 452.993 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']);
 452.994 +            }
 452.995 +            return true;
 452.996 +        }
 452.997 +            
 452.998 +
 452.999 +        if (($id3v2_major_version >= 4) && ($parsed_frame['frame_name'] == 'RVA2')) {   // 4.11  RVA2 Relative volume adjustment (2) (ID3v2.4+ only)
452.1000 +            
452.1001 +            //   There may be more than one 'RVA2' frame in each tag,
452.1002 +            //   but only one with the same identification string
452.1003 +            // <Header for 'Relative volume adjustment (2)', ID: 'RVA2'>
452.1004 +            // Identification          <text string> $00
452.1005 +            //   The 'identification' string is used to identify the situation and/or
452.1006 +            //   device where this adjustment should apply. The following is then
452.1007 +            //   repeated for every channel:
452.1008 +            // Type of channel         $xx
452.1009 +            // Volume adjustment       $xx xx
452.1010 +            // Bits representing peak  $xx
452.1011 +            // Peak volume             $xx (xx ...)
452.1012 +
452.1013 +            $frame_terminator_pos = strpos($parsed_frame['data'], "\x00");
452.1014 +            $frame_id_string = substr($parsed_frame['data'], 0, $frame_terminator_pos);
452.1015 +            if (ord($frame_id_string) === 0) {
452.1016 +                $frame_id_string = '';
452.1017 +            }
452.1018 +            $frame_remaining_data = substr($parsed_frame['data'], $frame_terminator_pos + strlen("\x00"));
452.1019 +            $parsed_frame['description'] = $frame_id_string;
452.1020 +            
452.1021 +            while (strlen($frame_remaining_data)) {
452.1022 +                $frame_offset = 0;
452.1023 +                $frame_channeltypeid = ord(substr($frame_remaining_data, $frame_offset++, 1));
452.1024 +                $parsed_frame[$frame_channeltypeid]['channeltypeid']  = $frame_channeltypeid;
452.1025 +                $parsed_frame[$frame_channeltypeid]['channeltype']    = getid3_id3v2::RVA2ChannelTypeLookup($frame_channeltypeid);
452.1026 +                $parsed_frame[$frame_channeltypeid]['volumeadjust']   = getid3_lib::BigEndian2Int(substr($frame_remaining_data, $frame_offset, 2), true); // 16-bit signed
452.1027 +                $frame_offset += 2;
452.1028 +                $parsed_frame[$frame_channeltypeid]['bitspeakvolume'] = ord(substr($frame_remaining_data, $frame_offset++, 1));
452.1029 +                $frame_bytespeakvolume = ceil($parsed_frame[$frame_channeltypeid]['bitspeakvolume'] / 8);
452.1030 +                $parsed_frame[$frame_channeltypeid]['peakvolume']     = getid3_lib::BigEndian2Int(substr($frame_remaining_data, $frame_offset, $frame_bytespeakvolume));
452.1031 +                $frame_remaining_data = substr($frame_remaining_data, $frame_offset + $frame_bytespeakvolume);
452.1032 +            }
452.1033 +            unset($parsed_frame['data']);
452.1034 +            return true;
452.1035 +        }
452.1036 +        
452.1037 +
452.1038 +        if ((($id3v2_major_version == 3) && ($parsed_frame['frame_name'] == 'RVAD')) ||     // 4.12  RVAD Relative volume adjustment (ID3v2.3 only)
452.1039 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'RVA'))) {      // 4.12  RVA  Relative volume adjustment (ID3v2.2 only)
452.1040 +            
452.1041 +            //   There may only be one 'RVA' frame in each tag
452.1042 +            // <Header for 'Relative volume adjustment', ID: 'RVA'>
452.1043 +            // ID3v2.2 => Increment/decrement     %000000ba
452.1044 +            // ID3v2.3 => Increment/decrement     %00fedcba
452.1045 +            // Bits used for volume descr.        $xx
452.1046 +            // Relative volume change, right      $xx xx (xx ...) // a
452.1047 +            // Relative volume change, left       $xx xx (xx ...) // b
452.1048 +            // Peak volume right                  $xx xx (xx ...)
452.1049 +            // Peak volume left                   $xx xx (xx ...)
452.1050 +            //   ID3v2.3 only, optional (not present in ID3v2.2):
452.1051 +            // Relative volume change, right back $xx xx (xx ...) // c
452.1052 +            // Relative volume change, left back  $xx xx (xx ...) // d
452.1053 +            // Peak volume right back             $xx xx (xx ...)
452.1054 +            // Peak volume left back              $xx xx (xx ...)
452.1055 +            //   ID3v2.3 only, optional (not present in ID3v2.2):
452.1056 +            // Relative volume change, center     $xx xx (xx ...) // e
452.1057 +            // Peak volume center                 $xx xx (xx ...)
452.1058 +            //   ID3v2.3 only, optional (not present in ID3v2.2):
452.1059 +            // Relative volume change, bass       $xx xx (xx ...) // f
452.1060 +            // Peak volume bass                   $xx xx (xx ...)
452.1061 +
452.1062 +            $frame_offset = 0;
452.1063 +            $frame_incrdecrflags = getid3_lib::BigEndian2Bin($parsed_frame['data']{$frame_offset++});
452.1064 +            $parsed_frame['incdec']['right'] = (bool)substr($frame_incrdecrflags, 6, 1);
452.1065 +            $parsed_frame['incdec']['left']  = (bool)substr($frame_incrdecrflags, 7, 1);
452.1066 +            $parsed_frame['bitsvolume'] = ord($parsed_frame['data']{$frame_offset++});
452.1067 +            $frame_bytesvolume = ceil($parsed_frame['bitsvolume'] / 8);
452.1068 +            $parsed_frame['volumechange']['right'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1069 +            if ($parsed_frame['incdec']['right'] === false) {
452.1070 +                $parsed_frame['volumechange']['right'] *= -1;
452.1071 +            }
452.1072 +            $frame_offset += $frame_bytesvolume;
452.1073 +            $parsed_frame['volumechange']['left'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1074 +            if ($parsed_frame['incdec']['left'] === false) {
452.1075 +                $parsed_frame['volumechange']['left'] *= -1;
452.1076 +            }
452.1077 +            $frame_offset += $frame_bytesvolume;
452.1078 +            $parsed_frame['peakvolume']['right'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1079 +            $frame_offset += $frame_bytesvolume;
452.1080 +            $parsed_frame['peakvolume']['left']  = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1081 +            $frame_offset += $frame_bytesvolume;
452.1082 +            if ($id3v2_major_version == 3) {
452.1083 +                $parsed_frame['data'] = substr($parsed_frame['data'], $frame_offset);
452.1084 +                if (strlen($parsed_frame['data']) > 0) {
452.1085 +                    $parsed_frame['incdec']['rightrear'] = (bool)substr($frame_incrdecrflags, 4, 1);
452.1086 +                    $parsed_frame['incdec']['leftrear']  = (bool)substr($frame_incrdecrflags, 5, 1);
452.1087 +                    $parsed_frame['volumechange']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1088 +                    if ($parsed_frame['incdec']['rightrear'] === false) {
452.1089 +                        $parsed_frame['volumechange']['rightrear'] *= -1;
452.1090 +                    }
452.1091 +                    $frame_offset += $frame_bytesvolume;
452.1092 +                    $parsed_frame['volumechange']['leftrear'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1093 +                    if ($parsed_frame['incdec']['leftrear'] === false) {
452.1094 +                        $parsed_frame['volumechange']['leftrear'] *= -1;
452.1095 +                    }
452.1096 +                    $frame_offset += $frame_bytesvolume;
452.1097 +                    $parsed_frame['peakvolume']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1098 +                    $frame_offset += $frame_bytesvolume;
452.1099 +                    $parsed_frame['peakvolume']['leftrear']  = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1100 +                    $frame_offset += $frame_bytesvolume;
452.1101 +                }
452.1102 +                $parsed_frame['data'] = substr($parsed_frame['data'], $frame_offset);
452.1103 +                if (strlen($parsed_frame['data']) > 0) {
452.1104 +                    $parsed_frame['incdec']['center'] = (bool)substr($frame_incrdecrflags, 3, 1);
452.1105 +                    $parsed_frame['volumechange']['center'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1106 +                    if ($parsed_frame['incdec']['center'] === false) {
452.1107 +                        $parsed_frame['volumechange']['center'] *= -1;
452.1108 +                    }
452.1109 +                    $frame_offset += $frame_bytesvolume;
452.1110 +                    $parsed_frame['peakvolume']['center'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1111 +                    $frame_offset += $frame_bytesvolume;
452.1112 +                }
452.1113 +                $parsed_frame['data'] = substr($parsed_frame['data'], $frame_offset);
452.1114 +                if (strlen($parsed_frame['data']) > 0) {
452.1115 +                    $parsed_frame['incdec']['bass'] = (bool)substr($frame_incrdecrflags, 2, 1);
452.1116 +                    $parsed_frame['volumechange']['bass'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1117 +                    if ($parsed_frame['incdec']['bass'] === false) {
452.1118 +                        $parsed_frame['volumechange']['bass'] *= -1;
452.1119 +                    }
452.1120 +                    $frame_offset += $frame_bytesvolume;
452.1121 +                    $parsed_frame['peakvolume']['bass'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesvolume));
452.1122 +                    $frame_offset += $frame_bytesvolume;
452.1123 +                }
452.1124 +            }
452.1125 +            unset($parsed_frame['data']);
452.1126 +            return true;
452.1127 +        }
452.1128 +
452.1129 +
452.1130 +        if (($id3v2_major_version >= 4) && ($parsed_frame['frame_name'] == 'EQU2')) { // 4.12  EQU2 Equalisation (2) (ID3v2.4+ only)
452.1131 +            
452.1132 +            //   There may be more than one 'EQU2' frame in each tag,
452.1133 +            //   but only one with the same identification string
452.1134 +            // <Header of 'Equalisation (2)', ID: 'EQU2'>
452.1135 +            // Interpolation method  $xx
452.1136 +            //   $00  Band
452.1137 +            //   $01  Linear
452.1138 +            // Identification        <text string> $00
452.1139 +            //   The following is then repeated for every adjustment point
452.1140 +            // Frequency          $xx xx
452.1141 +            // Volume adjustment  $xx xx
452.1142 +
452.1143 +            $frame_offset = 0;
452.1144 +            $frame_interpolationmethod = ord($parsed_frame['data']{$frame_offset++});
452.1145 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1146 +            $frame_id_string = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1147 +            if (ord($frame_id_string) === 0) {
452.1148 +                $frame_id_string = '';
452.1149 +            }
452.1150 +            $parsed_frame['description'] = $frame_id_string;
452.1151 +            $frame_remaining_data = substr($parsed_frame['data'], $frame_terminator_pos + strlen("\x00"));
452.1152 +            while (strlen($frame_remaining_data)) {
452.1153 +                $frame_frequency = getid3_lib::BigEndian2Int(substr($frame_remaining_data, 0, 2)) / 2;
452.1154 +                $parsed_frame['data'][$frame_frequency] = getid3_lib::BigEndian2Int(substr($frame_remaining_data, 2, 2), true);
452.1155 +                $frame_remaining_data = substr($frame_remaining_data, 4);
452.1156 +            }
452.1157 +            $parsed_frame['interpolationmethod'] = $frame_interpolationmethod;
452.1158 +            unset($parsed_frame['data']);
452.1159 +            return true;
452.1160 +        }
452.1161 +
452.1162 +
452.1163 +        if ((($id3v2_major_version == 3) && ($parsed_frame['frame_name'] == 'EQUA')) ||    // 4.12  EQUA Equalisation (ID3v2.3 only)
452.1164 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'EQU'))) {     // 4.13  EQU  Equalisation (ID3v2.2 only)
452.1165 +            
452.1166 +            //   There may only be one 'EQUA' frame in each tag
452.1167 +            // <Header for 'Relative volume adjustment', ID: 'EQU'>
452.1168 +            // Adjustment bits    $xx
452.1169 +            //   This is followed by 2 bytes + ('adjustment bits' rounded up to the
452.1170 +            //   nearest byte) for every equalisation band in the following format,
452.1171 +            //   giving a frequency range of 0 - 32767Hz:
452.1172 +            // Increment/decrement   %x (MSB of the Frequency)
452.1173 +            // Frequency             (lower 15 bits)
452.1174 +            // Adjustment            $xx (xx ...)
452.1175 +
452.1176 +            $frame_offset = 0;
452.1177 +            $parsed_frame['adjustmentbits'] = $parsed_frame['data']{$frame_offset++};
452.1178 +            $frame_adjustment_bytes = ceil($parsed_frame['adjustmentbits'] / 8);
452.1179 +
452.1180 +            $frame_remaining_data = (string)substr($parsed_frame['data'], $frame_offset);
452.1181 +            while (strlen($frame_remaining_data) > 0) {
452.1182 +                $frame_frequencystr = getid3_lib::BigEndian2Bin(substr($frame_remaining_data, 0, 2));
452.1183 +                $frame_incdec    = (bool)substr($frame_frequencystr, 0, 1);
452.1184 +                $frame_frequency = bindec(substr($frame_frequencystr, 1, 15));
452.1185 +                $parsed_frame[$frame_frequency]['incdec'] = $frame_incdec;
452.1186 +                $parsed_frame[$frame_frequency]['adjustment'] = getid3_lib::BigEndian2Int(substr($frame_remaining_data, 2, $frame_adjustment_bytes));
452.1187 +                if ($parsed_frame[$frame_frequency]['incdec'] === false) {
452.1188 +                    $parsed_frame[$frame_frequency]['adjustment'] *= -1;
452.1189 +                }
452.1190 +                $frame_remaining_data = substr($frame_remaining_data, 2 + $frame_adjustment_bytes);
452.1191 +            }
452.1192 +            unset($parsed_frame['data']);
452.1193 +            return true;
452.1194 +        }
452.1195 +
452.1196 +
452.1197 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'RVRB')) ||    // 4.13  RVRB Reverb
452.1198 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'REV'))) {     // 4.14  REV  Reverb
452.1199 +            
452.1200 +            //   There may only be one 'RVRB' frame in each tag.
452.1201 +            // <Header for 'Reverb', ID: 'RVRB'>
452.1202 +            // Reverb left (ms)                 $xx xx
452.1203 +            // Reverb right (ms)                $xx xx
452.1204 +            // Reverb bounces, left             $xx
452.1205 +            // Reverb bounces, right            $xx
452.1206 +            // Reverb feedback, left to left    $xx
452.1207 +            // Reverb feedback, left to right   $xx
452.1208 +            // Reverb feedback, right to right  $xx
452.1209 +            // Reverb feedback, right to left   $xx
452.1210 +            // Premix left to right             $xx
452.1211 +            // Premix right to left             $xx
452.1212 +
452.1213 +            $frame_offset = 0;
452.1214 +            $parsed_frame['left']  = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 2));
452.1215 +            $frame_offset += 2;
452.1216 +            $parsed_frame['right'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 2));
452.1217 +            $frame_offset += 2;
452.1218 +            $parsed_frame['bouncesL']   = ord($parsed_frame['data']{$frame_offset++});
452.1219 +            $parsed_frame['bouncesR']   = ord($parsed_frame['data']{$frame_offset++});
452.1220 +            $parsed_frame['feedbackLL'] = ord($parsed_frame['data']{$frame_offset++});
452.1221 +            $parsed_frame['feedbackLR'] = ord($parsed_frame['data']{$frame_offset++});
452.1222 +            $parsed_frame['feedbackRR'] = ord($parsed_frame['data']{$frame_offset++});
452.1223 +            $parsed_frame['feedbackRL'] = ord($parsed_frame['data']{$frame_offset++});
452.1224 +            $parsed_frame['premixLR']   = ord($parsed_frame['data']{$frame_offset++});
452.1225 +            $parsed_frame['premixRL']   = ord($parsed_frame['data']{$frame_offset++});
452.1226 +            unset($parsed_frame['data']);
452.1227 +            return true;
452.1228 +        }
452.1229 +
452.1230 +
452.1231 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'APIC')) ||    // 4.14  APIC Attached picture
452.1232 +           (($id3v2_major_version == 2)  && ($parsed_frame['frame_name'] == 'PIC'))) {     // 4.15  PIC  Attached picture
452.1233 +
452.1234 +            //   There may be several pictures attached to one file,
452.1235 +            //   each in their individual 'APIC' frame, but only one
452.1236 +            //   with the same content descriptor
452.1237 +            // <Header for 'Attached picture', ID: 'APIC'>
452.1238 +            // Text encoding      $xx
452.1239 +            // ID3v2.3+ => MIME type          <text string> $00
452.1240 +            // ID3v2.2  => Image format       $xx xx xx
452.1241 +            // Picture type       $xx
452.1242 +            // Description        <text string according to encoding> $00 (00)
452.1243 +            // Picture data       <binary data>
452.1244 +
452.1245 +            $frame_offset = 0;
452.1246 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
452.1247 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
452.1248 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
452.1249 +            }
452.1250 +
452.1251 +            if ($id3v2_major_version == 2 && strlen($parsed_frame['data']) > $frame_offset) { 
452.1252 +                $frame_imagetype = substr($parsed_frame['data'], $frame_offset, 3);
452.1253 +                if (strtolower($frame_imagetype) == 'ima') {
452.1254 +                    // complete hack for mp3Rage (www.chaoticsoftware.com) that puts ID3v2.3-formatted
452.1255 +                    // MIME type instead of 3-char ID3v2.2-format image type  (thanks xbhoffØpacbell*net)
452.1256 +                    $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1257 +                    $frame_mimetype = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1258 +                    if (ord($frame_mimetype) === 0) {
452.1259 +                        $frame_mimetype = '';
452.1260 +                    }
452.1261 +                    $frame_imagetype = strtoupper(str_replace('image/', '', strtolower($frame_mimetype)));
452.1262 +                    if ($frame_imagetype == 'JPEG') {
452.1263 +                        $frame_imagetype = 'JPG';
452.1264 +                    }
452.1265 +                    $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1266 +                } else {
452.1267 +                    $frame_offset += 3;
452.1268 +                }
452.1269 +            }
452.1270 +            
452.1271 +            if ($id3v2_major_version > 2 && strlen($parsed_frame['data']) > $frame_offset) {
452.1272 +                $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1273 +                $frame_mimetype = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1274 +                if (ord($frame_mimetype) === 0) {
452.1275 +                    $frame_mimetype = '';
452.1276 +                }
452.1277 +                $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1278 +            }
452.1279 +
452.1280 +            $frame_picturetype = ord($parsed_frame['data']{$frame_offset++});
452.1281 +
452.1282 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
452.1283 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
452.1284 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
452.1285 +            }
452.1286 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1287 +            if (ord($frame_description) === 0) {
452.1288 +                $frame_description = '';
452.1289 +            }
452.1290 +            $parsed_frame['encodingid']       = $frame_text_encoding;
452.1291 +            $parsed_frame['encoding']         = $this->TextEncodingNameLookup($frame_text_encoding);
452.1292 +
452.1293 +            if ($id3v2_major_version == 2) {
452.1294 +                $parsed_frame['imagetype']    = $frame_imagetype;
452.1295 +            } else {
452.1296 +                $parsed_frame['mime']         = $frame_mimetype;
452.1297 +            }
452.1298 +            $parsed_frame['picturetypeid']    = $frame_picturetype;
452.1299 +            $parsed_frame['picturetype']      = getid3_id3v2::APICPictureTypeLookup($frame_picturetype);
452.1300 +            $parsed_frame['description']      = $frame_description;
452.1301 +            $parsed_frame['data']             = substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)));
452.1302 +
452.1303 +            if ($getid3->option_tags_images) {
452.1304 +                
452.1305 +                $image_chunk_check = getid3_lib_image_size::get($parsed_frame['data']);
452.1306 +                if (($image_chunk_check[2] >= 1) && ($image_chunk_check[2] <= 3)) {
452.1307 +                    $parsed_frame['image_mime'] = image_type_to_mime_type($image_chunk_check[2]);
452.1308 +                    
452.1309 +                    if ($image_chunk_check[0]) {
452.1310 +                        $parsed_frame['image_width']  = $image_chunk_check[0];
452.1311 +                    }
452.1312 +                    
452.1313 +                    if ($image_chunk_check[1]) {
452.1314 +                        $parsed_frame['image_height'] = $image_chunk_check[1];
452.1315 +                    }
452.1316 +                    
452.1317 +                    $parsed_frame['image_bytes']      = strlen($parsed_frame['data']);
452.1318 +                }
452.1319 +            }
452.1320 +
452.1321 +            return true;
452.1322 +        }
452.1323 +
452.1324 +
452.1325 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'GEOB')) ||    // 4.15  GEOB General encapsulated object
452.1326 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'GEO'))) {     // 4.16  GEO  General encapsulated object
452.1327 +            
452.1328 +            //   There may be more than one 'GEOB' frame in each tag,
452.1329 +            //   but only one with the same content descriptor
452.1330 +            // <Header for 'General encapsulated object', ID: 'GEOB'>
452.1331 +            // Text encoding          $xx
452.1332 +            // MIME type              <text string> $00
452.1333 +            // Filename               <text string according to encoding> $00 (00)
452.1334 +            // Content description    <text string according to encoding> $00 (00)
452.1335 +            // Encapsulated object    <binary data>
452.1336 +
452.1337 +            $frame_offset = 0;
452.1338 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
452.1339 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
452.1340 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
452.1341 +            }
452.1342 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1343 +            $frame_mimetype = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1344 +            if (ord($frame_mimetype) === 0) {
452.1345 +                $frame_mimetype = '';
452.1346 +            }
452.1347 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1348 +
452.1349 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
452.1350 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
452.1351 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
452.1352 +            }
452.1353 +            $frame_filename = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1354 +            if (ord($frame_filename) === 0) {
452.1355 +                $frame_filename = '';
452.1356 +            }
452.1357 +            $frame_offset = $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
452.1358 +
452.1359 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
452.1360 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
452.1361 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
452.1362 +            }
452.1363 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1364 +            if (ord($frame_description) === 0) {
452.1365 +                $frame_description = '';
452.1366 +            }
452.1367 +            $frame_offset = $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
452.1368 +
452.1369 +            $parsed_frame['objectdata']  = (string)substr($parsed_frame['data'], $frame_offset);
452.1370 +            $parsed_frame['encodingid']  = $frame_text_encoding;
452.1371 +            $parsed_frame['encoding']    = $this->TextEncodingNameLookup($frame_text_encoding);
452.1372 +
452.1373 +            $parsed_frame['mime']        = $frame_mimetype;
452.1374 +            $parsed_frame['filename']    = $frame_filename;
452.1375 +            $parsed_frame['description'] = $frame_description;
452.1376 +            unset($parsed_frame['data']);
452.1377 +            return true;
452.1378 +        }
452.1379 +
452.1380 +
452.1381 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'PCNT')) ||     // 4.16  PCNT Play counter
452.1382 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'CNT'))) {      // 4.17  CNT  Play counter
452.1383 +            
452.1384 +            //   There may only be one 'PCNT' frame in each tag.
452.1385 +            //   When the counter reaches all one's, one byte is inserted in
452.1386 +            //   front of the counter thus making the counter eight bits bigger
452.1387 +            // <Header for 'Play counter', ID: 'PCNT'>
452.1388 +            // Counter        $xx xx xx xx (xx ...)
452.1389 +
452.1390 +            $parsed_frame['data'] = getid3_lib::BigEndian2Int($parsed_frame['data']);
452.1391 +            return true;
452.1392 +        }
452.1393 +
452.1394 +
452.1395 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'POPM')) ||      // 4.17  POPM Popularimeter
452.1396 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'POP'))) {       // 4.18  POP  Popularimeter
452.1397 +            
452.1398 +            //   There may be more than one 'POPM' frame in each tag,
452.1399 +            //   but only one with the same email address
452.1400 +            // <Header for 'Popularimeter', ID: 'POPM'>
452.1401 +            // Email to user   <text string> $00
452.1402 +            // Rating          $xx
452.1403 +            // Counter         $xx xx xx xx (xx ...)
452.1404 +
452.1405 +            $frame_offset = 0;
452.1406 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1407 +            $frame_email_address = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1408 +            if (ord($frame_email_address) === 0) {
452.1409 +                $frame_email_address = '';
452.1410 +            }
452.1411 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1412 +            $frame_rating = ord($parsed_frame['data']{$frame_offset++});
452.1413 +            $parsed_frame['data'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset));
452.1414 +            $parsed_frame['email']  = $frame_email_address;
452.1415 +            $parsed_frame['rating'] = $frame_rating;
452.1416 +            unset($parsed_frame['data']);
452.1417 +            return true;
452.1418 +        }
452.1419 +
452.1420 +
452.1421 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'RBUF')) ||     // 4.18  RBUF Recommended buffer size
452.1422 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'BUF'))) {      // 4.19  BUF  Recommended buffer size
452.1423 +            
452.1424 +            //   There may only be one 'RBUF' frame in each tag
452.1425 +            // <Header for 'Recommended buffer size', ID: 'RBUF'>
452.1426 +            // Buffer size               $xx xx xx
452.1427 +            // Embedded info flag        %0000000x
452.1428 +            // Offset to next tag        $xx xx xx xx
452.1429 +
452.1430 +            $frame_offset = 0;
452.1431 +            $parsed_frame['buffersize'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 3));
452.1432 +            $frame_offset += 3;
452.1433 +
452.1434 +            $frame_embeddedinfoflags = getid3_lib::BigEndian2Bin($parsed_frame['data']{$frame_offset++});
452.1435 +            $parsed_frame['flags']['embededinfo'] = (bool)substr($frame_embeddedinfoflags, 7, 1);
452.1436 +            $parsed_frame['nexttagoffset'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
452.1437 +            unset($parsed_frame['data']);
452.1438 +            return true;
452.1439 +        }
452.1440 +
452.1441 +
452.1442 +        if (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'CRM')) { // 4.20  Encrypted meta frame (ID3v2.2 only)
452.1443 +            
452.1444 +            //   There may be more than one 'CRM' frame in a tag,
452.1445 +            //   but only one with the same 'owner identifier'
452.1446 +            // <Header for 'Encrypted meta frame', ID: 'CRM'>
452.1447 +            // Owner identifier      <textstring> $00 (00)
452.1448 +            // Content/explanation   <textstring> $00 (00)
452.1449 +            // Encrypted datablock   <binary data>
452.1450 +
452.1451 +            $frame_offset = 0;
452.1452 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1453 +            $frame_owner_id = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1454 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1455 +
452.1456 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1457 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1458 +            if (ord($frame_description) === 0) {
452.1459 +                $frame_description = '';
452.1460 +            }
452.1461 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1462 +
452.1463 +            $parsed_frame['ownerid']     = $frame_owner_id;
452.1464 +            $parsed_frame['data']        = (string)substr($parsed_frame['data'], $frame_offset);
452.1465 +            $parsed_frame['description'] = $frame_description;
452.1466 +            unset($parsed_frame['data']);
452.1467 +            return true;
452.1468 +        }
452.1469 +
452.1470 +
452.1471 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'AENC')) ||      // 4.19  AENC Audio encryption
452.1472 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'CRA'))) {       // 4.21  CRA  Audio encryption
452.1473 +            
452.1474 +            //   There may be more than one 'AENC' frames in a tag,
452.1475 +            //   but only one with the same 'Owner identifier'
452.1476 +            // <Header for 'Audio encryption', ID: 'AENC'>
452.1477 +            // Owner identifier   <text string> $00
452.1478 +            // Preview start      $xx xx
452.1479 +            // Preview length     $xx xx
452.1480 +            // Encryption info    <binary data>
452.1481 +
452.1482 +            $frame_offset = 0;
452.1483 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1484 +            $frame_owner_id = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1485 +            if (ord($frame_owner_id) === 0) {
452.1486 +                $frame_owner_id == '';
452.1487 +            }
452.1488 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1489 +            $parsed_frame['ownerid'] = $frame_owner_id;
452.1490 +            $parsed_frame['previewstart'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 2));
452.1491 +            $frame_offset += 2;
452.1492 +            $parsed_frame['previewlength'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 2));
452.1493 +            $frame_offset += 2;
452.1494 +            $parsed_frame['encryptioninfo'] = (string)substr($parsed_frame['data'], $frame_offset);
452.1495 +            unset($parsed_frame['data']);
452.1496 +            return true;
452.1497 +        }
452.1498 +
452.1499 +
452.1500 +        if ((($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'LINK')) ||    // 4.20  LINK Linked information
452.1501 +            (($id3v2_major_version == 2) && ($parsed_frame['frame_name'] == 'LNK'))) {     // 4.22  LNK  Linked information
452.1502 +            
452.1503 +            //   There may be more than one 'LINK' frame in a tag,
452.1504 +            //   but only one with the same contents
452.1505 +            // <Header for 'Linked information', ID: 'LINK'>
452.1506 +            // ID3v2.3+ => Frame identifier   $xx xx xx xx
452.1507 +            // ID3v2.2  => Frame identifier   $xx xx xx
452.1508 +            // URL                            <text string> $00
452.1509 +            // ID and additional data         <text string(s)>
452.1510 +
452.1511 +            $frame_offset = 0;
452.1512 +            if ($id3v2_major_version == 2) {
452.1513 +                $parsed_frame['frameid'] = substr($parsed_frame['data'], $frame_offset, 3);
452.1514 +                $frame_offset += 3;
452.1515 +            } else {
452.1516 +                $parsed_frame['frameid'] = substr($parsed_frame['data'], $frame_offset, 4);
452.1517 +                $frame_offset += 4;
452.1518 +            }
452.1519 +
452.1520 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1521 +            $frame_url = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1522 +            if (ord($frame_url) === 0) {
452.1523 +                $frame_url = '';
452.1524 +            }
452.1525 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1526 +            $parsed_frame['url'] = $frame_url;
452.1527 +
452.1528 +            $parsed_frame['additionaldata'] = (string)substr($parsed_frame['data'], $frame_offset);
452.1529 +            if (!empty($parsed_frame['framenameshort']) && $parsed_frame['url']) {
452.1530 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = utf8_encode($parsed_frame['url']);
452.1531 +            }
452.1532 +            unset($parsed_frame['data']);
452.1533 +            return true;
452.1534 +        }
452.1535 +
452.1536 +
452.1537 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'POSS')) { // 4.21  POSS Position synchronisation frame (ID3v2.3+ only)
452.1538 +            
452.1539 +            //   There may only be one 'POSS' frame in each tag
452.1540 +            // <Head for 'Position synchronisation', ID: 'POSS'>
452.1541 +            // Time stamp format         $xx
452.1542 +            // Position                  $xx (xx ...)
452.1543 +
452.1544 +            $frame_offset = 0;
452.1545 +            $parsed_frame['timestampformat'] = ord($parsed_frame['data']{$frame_offset++});
452.1546 +            $parsed_frame['position']        = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset));
452.1547 +            unset($parsed_frame['data']);
452.1548 +            return true;
452.1549 +        }
452.1550 +
452.1551 +
452.1552 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'USER')) { // 4.22  USER Terms of use (ID3v2.3+ only)
452.1553 +            
452.1554 +            //   There may be more than one 'Terms of use' frame in a tag,
452.1555 +            //   but only one with the same 'Language'
452.1556 +            // <Header for 'Terms of use frame', ID: 'USER'>
452.1557 +            // Text encoding        $xx
452.1558 +            // Language             $xx xx xx
452.1559 +            // The actual text      <text string according to encoding>
452.1560 +
452.1561 +            $frame_offset = 0;
452.1562 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
452.1563 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
452.1564 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
452.1565 +            }
452.1566 +            $frame_language = substr($parsed_frame['data'], $frame_offset, 3);
452.1567 +            $frame_offset += 3;
452.1568 +            $parsed_frame['language']     = $frame_language;
452.1569 +            $parsed_frame['languagename'] = getid3_id3v2::LanguageLookup($frame_language, false);
452.1570 +            $parsed_frame['encodingid']   = $frame_text_encoding;
452.1571 +            $parsed_frame['encoding']     = $this->TextEncodingNameLookup($frame_text_encoding);
452.1572 +
452.1573 +            $parsed_frame['data']         = (string)substr($parsed_frame['data'], $frame_offset);
452.1574 +            if (!empty($parsed_frame['framenameshort']) && !empty($parsed_frame['data'])) {
452.1575 +                $getid3->info['id3v2']['comments'][$parsed_frame['framenameshort']][] = $getid3->iconv($parsed_frame['encoding'], 'UTF-8', $parsed_frame['data']);
452.1576 +            }
452.1577 +            unset($parsed_frame['data']);
452.1578 +            return true;
452.1579 +        }
452.1580 +
452.1581 +
452.1582 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'OWNE')) { // 4.23  OWNE Ownership frame (ID3v2.3+ only)
452.1583 +            
452.1584 +            //   There may only be one 'OWNE' frame in a tag
452.1585 +            // <Header for 'Ownership frame', ID: 'OWNE'>
452.1586 +            // Text encoding     $xx
452.1587 +            // Price paid        <text string> $00
452.1588 +            // Date of purch.    <text string>
452.1589 +            // Seller            <text string according to encoding>
452.1590 +
452.1591 +            $frame_offset = 0;
452.1592 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
452.1593 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
452.1594 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
452.1595 +            }
452.1596 +            $parsed_frame['encodingid'] = $frame_text_encoding;
452.1597 +            $parsed_frame['encoding']   = $this->TextEncodingNameLookup($frame_text_encoding);
452.1598 +
452.1599 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1600 +            $frame_pricepaid = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1601 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1602 +
452.1603 +            $parsed_frame['pricepaid']['currencyid'] = substr($frame_pricepaid, 0, 3);
452.1604 +            $parsed_frame['pricepaid']['currency']   = getid3_id3v2::LookupCurrencyUnits($parsed_frame['pricepaid']['currencyid']);
452.1605 +            $parsed_frame['pricepaid']['value']      = substr($frame_pricepaid, 3);
452.1606 +
452.1607 +            $parsed_frame['purchasedate'] = substr($parsed_frame['data'], $frame_offset, 8);
452.1608 +            if (!getid3_id3v2::IsValidDateStampString($parsed_frame['purchasedate'])) {
452.1609 +                $parsed_frame['purchasedateunix'] = gmmktime (0, 0, 0, substr($parsed_frame['purchasedate'], 4, 2), substr($parsed_frame['purchasedate'], 6, 2), substr($parsed_frame['purchasedate'], 0, 4));
452.1610 +            }
452.1611 +            $frame_offset += 8;
452.1612 +
452.1613 +            $parsed_frame['seller'] = (string)substr($parsed_frame['data'], $frame_offset);
452.1614 +            unset($parsed_frame['data']);
452.1615 +            return true;
452.1616 +        }
452.1617 +
452.1618 +
452.1619 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'COMR')) { // 4.24  COMR Commercial frame (ID3v2.3+ only)
452.1620 +            
452.1621 +            //   There may be more than one 'commercial frame' in a tag,
452.1622 +            //   but no two may be identical
452.1623 +            // <Header for 'Commercial frame', ID: 'COMR'>
452.1624 +            // Text encoding      $xx
452.1625 +            // Price string       <text string> $00
452.1626 +            // Valid until        <text string>
452.1627 +            // Contact URL        <text string> $00
452.1628 +            // Received as        $xx
452.1629 +            // Name of seller     <text string according to encoding> $00 (00)
452.1630 +            // Description        <text string according to encoding> $00 (00)
452.1631 +            // Picture MIME type  <string> $00
452.1632 +            // Seller logo        <binary data>
452.1633 +
452.1634 +            $frame_offset = 0;
452.1635 +            $frame_text_encoding = ord($parsed_frame['data']{$frame_offset++});
452.1636 +            if ((($id3v2_major_version <= 3) && ($frame_text_encoding > 1)) || (($id3v2_major_version == 4) && ($frame_text_encoding > 3))) {
452.1637 +                $getid3->warning('Invalid text encoding byte ('.$frame_text_encoding.') in frame "'.$parsed_frame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
452.1638 +            }
452.1639 +
452.1640 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1641 +            $frame_price_string = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1642 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1643 +            $frame_rawpricearray = explode('/', $frame_price_string);
452.1644 +            foreach ($frame_rawpricearray as $key => $val) {
452.1645 +                $frame_currencyid = substr($val, 0, 3);
452.1646 +                $parsed_frame['price'][$frame_currencyid]['currency'] = getid3_id3v2::LookupCurrencyUnits($frame_currencyid);
452.1647 +                $parsed_frame['price'][$frame_currencyid]['value']    = substr($val, 3);
452.1648 +            }
452.1649 +
452.1650 +            $frame_date_string = substr($parsed_frame['data'], $frame_offset, 8);
452.1651 +            $frame_offset += 8;
452.1652 +
452.1653 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1654 +            $frame_contacturl = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1655 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1656 +
452.1657 +            $frame_received_as_id = ord($parsed_frame['data']{$frame_offset++});
452.1658 +
452.1659 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
452.1660 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
452.1661 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
452.1662 +            }
452.1663 +            
452.1664 +            $frame_sellername = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1665 +            if (ord($frame_sellername) === 0) {
452.1666 +                $frame_sellername = '';
452.1667 +            }
452.1668 +            
452.1669 +            $frame_offset = $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
452.1670 +
452.1671 +            $frame_terminator_pos = @strpos($parsed_frame['data'], getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding), $frame_offset);
452.1672 +            if (ord(substr($parsed_frame['data'], $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding)), 1)) === 0) {
452.1673 +                $frame_terminator_pos++; // @strpos() fooled because 2nd byte of Unicode chars are often 0x00
452.1674 +            }
452.1675 +            
452.1676 +            $frame_description = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1677 +            if (ord($frame_description) === 0) {
452.1678 +                $frame_description = '';
452.1679 +            }
452.1680 +            
452.1681 +            $frame_offset = $frame_terminator_pos + strlen(getid3_id3v2::TextEncodingTerminatorLookup($frame_text_encoding));
452.1682 +
452.1683 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1684 +            $frame_mimetype = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1685 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1686 +
452.1687 +            $frame_sellerlogo = substr($parsed_frame['data'], $frame_offset);
452.1688 +
452.1689 +            $parsed_frame['encodingid']      = $frame_text_encoding;
452.1690 +            $parsed_frame['encoding']        = $this->TextEncodingNameLookup($frame_text_encoding);
452.1691 +
452.1692 +            $parsed_frame['pricevaliduntil'] = $frame_date_string;
452.1693 +            $parsed_frame['contacturl']      = $frame_contacturl;
452.1694 +            $parsed_frame['receivedasid']    = $frame_received_as_id;
452.1695 +            $parsed_frame['receivedas']      = getid3_id3v2::COMRReceivedAsLookup($frame_received_as_id);
452.1696 +            $parsed_frame['sellername']      = $frame_sellername;
452.1697 +            $parsed_frame['description']     = $frame_description;
452.1698 +            $parsed_frame['mime']            = $frame_mimetype;
452.1699 +            $parsed_frame['logo']            = $frame_sellerlogo;
452.1700 +            unset($parsed_frame['data']);
452.1701 +        }
452.1702 +
452.1703 +
452.1704 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'ENCR')) { // 4.25  ENCR Encryption method registration (ID3v2.3+ only)
452.1705 +            
452.1706 +            //   There may be several 'ENCR' frames in a tag,
452.1707 +            //   but only one containing the same symbol
452.1708 +            //   and only one containing the same owner identifier
452.1709 +            // <Header for 'Encryption method registration', ID: 'ENCR'>
452.1710 +            // Owner identifier    <text string> $00
452.1711 +            // Method symbol       $xx
452.1712 +            // Encryption data     <binary data>
452.1713 +
452.1714 +            $frame_offset = 0;
452.1715 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1716 +            $frame_owner_id = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1717 +            if (ord($frame_owner_id) === 0) {
452.1718 +                $frame_owner_id = '';
452.1719 +            }
452.1720 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1721 +
452.1722 +            $parsed_frame['ownerid']      = $frame_owner_id;
452.1723 +            $parsed_frame['methodsymbol'] = ord($parsed_frame['data']{$frame_offset++});
452.1724 +            $parsed_frame['data']         = (string)substr($parsed_frame['data'], $frame_offset);
452.1725 +            return true;
452.1726 +        }
452.1727 +        
452.1728 +
452.1729 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'GRID')) { // 4.26  GRID Group identification registration (ID3v2.3+ only)
452.1730 +
452.1731 +            //   There may be several 'GRID' frames in a tag,
452.1732 +            //   but only one containing the same symbol
452.1733 +            //   and only one containing the same owner identifier
452.1734 +            // <Header for 'Group ID registration', ID: 'GRID'>
452.1735 +            // Owner identifier      <text string> $00
452.1736 +            // Group symbol          $xx
452.1737 +            // Group dependent data  <binary data>
452.1738 +
452.1739 +            $frame_offset = 0;
452.1740 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1741 +            $frame_owner_id = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1742 +            if (ord($frame_owner_id) === 0) {
452.1743 +                $frame_owner_id = '';
452.1744 +            }
452.1745 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1746 +
452.1747 +            $parsed_frame['ownerid']       = $frame_owner_id;
452.1748 +            $parsed_frame['groupsymbol']   = ord($parsed_frame['data']{$frame_offset++});
452.1749 +            $parsed_frame['data']          = (string)substr($parsed_frame['data'], $frame_offset);
452.1750 +            return true;
452.1751 +        }
452.1752 +
452.1753 +
452.1754 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'PRIV')) { // 4.27  PRIV Private frame (ID3v2.3+ only)
452.1755 +            
452.1756 +            //   The tag may contain more than one 'PRIV' frame
452.1757 +            //   but only with different contents
452.1758 +            // <Header for 'Private frame', ID: 'PRIV'>
452.1759 +            // Owner identifier      <text string> $00
452.1760 +            // The private data      <binary data>
452.1761 +
452.1762 +            $frame_offset = 0;
452.1763 +            $frame_terminator_pos = @strpos($parsed_frame['data'], "\x00", $frame_offset);
452.1764 +            $frame_owner_id = substr($parsed_frame['data'], $frame_offset, $frame_terminator_pos - $frame_offset);
452.1765 +            if (ord($frame_owner_id) === 0) {
452.1766 +                $frame_owner_id = '';
452.1767 +            }
452.1768 +            $frame_offset = $frame_terminator_pos + strlen("\x00");
452.1769 +
452.1770 +            $parsed_frame['ownerid'] = $frame_owner_id;
452.1771 +            $parsed_frame['data']    = (string)substr($parsed_frame['data'], $frame_offset);
452.1772 +            return true;
452.1773 +        }
452.1774 +
452.1775 +
452.1776 +        if (($id3v2_major_version >= 4) && ($parsed_frame['frame_name'] == 'SIGN')) { // 4.28  SIGN Signature frame (ID3v2.4+ only)
452.1777 +            
452.1778 +            //   There may be more than one 'signature frame' in a tag,
452.1779 +            //   but no two may be identical
452.1780 +            // <Header for 'Signature frame', ID: 'SIGN'>
452.1781 +            // Group symbol      $xx
452.1782 +            // Signature         <binary data>
452.1783 +
452.1784 +            $frame_offset = 0;
452.1785 +            $parsed_frame['groupsymbol'] = ord($parsed_frame['data']{$frame_offset++});
452.1786 +            $parsed_frame['data']        = (string)substr($parsed_frame['data'], $frame_offset);
452.1787 +            return true;
452.1788 +        }
452.1789 +
452.1790 +
452.1791 +        if (($id3v2_major_version >= 4) && ($parsed_frame['frame_name'] == 'SEEK')) { // 4.29  SEEK Seek frame (ID3v2.4+ only)
452.1792 +            
452.1793 +            //   There may only be one 'seek frame' in a tag
452.1794 +            // <Header for 'Seek frame', ID: 'SEEK'>
452.1795 +            // Minimum offset to next tag       $xx xx xx xx
452.1796 +
452.1797 +            $frame_offset = 0;
452.1798 +            $parsed_frame['data'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
452.1799 +            return true;
452.1800 +        }
452.1801 +
452.1802 +
452.1803 +        if (($id3v2_major_version >= 4) && ($parsed_frame['frame_name'] == 'ASPI')) { // 4.30  ASPI Audio seek point index (ID3v2.4+ only)
452.1804 +            
452.1805 +            //   There may only be one 'audio seek point index' frame in a tag
452.1806 +            // <Header for 'Seek Point Index', ID: 'ASPI'>
452.1807 +            // Indexed data start (S)         $xx xx xx xx
452.1808 +            // Indexed data length (L)        $xx xx xx xx
452.1809 +            // Number of index points (N)     $xx xx
452.1810 +            // Bits per index point (b)       $xx
452.1811 +            //   Then for every index point the following data is included:
452.1812 +            // Fraction at index (Fi)          $xx (xx)
452.1813 +
452.1814 +            $frame_offset = 0;
452.1815 +            $parsed_frame['datastart'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
452.1816 +            $frame_offset += 4;
452.1817 +            $parsed_frame['indexeddatalength'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
452.1818 +            $frame_offset += 4;
452.1819 +            $parsed_frame['indexpoints'] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 2));
452.1820 +            $frame_offset += 2;
452.1821 +            $parsed_frame['bitsperpoint'] = ord($parsed_frame['data']{$frame_offset++});
452.1822 +            $frame_bytesperpoint = ceil($parsed_frame['bitsperpoint'] / 8);
452.1823 +            for ($i = 0; $i < $frame_indexpoints; $i++) {
452.1824 +                $parsed_frame['indexes'][$i] = getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, $frame_bytesperpoint));
452.1825 +                $frame_offset += $frame_bytesperpoint;
452.1826 +            }
452.1827 +            unset($parsed_frame['data']);
452.1828 +            return true;
452.1829 +        }
452.1830 +
452.1831 +
452.1832 +        if (($id3v2_major_version >= 3) && ($parsed_frame['frame_name'] == 'RGAD')) { // Replay Gain Adjustment
452.1833 +
452.1834 +            // http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
452.1835 +            //   There may only be one 'RGAD' frame in a tag
452.1836 +            // <Header for 'Replay Gain Adjustment', ID: 'RGAD'>
452.1837 +            // Peak Amplitude                      $xx $xx $xx $xx
452.1838 +            // Radio Replay Gain Adjustment        %aaabbbcd %dddddddd
452.1839 +            // Audiophile Replay Gain Adjustment   %aaabbbcd %dddddddd
452.1840 +            //   a - name code
452.1841 +            //   b - originator code
452.1842 +            //   c - sign bit
452.1843 +            //   d - replay gain adjustment
452.1844 +
452.1845 +            $frame_offset = 0;
452.1846 +            
452.1847 +            $parsed_frame['peakamplitude'] = (float)getid3_lib::BigEndian2Int(substr($parsed_frame['data'], $frame_offset, 4));
452.1848 +            $frame_offset += 4;
452.1849 +            
452.1850 +            $rg_track_adjustment = decbin(substr($parsed_frame['data'], $frame_offset, 2));
452.1851 +            $frame_offset += 2;
452.1852 +            
452.1853 +            $rg_album_adjustment = decbin(substr($parsed_frame['data'], $frame_offset, 2));
452.1854 +            $frame_offset += 2;
452.1855 +            
452.1856 +            $parsed_frame['raw']['track']['name']       = bindec(substr($rg_track_adjustment, 0, 3));
452.1857 +            $parsed_frame['raw']['track']['originator'] = bindec(substr($rg_track_adjustment, 3, 3));
452.1858 +            $parsed_frame['raw']['track']['signbit']    = bindec($rg_track_adjustment[6]);
452.1859 +            $parsed_frame['raw']['track']['adjustment'] = bindec(substr($rg_track_adjustment, 7, 9));
452.1860 +            $parsed_frame['raw']['album']['name']       = bindec(substr($rg_album_adjustment, 0, 3));
452.1861 +            $parsed_frame['raw']['album']['originator'] = bindec(substr($rg_album_adjustment, 3, 3));
452.1862 +            $parsed_frame['raw']['album']['signbit']    = bindec($rg_album_adjustment[6]);
452.1863 +            $parsed_frame['raw']['album']['adjustment'] = bindec(substr($rg_album_adjustment, 7, 9));
452.1864 +            $parsed_frame['track']['name']              = getid3_lib_replaygain::NameLookup($parsed_frame['raw']['track']['name']);
452.1865 +            $parsed_frame['track']['originator']        = getid3_lib_replaygain::OriginatorLookup($parsed_frame['raw']['track']['originator']);
452.1866 +            $parsed_frame['track']['adjustment']        = getid3_lib_replaygain::AdjustmentLookup($parsed_frame['raw']['track']['adjustment'], $parsed_frame['raw']['track']['signbit']);
452.1867 +            $parsed_frame['album']['name']              = getid3_lib_replaygain::NameLookup($parsed_frame['raw']['album']['name']);
452.1868 +            $parsed_frame['album']['originator']        = getid3_lib_replaygain::OriginatorLookup($parsed_frame['raw']['album']['originator']);
452.1869 +            $parsed_frame['album']['adjustment']        = getid3_lib_replaygain::AdjustmentLookup($parsed_frame['raw']['album']['adjustment'], $parsed_frame['raw']['album']['signbit']);
452.1870 +
452.1871 +            $getid3->info['replay_gain']['track']['peak']       = $parsed_frame['peakamplitude'];
452.1872 +            $getid3->info['replay_gain']['track']['originator'] = $parsed_frame['track']['originator'];
452.1873 +            $getid3->info['replay_gain']['track']['adjustment'] = $parsed_frame['track']['adjustment'];
452.1874 +            $getid3->info['replay_gain']['album']['originator'] = $parsed_frame['album']['originator'];
452.1875 +            $getid3->info['replay_gain']['album']['adjustment'] = $parsed_frame['album']['adjustment'];
452.1876 +
452.1877 +            unset($parsed_frame['data']);
452.1878 +            return true;
452.1879 +        }
452.1880 +
452.1881 +        return true;
452.1882 +    }
452.1883 +    
452.1884 +    
452.1885 +    
452.1886 +    private function TextEncodingNameLookup($encoding) {
452.1887 +        
452.1888 +        // Override specification - BRAINDEAD taggers
452.1889 +        if (!$encoding) {
452.1890 +            return $this->getid3->encoding_id3v2;
452.1891 +        }
452.1892 +           
452.1893 +        // http://www.id3.org/id3v2.4.0-structure.txt
452.1894 +        static $lookup = array (
452.1895 +            0   => 'ISO-8859-1', 
452.1896 +            1   => 'UTF-16', 
452.1897 +            2   => 'UTF-16BE', 
452.1898 +            3   => 'UTF-8', 
452.1899 +            255 => 'UTF-16BE'
452.1900 +        );
452.1901 +        
452.1902 +        return (isset($lookup[$encoding]) ? $lookup[$encoding] : 'ISO-8859-1');
452.1903 +    }
452.1904 +
452.1905 +
452.1906 +
452.1907 +    public static function ParseID3v2GenreString($genre_string) {
452.1908 +        
452.1909 +        // Parse genres into arrays of genreName and genreID
452.1910 +        // ID3v2.2.x, ID3v2.3.x: '(21)' or '(4)Eurodisco' or '(51)(39)' or '(55)((I think...)'
452.1911 +        // ID3v2.4.x: '21' $00 'Eurodisco' $00
452.1912 +
452.1913 +        $genre_string = trim($genre_string);
452.1914 +        $return_array = array ();
452.1915 +        if (strpos($genre_string, "\x00") !== false) {
452.1916 +            $unprocessed = trim($genre_string); // trailing nulls will cause an infinite loop.
452.1917 +            $genre_string = '';
452.1918 +            while (strpos($unprocessed, "\x00") !== false) {
452.1919 +                // convert null-seperated v2.4-format into v2.3 ()-seperated format
452.1920 +                $end_pos = strpos($unprocessed, "\x00");
452.1921 +                $genre_string .= '('.substr($unprocessed, 0, $end_pos).')';
452.1922 +                $unprocessed = substr($unprocessed, $end_pos + 1);
452.1923 +            }
452.1924 +            unset($unprocessed);
452.1925 +        }
452.1926 +        if (getid3_id3v1::LookupGenreID($genre_string)) {
452.1927 +
452.1928 +            $return_array['genre'][] = $genre_string;
452.1929 +
452.1930 +        } else {
452.1931 +
452.1932 +            while (strpos($genre_string, '(') !== false) {
452.1933 +
452.1934 +                $start_pos = strpos($genre_string, '(');
452.1935 +                $end_pos   = strpos($genre_string, ')');
452.1936 +                if (substr($genre_string, $start_pos + 1, 1) == '(') {
452.1937 +                    $genre_string = substr($genre_string, 0, $start_pos).substr($genre_string, $start_pos + 1);
452.1938 +                    $end_pos--;
452.1939 +                }
452.1940 +                $element      = substr($genre_string, $start_pos + 1, $end_pos - ($start_pos + 1));
452.1941 +                $genre_string = substr($genre_string, 0, $start_pos).substr($genre_string, $end_pos + 1);
452.1942 +                
452.1943 +                if (getid3_id3v1::LookupGenreName($element)) { // $element is a valid genre id/abbreviation
452.1944 +
452.1945 +                    if (empty($return_array['genre']) || !in_array(getid3_id3v1::LookupGenreName($element), $return_array['genre'])) { // avoid duplicate entires
452.1946 +                        $return_array['genre'][] = getid3_id3v1::LookupGenreName($element);
452.1947 +                    }
452.1948 +                } else {
452.1949 +
452.1950 +                    if (empty($return_array['genre']) || !in_array($element, $return_array['genre'])) { // avoid duplicate entires
452.1951 +                        $return_array['genre'][] = $element;
452.1952 +                    }
452.1953 +                }
452.1954 +            }
452.1955 +        }
452.1956 +        if ($genre_string) {
452.1957 +            if (empty($return_array['genre']) || !in_array($genre_string, $return_array['genre'])) { // avoid duplicate entires
452.1958 +                $return_array['genre'][] = $genre_string;
452.1959 +            }
452.1960 +        }
452.1961 +
452.1962 +        return $return_array;
452.1963 +    }
452.1964 +    
452.1965 +    
452.1966 +    
452.1967 +    public static function LookupCurrencyUnits($currency_id) {
452.1968 +
452.1969 +        static $lookup = array (
452.1970 +            'AED' => 'Dirhams',
452.1971 +            'AFA' => 'Afghanis',
452.1972 +            'ALL' => 'Leke',
452.1973 +            'AMD' => 'Drams',
452.1974 +            'ANG' => 'Guilders',
452.1975 +            'AOA' => 'Kwanza',
452.1976 +            'ARS' => 'Pesos',
452.1977 +            'ATS' => 'Schillings',
452.1978 +            'AUD' => 'Dollars',
452.1979 +            'AWG' => 'Guilders',
452.1980 +            'AZM' => 'Manats',
452.1981 +            'BAM' => 'Convertible Marka',
452.1982 +            'BBD' => 'Dollars',
452.1983 +            'BDT' => 'Taka',
452.1984 +            'BEF' => 'Francs',
452.1985 +            'BGL' => 'Leva',
452.1986 +            'BHD' => 'Dinars',
452.1987 +            'BIF' => 'Francs',
452.1988 +            'BMD' => 'Dollars',
452.1989 +            'BND' => 'Dollars',
452.1990 +            'BOB' => 'Bolivianos',
452.1991 +            'BRL' => 'Brazil Real',
452.1992 +            'BSD' => 'Dollars',
452.1993 +            'BTN' => 'Ngultrum',
452.1994 +            'BWP' => 'Pulas',
452.1995 +            'BYR' => 'Rubles',
452.1996 +            'BZD' => 'Dollars',
452.1997 +            'CAD' => 'Dollars',
452.1998 +            'CDF' => 'Congolese Francs',
452.1999 +            'CHF' => 'Francs',
452.2000 +            'CLP' => 'Pesos',
452.2001 +            'CNY' => 'Yuan Renminbi',
452.2002 +            'COP' => 'Pesos',
452.2003 +            'CRC' => 'Colones',
452.2004 +            'CUP' => 'Pesos',
452.2005 +            'CVE' => 'Escudos',
452.2006 +            'CYP' => 'Pounds',
452.2007 +            'CZK' => 'Koruny',
452.2008 +            'DEM' => 'Deutsche Marks',
452.2009 +            'DJF' => 'Francs',
452.2010 +            'DKK' => 'Kroner',
452.2011 +            'DOP' => 'Pesos',
452.2012 +            'DZD' => 'Algeria Dinars',
452.2013 +            'EEK' => 'Krooni',
452.2014 +            'EGP' => 'Pounds',
452.2015 +            'ERN' => 'Nakfa',
452.2016 +            'ESP' => 'Pesetas',
452.2017 +            'ETB' => 'Birr',
452.2018 +            'EUR' => 'Euro',
452.2019 +            'FIM' => 'Markkaa',
452.2020 +            'FJD' => 'Dollars',
452.2021 +            'FKP' => 'Pounds',
452.2022 +            'FRF' => 'Francs',
452.2023 +            'GBP' => 'Pounds',
452.2024 +            'GEL' => 'Lari',
452.2025 +            'GGP' => 'Pounds',
452.2026 +            'GHC' => 'Cedis',
452.2027 +            'GIP' => 'Pounds',
452.2028 +            'GMD' => 'Dalasi',
452.2029 +            'GNF' => 'Francs',
452.2030 +            'GRD' => 'Drachmae',
452.2031 +            'GTQ' => 'Quetzales',
452.2032 +            'GYD' => 'Dollars',
452.2033 +            'HKD' => 'Dollars',
452.2034 +            'HNL' => 'Lempiras',
452.2035 +            'HRK' => 'Kuna',
452.2036 +            'HTG' => 'Gourdes',
452.2037 +            'HUF' => 'Forints',
452.2038 +            'IDR' => 'Rupiahs',
452.2039 +            'IEP' => 'Pounds',
452.2040 +            'ILS' => 'New Shekels',
452.2041 +            'IMP' => 'Pounds',
452.2042 +            'INR' => 'Rupees',
452.2043 +            'IQD' => 'Dinars',
452.2044 +            'IRR' => 'Rials',
452.2045 +            'ISK' => 'Kronur',
452.2046 +            'ITL' => 'Lire',
452.2047 +            'JEP' => 'Pounds',
452.2048 +            'JMD' => 'Dollars',
452.2049 +            'JOD' => 'Dinars',
452.2050 +            'JPY' => 'Yen',
452.2051 +            'KES' => 'Shillings',
452.2052 +            'KGS' => 'Soms',
452.2053 +            'KHR' => 'Riels',
452.2054 +            'KMF' => 'Francs',
452.2055 +            'KPW' => 'Won',
452.2056 +            'KWD' => 'Dinars',
452.2057 +            'KYD' => 'Dollars',
452.2058 +            'KZT' => 'Tenge',
452.2059 +            'LAK' => 'Kips',
452.2060 +            'LBP' => 'Pounds',
452.2061 +            'LKR' => 'Rupees',
452.2062 +            'LRD' => 'Dollars',
452.2063 +            'LSL' => 'Maloti',
452.2064 +            'LTL' => 'Litai',
452.2065 +            'LUF' => 'Francs',
452.2066 +            'LVL' => 'Lati',
452.2067 +            'LYD' => 'Dinars',
452.2068 +            'MAD' => 'Dirhams',
452.2069 +            'MDL' => 'Lei',
452.2070 +            'MGF' => 'Malagasy Francs',
452.2071 +            'MKD' => 'Denars',
452.2072 +            'MMK' => 'Kyats',
452.2073 +            'MNT' => 'Tugriks',
452.2074 +            'MOP' => 'Patacas',
452.2075 +            'MRO' => 'Ouguiyas',
452.2076 +            'MTL' => 'Liri',
452.2077 +            'MUR' => 'Rupees',
452.2078 +            'MVR' => 'Rufiyaa',
452.2079 +            'MWK' => 'Kwachas',
452.2080 +            'MXN' => 'Pesos',
452.2081 +            'MYR' => 'Ringgits',
452.2082 +            'MZM' => 'Meticais',
452.2083 +            'NAD' => 'Dollars',
452.2084 +            'NGN' => 'Nairas',
452.2085 +            'NIO' => 'Gold Cordobas',
452.2086 +            'NLG' => 'Guilders',
452.2087 +            'NOK' => 'Krone',
452.2088 +            'NPR' => 'Nepal Rupees',
452.2089 +            'NZD' => 'Dollars',
452.2090 +            'OMR' => 'Rials',
452.2091 +            'PAB' => 'Balboa',
452.2092 +            'PEN' => 'Nuevos Soles',
452.2093 +            'PGK' => 'Kina',
452.2094 +            'PHP' => 'Pesos',
452.2095 +            'PKR' => 'Rupees',
452.2096 +            'PLN' => 'Zlotych',
452.2097 +            'PTE' => 'Escudos',
452.2098 +            'PYG' => 'Guarani',
452.2099 +            'QAR' => 'Rials',
452.2100 +            'ROL' => 'Lei',
452.2101 +            'RUR' => 'Rubles',
452.2102 +            'RWF' => 'Rwanda Francs',
452.2103 +            'SAR' => 'Riyals',
452.2104 +            'SBD' => 'Dollars',
452.2105 +            'SCR' => 'Rupees',
452.2106 +            'SDD' => 'Dinars',
452.2107 +            'SEK' => 'Kronor',
452.2108 +            'SGD' => 'Dollars',
452.2109 +            'SHP' => 'Pounds',
452.2110 +            'SIT' => 'Tolars',
452.2111 +            'SKK' => 'Koruny',
452.2112 +            'SLL' => 'Leones',
452.2113 +            'SOS' => 'Shillings',
452.2114 +            'SPL' => 'Luigini',
452.2115 +            'SRG' => 'Guilders',
452.2116 +            'STD' => 'Dobras',
452.2117 +            'SVC' => 'Colones',
452.2118 +            'SYP' => 'Pounds',
452.2119 +            'SZL' => 'Emalangeni',
452.2120 +            'THB' => 'Baht',
452.2121 +            'TJR' => 'Rubles',
452.2122 +            'TMM' => 'Manats',
452.2123 +            'TND' => 'Dinars',
452.2124 +            'TOP' => 'Pa\'anga',
452.2125 +            'TRL' => 'Liras',
452.2126 +            'TTD' => 'Dollars',
452.2127 +            'TVD' => 'Tuvalu Dollars',
452.2128 +            'TWD' => 'New Dollars',
452.2129 +            'TZS' => 'Shillings',
452.2130 +            'UAH' => 'Hryvnia',
452.2131 +            'UGX' => 'Shillings',
452.2132 +            'USD' => 'Dollars',
452.2133 +            'UYU' => 'Pesos',
452.2134 +            'UZS' => 'Sums',
452.2135 +            'VAL' => 'Lire',
452.2136 +            'VEB' => 'Bolivares',
452.2137 +            'VND' => 'Dong',
452.2138 +            'VUV' => 'Vatu',
452.2139 +            'WST' => 'Tala',
452.2140 +            'XAF' => 'Francs',
452.2141 +            'XAG' => 'Ounces',
452.2142 +            'XAU' => 'Ounces',
452.2143 +            'XCD' => 'Dollars',
452.2144 +            'XDR' => 'Special Drawing Rights',
452.2145 +            'XPD' => 'Ounces',
452.2146 +            'XPF' => 'Francs',
452.2147 +            'XPT' => 'Ounces',
452.2148 +            'YER' => 'Rials',
452.2149 +            'YUM' => 'New Dinars',
452.2150 +            'ZAR' => 'Rand',
452.2151 +            'ZMK' => 'Kwacha',
452.2152 +            'ZWD' => 'Zimbabwe Dollars'
452.2153 +        );
452.2154 +
452.2155 +        return @$lookup[$currency_id];
452.2156 +    }
452.2157 +
452.2158 +
452.2159 +
452.2160 +    public static function LookupCurrencyCountry($currency_id) {
452.2161 +
452.2162 +        static $lookup = array (
452.2163 +            'AED' => 'United Arab Emirates',
452.2164 +            'AFA' => 'Afghanistan',
452.2165 +            'ALL' => 'Albania',
452.2166 +            'AMD' => 'Armenia',
452.2167 +            'ANG' => 'Netherlands Antilles',
452.2168 +            'AOA' => 'Angola',
452.2169 +            'ARS' => 'Argentina',
452.2170 +            'ATS' => 'Austria',
452.2171 +            'AUD' => 'Australia',
452.2172 +            'AWG' => 'Aruba',
452.2173 +            'AZM' => 'Azerbaijan',
452.2174 +            'BAM' => 'Bosnia and Herzegovina',
452.2175 +            'BBD' => 'Barbados',
452.2176 +            'BDT' => 'Bangladesh',
452.2177 +            'BEF' => 'Belgium',
452.2178 +            'BGL' => 'Bulgaria',
452.2179 +            'BHD' => 'Bahrain',
452.2180 +            'BIF' => 'Burundi',
452.2181 +            'BMD' => 'Bermuda',
452.2182 +            'BND' => 'Brunei Darussalam',
452.2183 +            'BOB' => 'Bolivia',
452.2184 +            'BRL' => 'Brazil',
452.2185 +            'BSD' => 'Bahamas',
452.2186 +            'BTN' => 'Bhutan',
452.2187 +            'BWP' => 'Botswana',
452.2188 +            'BYR' => 'Belarus',
452.2189 +            'BZD' => 'Belize',
452.2190 +            'CAD' => 'Canada',
452.2191 +            'CDF' => 'Congo/Kinshasa',
452.2192 +            'CHF' => 'Switzerland',
452.2193 +            'CLP' => 'Chile',
452.2194 +            'CNY' => 'China',
452.2195 +            'COP' => 'Colombia',
452.2196 +            'CRC' => 'Costa Rica',
452.2197 +            'CUP' => 'Cuba',
452.2198 +            'CVE' => 'Cape Verde',
452.2199 +            'CYP' => 'Cyprus',
452.2200 +            'CZK' => 'Czech Republic',
452.2201 +            'DEM' => 'Germany',
452.2202 +            'DJF' => 'Djibouti',
452.2203 +            'DKK' => 'Denmark',
452.2204 +            'DOP' => 'Dominican Republic',
452.2205 +            'DZD' => 'Algeria',
452.2206 +            'EEK' => 'Estonia',
452.2207 +            'EGP' => 'Egypt',
452.2208 +            'ERN' => 'Eritrea',
452.2209 +            'ESP' => 'Spain',
452.2210 +            'ETB' => 'Ethiopia',
452.2211 +            'EUR' => 'Euro Member Countries',
452.2212 +            'FIM' => 'Finland',
452.2213 +            'FJD' => 'Fiji',
452.2214 +            'FKP' => 'Falkland Islands (Malvinas)',
452.2215 +            'FRF' => 'France',
452.2216 +            'GBP' => 'United Kingdom',
452.2217 +            'GEL' => 'Georgia',
452.2218 +            'GGP' => 'Guernsey',
452.2219 +            'GHC' => 'Ghana',
452.2220 +            'GIP' => 'Gibraltar',
452.2221 +            'GMD' => 'Gambia',
452.2222 +            'GNF' => 'Guinea',
452.2223 +            'GRD' => 'Greece',
452.2224 +            'GTQ' => 'Guatemala',
452.2225 +            'GYD' => 'Guyana',
452.2226 +            'HKD' => 'Hong Kong',
452.2227 +            'HNL' => 'Honduras',
452.2228 +            'HRK' => 'Croatia',
452.2229 +            'HTG' => 'Haiti',
452.2230 +            'HUF' => 'Hungary',
452.2231 +            'IDR' => 'Indonesia',
452.2232 +            'IEP' => 'Ireland (Eire)',
452.2233 +            'ILS' => 'Israel',
452.2234 +            'IMP' => 'Isle of Man',
452.2235 +            'INR' => 'India',
452.2236 +            'IQD' => 'Iraq',
452.2237 +            'IRR' => 'Iran',
452.2238 +            'ISK' => 'Iceland',
452.2239 +            'ITL' => 'Italy',
452.2240 +            'JEP' => 'Jersey',
452.2241 +            'JMD' => 'Jamaica',
452.2242 +            'JOD' => 'Jordan',
452.2243 +            'JPY' => 'Japan',
452.2244 +            'KES' => 'Kenya',
452.2245 +            'KGS' => 'Kyrgyzstan',
452.2246 +            'KHR' => 'Cambodia',
452.2247 +            'KMF' => 'Comoros',
452.2248 +            'KPW' => 'Korea',
452.2249 +            'KWD' => 'Kuwait',
452.2250 +            'KYD' => 'Cayman Islands',
452.2251 +            'KZT' => 'Kazakstan',
452.2252 +            'LAK' => 'Laos',
452.2253 +            'LBP' => 'Lebanon',
452.2254 +            'LKR' => 'Sri Lanka',
452.2255 +            'LRD' => 'Liberia',
452.2256 +            'LSL' => 'Lesotho',
452.2257 +            'LTL' => 'Lithuania',
452.2258 +            'LUF' => 'Luxembourg',
452.2259 +            'LVL' => 'Latvia',
452.2260 +            'LYD' => 'Libya',
452.2261 +            'MAD' => 'Morocco',
452.2262 +            'MDL' => 'Moldova',
452.2263 +            'MGF' => 'Madagascar',
452.2264 +            'MKD' => 'Macedonia',
452.2265 +            'MMK' => 'Myanmar (Burma)',
452.2266 +            'MNT' => 'Mongolia',
452.2267 +            'MOP' => 'Macau',
452.2268 +            'MRO' => 'Mauritania',
452.2269 +            'MTL' => 'Malta',
452.2270 +            'MUR' => 'Mauritius',
452.2271 +            'MVR' => 'Maldives (Maldive Islands)',
452.2272 +            'MWK' => 'Malawi',
452.2273 +            'MXN' => 'Mexico',
452.2274 +            'MYR' => 'Malaysia',
452.2275 +            'MZM' => 'Mozambique',
452.2276 +            'NAD' => 'Namibia',
452.2277 +            'NGN' => 'Nigeria',
452.2278 +            'NIO' => 'Nicaragua',
452.2279 +            'NLG' => 'Netherlands (Holland)',
452.2280 +            'NOK' => 'Norway',
452.2281 +            'NPR' => 'Nepal',
452.2282 +            'NZD' => 'New Zealand',
452.2283 +            'OMR' => 'Oman',
452.2284 +            'PAB' => 'Panama',
452.2285 +            'PEN' => 'Peru',
452.2286 +            'PGK' => 'Papua New Guinea',
452.2287 +            'PHP' => 'Philippines',
452.2288 +            'PKR' => 'Pakistan',
452.2289 +            'PLN' => 'Poland',
452.2290 +            'PTE' => 'Portugal',
452.2291 +            'PYG' => 'Paraguay',
452.2292 +            'QAR' => 'Qatar',
452.2293 +            'ROL' => 'Romania',
452.2294 +            'RUR' => 'Russia',
452.2295 +            'RWF' => 'Rwanda',
452.2296 +            'SAR' => 'Saudi Arabia',
452.2297 +            'SBD' => 'Solomon Islands',
452.2298 +            'SCR' => 'Seychelles',
452.2299 +            'SDD' => 'Sudan',
452.2300 +            'SEK' => 'Sweden',
452.2301 +            'SGD' => 'Singapore',
452.2302 +            'SHP' => 'Saint Helena',
452.2303 +            'SIT' => 'Slovenia',
452.2304 +            'SKK' => 'Slovakia',
452.2305 +            'SLL' => 'Sierra Leone',
452.2306 +            'SOS' => 'Somalia',
452.2307 +            'SPL' => 'Seborga',
452.2308 +            'SRG' => 'Suriname',
452.2309 +            'STD' => 'São Tome and Principe',
452.2310 +            'SVC' => 'El Salvador',
452.2311 +            'SYP' => 'Syria',
452.2312 +            'SZL' => 'Swaziland',
452.2313 +            'THB' => 'Thailand',
452.2314 +            'TJR' => 'Tajikistan',
452.2315 +            'TMM' => 'Turkmenistan',
452.2316 +            'TND' => 'Tunisia',
452.2317 +            'TOP' => 'Tonga',
452.2318 +            'TRL' => 'Turkey',
452.2319 +            'TTD' => 'Trinidad and Tobago',
452.2320 +            'TVD' => 'Tuvalu',
452.2321 +            'TWD' => 'Taiwan',
452.2322 +            'TZS' => 'Tanzania',
452.2323 +            'UAH' => 'Ukraine',
452.2324 +            'UGX' => 'Uganda',
452.2325 +            'USD' => 'United States of America',
452.2326 +            'UYU' => 'Uruguay',
452.2327 +            'UZS' => 'Uzbekistan',
452.2328 +            'VAL' => 'Vatican City',
452.2329 +            'VEB' => 'Venezuela',
452.2330 +            'VND' => 'Viet Nam',
452.2331 +            'VUV' => 'Vanuatu',
452.2332 +            'WST' => 'Samoa',
452.2333 +            'XAF' => 'Communauté Financière Africaine',
452.2334 +            'XAG' => 'Silver',
452.2335 +            'XAU' => 'Gold',
452.2336 +            'XCD' => 'East Caribbean',
452.2337 +            'XDR' => 'International Monetary Fund',
452.2338 +            'XPD' => 'Palladium',
452.2339 +            'XPF' => 'Comptoirs Français du Pacifique',
452.2340 +            'XPT' => 'Platinum',
452.2341 +            'YER' => 'Yemen',
452.2342 +            'YUM' => 'Yugoslavia',
452.2343 +            'ZAR' => 'South Africa',
452.2344 +            'ZMK' => 'Zambia',
452.2345 +            'ZWD' => 'Zimbabwe'
452.2346 +        );
452.2347 +        
452.2348 +        return @$lookup[$currency_id];
452.2349 +    }
452.2350 +
452.2351 +
452.2352 +
452.2353 +    public static function LanguageLookup($language_code, $case_sensitive=false) {
452.2354 +
452.2355 +        if (!$case_sensitive) {
452.2356 +            $language_code = strtolower($language_code);
452.2357 +        }
452.2358 +
452.2359 +        // http://www.id3.org/id3v2.4.0-structure.txt
452.2360 +        // [4.   ID3v2 frame overview]
452.2361 +        // The three byte language field, present in several frames, is used to
452.2362 +        // describe the language of the frame's content, according to ISO-639-2
452.2363 +        // [ISO-639-2]. The language should be represented in lower case. If the
452.2364 +        // language is not known the string "XXX" should be used.
452.2365 +
452.2366 +
452.2367 +        // ISO 639-2 - http://www.id3.org/iso639-2.html
452.2368 +
452.2369 +        static $lookup = array (
452.2370 +            'XXX' => 'unknown',
452.2371 +            'xxx' => 'unknown',
452.2372 +            'aar' => 'Afar',
452.2373 +            'abk' => 'Abkhazian',
452.2374 +            'ace' => 'Achinese',
452.2375 +            'ach' => 'Acoli',
452.2376 +            'ada' => 'Adangme',
452.2377 +            'afa' => 'Afro-Asiatic (Other)',
452.2378 +            'afh' => 'Afrihili',
452.2379 +            'afr' => 'Afrikaans',
452.2380 +            'aka' => 'Akan',
452.2381 +            'akk' => 'Akkadian',
452.2382 +            'alb' => 'Albanian',
452.2383 +            'ale' => 'Aleut',
452.2384 +            'alg' => 'Algonquian Languages',
452.2385 +            'amh' => 'Amharic',
452.2386 +            'ang' => 'English, Old (ca. 450-1100)',
452.2387 +            'apa' => 'Apache Languages',
452.2388 +            'ara' => 'Arabic',
452.2389 +            'arc' => 'Aramaic',
452.2390 +            'arm' => 'Armenian',
452.2391 +            'arn' => 'Araucanian',
452.2392 +            'arp' => 'Arapaho',
452.2393 +            'art' => 'Artificial (Other)',
452.2394 +            'arw' => 'Arawak',
452.2395 +            'asm' => 'Assamese',
452.2396 +            'ath' => 'Athapascan Languages',
452.2397 +            'ava' => 'Avaric',
452.2398 +            'ave' => 'Avestan',
452.2399 +            'awa' => 'Awadhi',
452.2400 +            'aym' => 'Aymara',
452.2401 +            'aze' => 'Azerbaijani',
452.2402 +            'bad' => 'Banda',
452.2403 +            'bai' => 'Bamileke Languages',
452.2404 +            'bak' => 'Bashkir',
452.2405 +            'bal' => 'Baluchi',
452.2406 +            'bam' => 'Bambara',
452.2407 +            'ban' => 'Balinese',
452.2408 +            'baq' => 'Basque',
452.2409 +            'bas' => 'Basa',
452.2410 +            'bat' => 'Baltic (Other)',
452.2411 +            'bej' => 'Beja',
452.2412 +            'bel' => 'Byelorussian',
452.2413 +            'bem' => 'Bemba',
452.2414 +            'ben' => 'Bengali',
452.2415 +            'ber' => 'Berber (Other)',
452.2416 +            'bho' => 'Bhojpuri',
452.2417 +            'bih' => 'Bihari',
452.2418 +            'bik' => 'Bikol',
452.2419 +            'bin' => 'Bini',
452.2420 +            'bis' => 'Bislama',
452.2421 +            'bla' => 'Siksika',
452.2422 +            'bnt' => 'Bantu (Other)',
452.2423 +            'bod' => 'Tibetan',
452.2424 +            'bra' => 'Braj',
452.2425 +            'bre' => 'Breton',
452.2426 +            'bua' => 'Buriat',
452.2427 +            'bug' => 'Buginese',
452.2428 +            'bul' => 'Bulgarian',
452.2429 +            'bur' => 'Burmese',
452.2430 +            'cad' => 'Caddo',
452.2431 +            'cai' => 'Central American Indian (Other)',
452.2432 +            'car' => 'Carib',
452.2433 +            'cat' => 'Catalan',
452.2434 +            'cau' => 'Caucasian (Other)',
452.2435 +            'ceb' => 'Cebuano',
452.2436 +            'cel' => 'Celtic (Other)',
452.2437 +            'ces' => 'Czech',
452.2438 +            'cha' => 'Chamorro',
452.2439 +            'chb' => 'Chibcha',
452.2440 +            'che' => 'Chechen',
452.2441 +            'chg' => 'Chagatai',
452.2442 +            'chi' => 'Chinese',
452.2443 +            'chm' => 'Mari',
452.2444 +            'chn' => 'Chinook jargon',
452.2445 +            'cho' => 'Choctaw',
452.2446 +            'chr' => 'Cherokee',
452.2447 +            'chu' => 'Church Slavic',
452.2448 +            'chv' => 'Chuvash',
452.2449 +            'chy' => 'Cheyenne',
452.2450 +            'cop' => 'Coptic',
452.2451 +            'cor' => 'Cornish',
452.2452 +            'cos' => 'Corsican',
452.2453 +            'cpe' => 'Creoles and Pidgins, English-based (Other)',
452.2454 +            'cpf' => 'Creoles and Pidgins, French-based (Other)',
452.2455 +            'cpp' => 'Creoles and Pidgins, Portuguese-based (Other)',
452.2456 +            'cre' => 'Cree',
452.2457 +            'crp' => 'Creoles and Pidgins (Other)',
452.2458 +            'cus' => 'Cushitic (Other)',
452.2459 +            'cym' => 'Welsh',
452.2460 +            'cze' => 'Czech',
452.2461 +            'dak' => 'Dakota',
452.2462 +            'dan' => 'Danish',
452.2463 +            'del' => 'Delaware',
452.2464 +            'deu' => 'German',
452.2465 +            'din' => 'Dinka',
452.2466 +            'div' => 'Divehi',
452.2467 +            'doi' => 'Dogri',
452.2468 +            'dra' => 'Dravidian (Other)',
452.2469 +            'dua' => 'Duala',
452.2470 +            'dum' => 'Dutch, Middle (ca. 1050-1350)',
452.2471 +            'dut' => 'Dutch',
452.2472 +            'dyu' => 'Dyula',
452.2473 +            'dzo' => 'Dzongkha',
452.2474 +            'efi' => 'Efik',
452.2475 +            'egy' => 'Egyptian (Ancient)',
452.2476 +            'eka' => 'Ekajuk',
452.2477 +            'ell' => 'Greek, Modern (1453-)',
452.2478 +            'elx' => 'Elamite',
452.2479 +            'eng' => 'English',
452.2480 +            'enm' => 'English, Middle (ca. 1100-1500)',
452.2481 +            'epo' => 'Esperanto',
452.2482 +            'esk' => 'Eskimo (Other)',
452.2483 +            'esl' => 'Spanish',
452.2484 +            'est' => 'Estonian',
452.2485 +            'eus' => 'Basque',
452.2486 +            'ewe' => 'Ewe',
452.2487 +            'ewo' => 'Ewondo',
452.2488 +            'fan' => 'Fang',
452.2489 +            'fao' => 'Faroese',
452.2490 +            'fas' => 'Persian',
452.2491 +            'fat' => 'Fanti',
452.2492 +            'fij' => 'Fijian',
452.2493 +            'fin' => 'Finnish',
452.2494 +            'fiu' => 'Finno-Ugrian (Other)',
452.2495 +            'fon' => 'Fon',
452.2496 +            'fra' => 'French',
452.2497 +            'fre' => 'French',
452.2498 +            'frm' => 'French, Middle (ca. 1400-1600)',
452.2499 +            'fro' => 'French, Old (842- ca. 1400)',
452.2500 +            'fry' => 'Frisian',
452.2501 +            'ful' => 'Fulah',
452.2502 +            'gaa' => 'Ga',
452.2503 +            'gae' => 'Gaelic (Scots)',
452.2504 +            'gai' => 'Irish',
452.2505 +            'gay' => 'Gayo',
452.2506 +            'gdh' => 'Gaelic (Scots)',
452.2507 +            'gem' => 'Germanic (Other)',
452.2508 +            'geo' => 'Georgian',
452.2509 +            'ger' => 'German',
452.2510 +            'gez' => 'Geez',
452.2511 +            'gil' => 'Gilbertese',
452.2512 +            'glg' => 'Gallegan',
452.2513 +            'gmh' => 'German, Middle High (ca. 1050-1500)',
452.2514 +            'goh' => 'German, Old High (ca. 750-1050)',
452.2515 +            'gon' => 'Gondi',
452.2516 +            'got' => 'Gothic',
452.2517 +            'grb' => 'Grebo',
452.2518 +            'grc' => 'Greek, Ancient (to 1453)',
452.2519 +            'gre' => 'Greek, Modern (1453-)',
452.2520 +            'grn' => 'Guarani',
452.2521 +            'guj' => 'Gujarati',
452.2522 +            'hai' => 'Haida',
452.2523 +            'hau' => 'Hausa',
452.2524 +            'haw' => 'Hawaiian',
452.2525 +            'heb' => 'Hebrew',
452.2526 +            'her' => 'Herero',
452.2527 +            'hil' => 'Hiligaynon',
452.2528 +            'him' => 'Himachali',
452.2529 +            'hin' => 'Hindi',
452.2530 +            'hmo' => 'Hiri Motu',
452.2531 +            'hun' => 'Hungarian',
452.2532 +            'hup' => 'Hupa',
452.2533 +            'hye' => 'Armenian',
452.2534 +            'iba' => 'Iban',
452.2535 +            'ibo' => 'Igbo',
452.2536 +            'ice' => 'Icelandic',
452.2537 +            'ijo' => 'Ijo',
452.2538 +            'iku' => 'Inuktitut',
452.2539 +            'ilo' => 'Iloko',
452.2540 +            'ina' => 'Interlingua (International Auxiliary language Association)',
452.2541 +            'inc' => 'Indic (Other)',
452.2542 +            'ind' => 'Indonesian',
452.2543 +            'ine' => 'Indo-European (Other)',
452.2544 +            'ine' => 'Interlingue',
452.2545 +            'ipk' => 'Inupiak',
452.2546 +            'ira' => 'Iranian (Other)',
452.2547 +            'iri' => 'Irish',
452.2548 +            'iro' => 'Iroquoian uages',
452.2549 +            'isl' => 'Icelandic',
452.2550 +            'ita' => 'Italian',
452.2551 +            'jav' => 'Javanese',
452.2552 +            'jaw' => 'Javanese',
452.2553 +            'jpn' => 'Japanese',
452.2554 +            'jpr' => 'Judeo-Persian',
452.2555 +            'jrb' => 'Judeo-Arabic',
452.2556 +            'kaa' => 'Kara-Kalpak',
452.2557 +            'kab' => 'Kabyle',
452.2558 +            'kac' => 'Kachin',
452.2559 +            'kal' => 'Greenlandic',
452.2560 +            'kam' => 'Kamba',
452.2561 +            'kan' => 'Kannada',
452.2562 +            'kar' => 'Karen',
452.2563 +            'kas' => 'Kashmiri',
452.2564 +            'kat' => 'Georgian',
452.2565 +            'kau' => 'Kanuri',
452.2566 +            'kaw' => 'Kawi',
452.2567 +            'kaz' => 'Kazakh',
452.2568 +            'kha' => 'Khasi',
452.2569 +            'khi' => 'Khoisan (Other)',
452.2570 +            'khm' => 'Khmer',
452.2571 +            'kho' => 'Khotanese',
452.2572 +            'kik' => 'Kikuyu',
452.2573 +            'kin' => 'Kinyarwanda',
452.2574 +            'kir' => 'Kirghiz',
452.2575 +            'kok' => 'Konkani',
452.2576 +            'kom' => 'Komi',
452.2577 +            'kon' => 'Kongo',
452.2578 +            'kor' => 'Korean',
452.2579 +            'kpe' => 'Kpelle',
452.2580 +            'kro' => 'Kru',
452.2581 +            'kru' => 'Kurukh',
452.2582 +            'kua' => 'Kuanyama',
452.2583 +            'kum' => 'Kumyk',
452.2584 +            'kur' => 'Kurdish',
452.2585 +            'kus' => 'Kusaie',
452.2586 +            'kut' => 'Kutenai',
452.2587 +            'lad' => 'Ladino',
452.2588 +            'lah' => 'Lahnda',
452.2589 +            'lam' => 'Lamba',
452.2590 +            'lao' => 'Lao',
452.2591 +            'lat' => 'Latin',
452.2592 +            'lav' => 'Latvian',
452.2593 +            'lez' => 'Lezghian',
452.2594 +            'lin' => 'Lingala',
452.2595 +            'lit' => 'Lithuanian',
452.2596 +            'lol' => 'Mongo',
452.2597 +            'loz' => 'Lozi',
452.2598 +            'ltz' => 'Letzeburgesch',
452.2599 +            'lub' => 'Luba-Katanga',
452.2600 +            'lug' => 'Ganda',
452.2601 +            'lui' => 'Luiseno',
452.2602 +            'lun' => 'Lunda',
452.2603 +            'luo' => 'Luo (Kenya and Tanzania)',
452.2604 +            'mac' => 'Macedonian',
452.2605 +            'mad' => 'Madurese',
452.2606 +            'mag' => 'Magahi',
452.2607 +            'mah' => 'Marshall',
452.2608 +            'mai' => 'Maithili',
452.2609 +            'mak' => 'Macedonian',
452.2610 +            'mak' => 'Makasar',
452.2611 +            'mal' => 'Malayalam',
452.2612 +            'man' => 'Mandingo',
452.2613 +            'mao' => 'Maori',
452.2614 +            'map' => 'Austronesian (Other)',
452.2615 +            'mar' => 'Marathi',
452.2616 +            'mas' => 'Masai',
452.2617 +            'max' => 'Manx',
452.2618 +            'may' => 'Malay',
452.2619 +            'men' => 'Mende',
452.2620 +            'mga' => 'Irish, Middle (900 - 1200)',
452.2621 +            'mic' => 'Micmac',
452.2622 +            'min' => 'Minangkabau',
452.2623 +            'mis' => 'Miscellaneous (Other)',
452.2624 +            'mkh' => 'Mon-Kmer (Other)',
452.2625 +            'mlg' => 'Malagasy',
452.2626 +            'mlt' => 'Maltese',
452.2627 +            'mni' => 'Manipuri',
452.2628 +            'mno' => 'Manobo Languages',
452.2629 +            'moh' => 'Mohawk',
452.2630 +            'mol' => 'Moldavian',
452.2631 +            'mon' => 'Mongolian',
452.2632 +            'mos' => 'Mossi',
452.2633 +            'mri' => 'Maori',
452.2634 +            'msa' => 'Malay',
452.2635 +            'mul' => 'Multiple Languages',
452.2636 +            'mun' => 'Munda Languages',
452.2637 +            'mus' => 'Creek',
452.2638 +            'mwr' => 'Marwari',
452.2639 +            'mya' => 'Burmese',
452.2640 +            'myn' => 'Mayan Languages',
452.2641 +            'nah' => 'Aztec',
452.2642 +            'nai' => 'North American Indian (Other)',
452.2643 +            'nau' => 'Nauru',
452.2644 +            'nav' => 'Navajo',
452.2645 +            'nbl' => 'Ndebele, South',
452.2646 +            'nde' => 'Ndebele, North',
452.2647 +            'ndo' => 'Ndongo',
452.2648 +            'nep' => 'Nepali',
452.2649 +            'new' => 'Newari',
452.2650 +            'nic' => 'Niger-Kordofanian (Other)',
452.2651 +            'niu' => 'Niuean',
452.2652 +            'nla' => 'Dutch',
452.2653 +            'nno' => 'Norwegian (Nynorsk)',
452.2654 +            'non' => 'Norse, Old',
452.2655 +            'nor' => 'Norwegian',
452.2656 +            'nso' => 'Sotho, Northern',
452.2657 +            'nub' => 'Nubian Languages',
452.2658 +            'nya' => 'Nyanja',
452.2659 +            'nym' => 'Nyamwezi',
452.2660 +            'nyn' => 'Nyankole',
452.2661 +            'nyo' => 'Nyoro',
452.2662 +            'nzi' => 'Nzima',
452.2663 +            'oci' => 'Langue d\'Oc (post 1500)',
452.2664 +            'oji' => 'Ojibwa',
452.2665 +            'ori' => 'Oriya',
452.2666 +            'orm' => 'Oromo',
452.2667 +            'osa' => 'Osage',
452.2668 +            'oss' => 'Ossetic',
452.2669 +            'ota' => 'Turkish, Ottoman (1500 - 1928)',
452.2670 +            'oto' => 'Otomian Languages',
452.2671 +            'paa' => 'Papuan-Australian (Other)',
452.2672 +            'pag' => 'Pangasinan',
452.2673 +            'pal' => 'Pahlavi',
452.2674 +            'pam' => 'Pampanga',
452.2675 +            'pan' => 'Panjabi',
452.2676 +            'pap' => 'Papiamento',
452.2677 +            'pau' => 'Palauan',
452.2678 +            'peo' => 'Persian, Old (ca 600 - 400 B.C.)',
452.2679 +            'per' => 'Persian',
452.2680 +            'phn' => 'Phoenician',
452.2681 +            'pli' => 'Pali',
452.2682 +            'pol' => 'Polish',
452.2683 +            'pon' => 'Ponape',
452.2684 +            'por' => 'Portuguese',
452.2685 +            'pra' => 'Prakrit uages',
452.2686 +            'pro' => 'Provencal, Old (to 1500)',
452.2687 +            'pus' => 'Pushto',
452.2688 +            'que' => 'Quechua',
452.2689 +            'raj' => 'Rajasthani',
452.2690 +            'rar' => 'Rarotongan',
452.2691 +            'roa' => 'Romance (Other)',
452.2692 +            'roh' => 'Rhaeto-Romance',
452.2693 +            'rom' => 'Romany',
452.2694 +            'ron' => 'Romanian',
452.2695 +            'rum' => 'Romanian',
452.2696 +            'run' => 'Rundi',
452.2697 +            'rus' => 'Russian',
452.2698 +            'sad' => 'Sandawe',
452.2699 +            'sag' => 'Sango',
452.2700 +            'sah' => 'Yakut',
452.2701 +            'sai' => 'South American Indian (Other)',
452.2702 +            'sal' => 'Salishan Languages',
452.2703 +            'sam' => 'Samaritan Aramaic',
452.2704 +            'san' => 'Sanskrit',
452.2705 +            'sco' => 'Scots',
452.2706 +            'scr' => 'Serbo-Croatian',
452.2707 +            'sel' => 'Selkup',
452.2708 +            'sem' => 'Semitic (Other)',
452.2709 +            'sga' => 'Irish, Old (to 900)',
452.2710 +            'shn' => 'Shan',
452.2711 +            'sid' => 'Sidamo',
452.2712 +            'sin' => 'Singhalese',
452.2713 +            'sio' => 'Siouan Languages',
452.2714 +            'sit' => 'Sino-Tibetan (Other)',
452.2715 +            'sla' => 'Slavic (Other)',
452.2716 +            'slk' => 'Slovak',
452.2717 +            'slo' => 'Slovak',
452.2718 +            'slv' => 'Slovenian',
452.2719 +            'smi' => 'Sami Languages',
452.2720 +            'smo' => 'Samoan',
452.2721 +            'sna' => 'Shona',
452.2722 +            'snd' => 'Sindhi',
452.2723 +            'sog' => 'Sogdian',
452.2724 +            'som' => 'Somali',
452.2725 +            'son' => 'Songhai',
452.2726 +            'sot' => 'Sotho, Southern',
452.2727 +            'spa' => 'Spanish',
452.2728 +            'sqi' => 'Albanian',
452.2729 +            'srd' => 'Sardinian',
452.2730 +            'srr' => 'Serer',
452.2731 +            'ssa' => 'Nilo-Saharan (Other)',
452.2732 +            'ssw' => 'Siswant',
452.2733 +            'ssw' => 'Swazi',
452.2734 +            'suk' => 'Sukuma',
452.2735 +            'sun' => 'Sudanese',
452.2736 +            'sus' => 'Susu',
452.2737 +            'sux' => 'Sumerian',
452.2738 +            'sve' => 'Swedish',
452.2739 +            'swa' => 'Swahili',
452.2740 +            'swe' => 'Swedish',
452.2741 +            'syr' => 'Syriac',
452.2742 +            'tah' => 'Tahitian',
452.2743 +            'tam' => 'Tamil',
452.2744 +            'tat' => 'Tatar',
452.2745 +            'tel' => 'Telugu',
452.2746 +            'tem' => 'Timne',
452.2747 +            'ter' => 'Tereno',
452.2748 +            'tgk' => 'Tajik',
452.2749 +            'tgl' => 'Tagalog',
452.2750 +            'tha' => 'Thai',
452.2751 +            'tib' => 'Tibetan',
452.2752 +            'tig' => 'Tigre',
452.2753 +            'tir' => 'Tigrinya',
452.2754 +            'tiv' => 'Tivi',
452.2755 +            'tli' => 'Tlingit',
452.2756 +            'tmh' => 'Tamashek',
452.2757 +            'tog' => 'Tonga (Nyasa)',
452.2758 +            'ton' => 'Tonga (Tonga Islands)',
452.2759 +            'tru' => 'Truk',
452.2760 +            'tsi' => 'Tsimshian',
452.2761 +            'tsn' => 'Tswana',
452.2762 +            'tso' => 'Tsonga',
452.2763 +            'tuk' => 'Turkmen',
452.2764 +            'tum' => 'Tumbuka',
452.2765 +            'tur' => 'Turkish',
452.2766 +            'tut' => 'Altaic (Other)',
452.2767 +            'twi' => 'Twi',
452.2768 +            'tyv' => 'Tuvinian',
452.2769 +            'uga' => 'Ugaritic',
452.2770 +            'uig' => 'Uighur',
452.2771 +            'ukr' => 'Ukrainian',
452.2772 +            'umb' => 'Umbundu',
452.2773 +            'und' => 'Undetermined',
452.2774 +            'urd' => 'Urdu',
452.2775 +            'uzb' => 'Uzbek',
452.2776 +            'vai' => 'Vai',
452.2777 +            'ven' => 'Venda',
452.2778 +            'vie' => 'Vietnamese',
452.2779 +            'vol' => 'Volapük',
452.2780 +            'vot' => 'Votic',
452.2781 +            'wak' => 'Wakashan Languages',
452.2782 +            'wal' => 'Walamo',
452.2783 +            'war' => 'Waray',
452.2784 +            'was' => 'Washo',
452.2785 +            'wel' => 'Welsh',
452.2786 +            'wen' => 'Sorbian Languages',
452.2787 +            'wol' => 'Wolof',
452.2788 +            'xho' => 'Xhosa',
452.2789 +            'yao' => 'Yao',
452.2790 +            'yap' => 'Yap',
452.2791 +            'yid' => 'Yiddish',
452.2792 +            'yor' => 'Yoruba',
452.2793 +            'zap' => 'Zapotec',
452.2794 +            'zen' => 'Zenaga',
452.2795 +            'zha' => 'Zhuang',
452.2796 +            'zho' => 'Chinese',
452.2797 +            'zul' => 'Zulu',
452.2798 +            'zun' => 'Zuni'
452.2799 +        );        
452.2800 +
452.2801 +        return @$lookup[$language_code];
452.2802 +    }
452.2803 +
452.2804 +
452.2805 +    
452.2806 +    public static function ETCOEventLookup($index) {
452.2807 +        
452.2808 +        if (($index >= 0x17) && ($index <= 0xDF)) {
452.2809 +            return 'reserved for future use';
452.2810 +        }
452.2811 +        if (($index >= 0xE0) && ($index <= 0xEF)) {
452.2812 +            return 'not predefined synch 0-F';
452.2813 +        }
452.2814 +        if (($index >= 0xF0) && ($index <= 0xFC)) {
452.2815 +            return 'reserved for future use';
452.2816 +        }
452.2817 +
452.2818 +        static $lookup = array (
452.2819 +            0x00 => 'padding (has no meaning)',
452.2820 +            0x01 => 'end of initial silence',
452.2821 +            0x02 => 'intro start',
452.2822 +            0x03 => 'main part start',
452.2823 +            0x04 => 'outro start',
452.2824 +            0x05 => 'outro end',
452.2825 +            0x06 => 'verse start',
452.2826 +            0x07 => 'refrain start',
452.2827 +            0x08 => 'interlude start',
452.2828 +            0x09 => 'theme start',
452.2829 +            0x0A => 'variation start',
452.2830 +            0x0B => 'key change',
452.2831 +            0x0C => 'time change',
452.2832 +            0x0D => 'momentary unwanted noise (Snap, Crackle & Pop)',
452.2833 +            0x0E => 'sustained noise',
452.2834 +            0x0F => 'sustained noise end',
452.2835 +            0x10 => 'intro end',
452.2836 +            0x11 => 'main part end',
452.2837 +            0x12 => 'verse end',
452.2838 +            0x13 => 'refrain end',
452.2839 +            0x14 => 'theme end',
452.2840 +            0x15 => 'profanity',
452.2841 +            0x16 => 'profanity end',
452.2842 +            0xFD => 'audio end (start of silence)',
452.2843 +            0xFE => 'audio file ends',
452.2844 +            0xFF => 'one more byte of events follows'
452.2845 +        );
452.2846 +
452.2847 +        return @$lookup[$index];
452.2848 +    }
452.2849 +
452.2850 +
452.2851 +
452.2852 +    public static function SYTLContentTypeLookup($index) {
452.2853 +
452.2854 +        static $lookup = array (
452.2855 +            0x00 => 'other',
452.2856 +            0x01 => 'lyrics',
452.2857 +            0x02 => 'text transcription',
452.2858 +            0x03 => 'movement/part name', // (e.g. 'Adagio')
452.2859 +            0x04 => 'events',             // (e.g. 'Don Quijote enters the stage')
452.2860 +            0x05 => 'chord',              // (e.g. 'Bb F Fsus')
452.2861 +            0x06 => 'trivia/\'pop up\' information',
452.2862 +            0x07 => 'URLs to webpages',
452.2863 +            0x08 => 'URLs to images'
452.2864 +        );
452.2865 +
452.2866 +        return @$lookup[$index];
452.2867 +    }
452.2868 +
452.2869 +
452.2870 +
452.2871 +    public static function APICPictureTypeLookup($index, $return_array=false) {
452.2872 +
452.2873 +        static $lookup = array (
452.2874 +            0x00 => 'Other',
452.2875 +            0x01 => '32x32 pixels \'file icon\' (PNG only)',
452.2876 +            0x02 => 'Other file icon',
452.2877 +            0x03 => 'Cover (front)',
452.2878 +            0x04 => 'Cover (back)',
452.2879 +            0x05 => 'Leaflet page',
452.2880 +            0x06 => 'Media (e.g. label side of CD)',
452.2881 +            0x07 => 'Lead artist/lead performer/soloist',
452.2882 +            0x08 => 'Artist/performer',
452.2883 +            0x09 => 'Conductor',
452.2884 +            0x0A => 'Band/Orchestra',
452.2885 +            0x0B => 'Composer',
452.2886 +            0x0C => 'Lyricist/text writer',
452.2887 +            0x0D => 'Recording Location',
452.2888 +            0x0E => 'During recording',
452.2889 +            0x0F => 'During performance',
452.2890 +            0x10 => 'Movie/video screen capture',
452.2891 +            0x11 => 'A bright coloured fish',
452.2892 +            0x12 => 'Illustration',
452.2893 +            0x13 => 'Band/artist logotype',
452.2894 +            0x14 => 'Publisher/Studio logotype'
452.2895 +        );
452.2896 +        
452.2897 +        if ($return_array) {
452.2898 +            return $lookup;
452.2899 +        }
452.2900 +        return @$lookup[$index];
452.2901 +    }
452.2902 +
452.2903 +
452.2904 +
452.2905 +    public static function COMRReceivedAsLookup($index) {
452.2906 +
452.2907 +        static $lookup = array (
452.2908 +            0x00 => 'Other',
452.2909 +            0x01 => 'Standard CD album with other songs',
452.2910 +            0x02 => 'Compressed audio on CD',
452.2911 +            0x03 => 'File over the Internet',
452.2912 +            0x04 => 'Stream over the Internet',
452.2913 +            0x05 => 'As note sheets',
452.2914 +            0x06 => 'As note sheets in a book with other sheets',
452.2915 +            0x07 => 'Music on other media',
452.2916 +            0x08 => 'Non-musical merchandise'
452.2917 +        );
452.2918 +
452.2919 +        return (isset($lookup[$index]) ? $lookup[$index] : '');
452.2920 +    }
452.2921 +
452.2922 +
452.2923 +
452.2924 +    public static function RVA2ChannelTypeLookup($index) {
452.2925 +        
452.2926 +        static $lookup = array (
452.2927 +            0x00 => 'Other',
452.2928 +            0x01 => 'Master volume',
452.2929 +            0x02 => 'Front right',
452.2930 +            0x03 => 'Front left',
452.2931 +            0x04 => 'Back right',
452.2932 +            0x05 => 'Back left',
452.2933 +            0x06 => 'Front centre',
452.2934 +            0x07 => 'Back centre',
452.2935 +            0x08 => 'Subwoofer'
452.2936 +        );
452.2937 +
452.2938 +        return @$lookup[$index];
452.2939 +    }
452.2940 +
452.2941 +
452.2942 +
452.2943 +    public static function FrameNameLongLookup($frame_name) {
452.2944 +
452.2945 +        static $lookup = array (
452.2946 +            'AENC' => 'Audio encryption',
452.2947 +            'APIC' => 'Attached picture',
452.2948 +            'ASPI' => 'Audio seek point index',
452.2949 +            'BUF'  => 'Recommended buffer size',
452.2950 +            'CNT'  => 'Play counter',
452.2951 +            'COM'  => 'Comments',
452.2952 +            'COMM' => 'Comments',
452.2953 +            'COMR' => 'Commercial frame',
452.2954 +            'CRA'  => 'Audio encryption',
452.2955 +            'CRM'  => 'Encrypted meta frame',
452.2956 +            'ENCR' => 'Encryption method registration',
452.2957 +            'EQU'  => 'Equalisation',
452.2958 +            'EQU2' => 'Equalisation (2)',
452.2959 +            'EQUA' => 'Equalisation',
452.2960 +            'ETC'  => 'Event timing codes',
452.2961 +            'ETCO' => 'Event timing codes',
452.2962 +            'GEO'  => 'General encapsulated object',
452.2963 +            'GEOB' => 'General encapsulated object',
452.2964 +            'GRID' => 'Group identification registration',
452.2965 +            'IPL'  => 'Involved people list',
452.2966 +            'IPLS' => 'Involved people list',
452.2967 +            'LINK' => 'Linked information',
452.2968 +            'LNK'  => 'Linked information',
452.2969 +            'MCDI' => 'Music CD identifier',
452.2970 +            'MCI'  => 'Music CD Identifier',
452.2971 +            'MLL'  => 'MPEG location lookup table',
452.2972 +            'MLLT' => 'MPEG location lookup table',
452.2973 +            'OWNE' => 'Ownership frame',
452.2974 +            'PCNT' => 'Play counter',
452.2975 +            'PIC'  => 'Attached picture',
452.2976 +            'POP'  => 'Popularimeter',
452.2977 +            'POPM' => 'Popularimeter',
452.2978 +            'POSS' => 'Position synchronisation frame',
452.2979 +            'PRIV' => 'Private frame',
452.2980 +            'RBUF' => 'Recommended buffer size',
452.2981 +            'REV'  => 'Reverb',
452.2982 +            'RVA'  => 'Relative volume adjustment',
452.2983 +            'RVA2' => 'Relative volume adjustment (2)',
452.2984 +            'RVAD' => 'Relative volume adjustment',
452.2985 +            'RVRB' => 'Reverb',
452.2986 +            'SEEK' => 'Seek frame',
452.2987 +            'SIGN' => 'Signature frame',
452.2988 +            'SLT'  => 'Synchronised lyric/text',
452.2989 +            'STC'  => 'Synced tempo codes',
452.2990 +            'SYLT' => 'Synchronised lyric/text',
452.2991 +            'SYTC' => 'Synchronised tempo codes',
452.2992 +            'TAL'  => 'Album/Movie/Show title',
452.2993 +            'TALB' => 'Album/Movie/Show title',
452.2994 +            'TBP'  => 'BPM (Beats Per Minute)',
452.2995 +            'TBPM' => 'BPM (beats per minute)',
452.2996 +            'TCM'  => 'Composer',
452.2997 +            'TCO'  => 'Content type',
452.2998 +            'TCOM' => 'Composer',
452.2999 +            'TCON' => 'Content type',
452.3000 +            'TCOP' => 'Copyright message',
452.3001 +            'TCR'  => 'Copyright message',
452.3002 +            'TDA'  => 'Date',
452.3003 +            'TDAT' => 'Date',
452.3004 +            'TDEN' => 'Encoding time',
452.3005 +            'TDLY' => 'Playlist delay',
452.3006 +            'TDOR' => 'Original release time',
452.3007 +            'TDRC' => 'Recording time',
452.3008 +            'TDRL' => 'Release time',
452.3009 +            'TDTG' => 'Tagging time',
452.3010 +            'TDY'  => 'Playlist delay',
452.3011 +            'TEN'  => 'Encoded by',
452.3012 +            'TENC' => 'Encoded by',
452.3013 +            'TEXT' => 'Lyricist/Text writer',
452.3014 +            'TFLT' => 'File type',
452.3015 +            'TFT'  => 'File type',
452.3016 +            'TIM'  => 'Time',
452.3017 +            'TIME' => 'Time',
452.3018 +            'TIPL' => 'Involved people list',
452.3019 +            'TIT1' => 'Content group description',
452.3020 +            'TIT2' => 'Title/songname/content description',
452.3021 +            'TIT3' => 'Subtitle/Description refinement',
452.3022 +            'TKE'  => 'Initial key',
452.3023 +            'TKEY' => 'Initial key',
452.3024 +            'TLA'  => 'Language(s)',
452.3025 +            'TLAN' => 'Language(s)',
452.3026 +            'TLE'  => 'Length',
452.3027 +            'TLEN' => 'Length',
452.3028 +            'TMCL' => 'Musician credits list',
452.3029 +            'TMED' => 'Media type',
452.3030 +            'TMOO' => 'Mood',
452.3031 +            'TMT'  => 'Media type',
452.3032 +            'TOA'  => 'Original artist(s)/performer(s)',
452.3033 +            'TOAL' => 'Original album/movie/show title',
452.3034 +            'TOF'  => 'Original filename',
452.3035 +            'TOFN' => 'Original filename',
452.3036 +            'TOL'  => 'Original Lyricist(s)/text writer(s)',
452.3037 +            'TOLY' => 'Original lyricist(s)/text writer(s)',
452.3038 +            'TOPE' => 'Original artist(s)/performer(s)',
452.3039 +            'TOR'  => 'Original release year',
452.3040 +            'TORY' => 'Original release year',
452.3041 +            'TOT'  => 'Original album/Movie/Show title',
452.3042 +            'TOWN' => 'File owner/licensee',
452.3043 +            'TP1'  => 'Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group',
452.3044 +            'TP2'  => 'Band/Orchestra/Accompaniment',
452.3045 +            'TP3'  => 'Conductor/Performer refinement',
452.3046 +            'TP4'  => 'Interpreted, remixed, or otherwise modified by',
452.3047 +            'TPA'  => 'Part of a set',
452.3048 +            'TPB'  => 'Publisher',
452.3049 +            'TPE1' => 'Lead performer(s)/Soloist(s)',
452.3050 +            'TPE2' => 'Band/orchestra/accompaniment',
452.3051 +            'TPE3' => 'Conductor/performer refinement',
452.3052 +            'TPE4' => 'Interpreted, remixed, or otherwise modified by',
452.3053 +            'TPOS' => 'Part of a set',
452.3054 +            'TPRO' => 'Produced notice',
452.3055 +            'TPUB' => 'Publisher',
452.3056 +            'TRC'  => 'ISRC (International Standard Recording Code)',
452.3057 +            'TRCK' => 'Track number/Position in set',
452.3058 +            'TRD'  => 'Recording dates',
452.3059 +            'TRDA' => 'Recording dates',
452.3060 +            'TRK'  => 'Track number/Position in set',
452.3061 +            'TRSN' => 'Internet radio station name',
452.3062 +            'TRSO' => 'Internet radio station owner',
452.3063 +            'TSI'  => 'Size',
452.3064 +            'TSIZ' => 'Size',
452.3065 +            'TSOA' => 'Album sort order',
452.3066 +            'TSOP' => 'Performer sort order',
452.3067 +            'TSOT' => 'Title sort order',
452.3068 +            'TSRC' => 'ISRC (international standard recording code)',
452.3069 +            'TSS'  => 'Software/hardware and settings used for encoding',
452.3070 +            'TSSE' => 'Software/Hardware and settings used for encoding',
452.3071 +            'TSST' => 'Set subtitle',
452.3072 +            'TT1'  => 'Content group description',
452.3073 +            'TT2'  => 'Title/Songname/Content description',
452.3074 +            'TT3'  => 'Subtitle/Description refinement',
452.3075 +            'TXT'  => 'Lyricist/text writer',
452.3076 +            'TXX'  => 'User defined text information frame',
452.3077 +            'TXXX' => 'User defined text information frame',
452.3078 +            'TYE'  => 'Year',
452.3079 +            'TYER' => 'Year',
452.3080 +            'UFI'  => 'Unique file identifier',
452.3081 +            'UFID' => 'Unique file identifier',
452.3082 +            'ULT'  => 'Unsychronised lyric/text transcription',
452.3083 +            'USER' => 'Terms of use',
452.3084 +            'USLT' => 'Unsynchronised lyric/text transcription',
452.3085 +            'WAF'  => 'Official audio file webpage',
452.3086 +            'WAR'  => 'Official artist/performer webpage',
452.3087 +            'WAS'  => 'Official audio source webpage',
452.3088 +            'WCM'  => 'Commercial information',
452.3089 +            'WCOM' => 'Commercial information',
452.3090 +            'WCOP' => 'Copyright/Legal information',
452.3091 +            'WCP'  => 'Copyright/Legal information',
452.3092 +            'WOAF' => 'Official audio file webpage',
452.3093 +            'WOAR' => 'Official artist/performer webpage',
452.3094 +            'WOAS' => 'Official audio source webpage',
452.3095 +            'WORS' => 'Official Internet radio station homepage',
452.3096 +            'WPAY' => 'Payment',
452.3097 +            'WPB'  => 'Publishers official webpage',
452.3098 +            'WPUB' => 'Publishers official webpage',
452.3099 +            'WXX'  => 'User defined URL link frame',
452.3100 +            'WXXX' => 'User defined URL link frame',
452.3101 +            'TFEA' => 'Featured Artist',
452.3102 +            'TSTU' => 'Recording Studio',
452.3103 +            'rgad' => 'Replay Gain Adjustment'
452.3104 +        );        
452.3105 +        
452.3106 +        return @$lookup[$frame_name];
452.3107 +
452.3108 +        // Last three:
452.3109 +        // from Helium2 [www.helium2.com]
452.3110 +        // from http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
452.3111 +    }
452.3112 +
452.3113 +
452.3114 +    public static function FrameNameShortLookup($frame_name) {
452.3115 +
452.3116 +        static $lookup = array (
452.3117 +            'COM'  => 'comment',
452.3118 +            'COMM' => 'comment',
452.3119 +            'TAL'  => 'album',
452.3120 +            'TALB' => 'album',
452.3121 +            'TBP'  => 'bpm',
452.3122 +            'TBPM' => 'bpm',
452.3123 +            'TCM'  => 'composer',
452.3124 +            'TCO'  => 'genre',
452.3125 +            'TCOM' => 'composer',
452.3126 +            'TCON' => 'genre',
452.3127 +            'TCOP' => 'copyright',
452.3128 +            'TCR'  => 'copyright',
452.3129 +            'TEN'  => 'encoded_by',
452.3130 +            'TENC' => 'encoded_by',
452.3131 +            'TEXT' => 'lyricist',
452.3132 +            'TIT1' => 'description',
452.3133 +            'TIT2' => 'title',
452.3134 +            'TIT3' => 'subtitle',
452.3135 +            'TLA'  => 'language',
452.3136 +            'TLAN' => 'language',
452.3137 +            'TLE'  => 'length',
452.3138 +            'TLEN' => 'length',
452.3139 +            'TMOO' => 'mood',
452.3140 +            'TOA'  => 'original_artist',
452.3141 +            'TOAL' => 'original_album',
452.3142 +            'TOF'  => 'original_filename',
452.3143 +            'TOFN' => 'original_filename',
452.3144 +            'TOL'  => 'original_lyricist',
452.3145 +            'TOLY' => 'original_lyricist',
452.3146 +            'TOPE' => 'original_artist',
452.3147 +            'TOT'  => 'original_album',
452.3148 +            'TP1'  => 'artist',
452.3149 +            'TP2'  => 'band',
452.3150 +            'TP3'  => 'conductor',
452.3151 +            'TP4'  => 'remixer',
452.3152 +            'TPB'  => 'publisher',
452.3153 +            'TPE1' => 'artist',
452.3154 +            'TPE2' => 'band',
452.3155 +            'TPE3' => 'conductor',
452.3156 +            'TPE4' => 'remixer',
452.3157 +            'TPUB' => 'publisher',
452.3158 +            'TRC'  => 'isrc',
452.3159 +            'TRCK' => 'track',
452.3160 +            'TRK'  => 'track',
452.3161 +            'TSI'  => 'size',
452.3162 +            'TSIZ' => 'size',
452.3163 +            'TSRC' => 'isrc',
452.3164 +            'TSS'  => 'encoder_settings',
452.3165 +            'TSSE' => 'encoder_settings',
452.3166 +            'TSST' => 'subtitle',
452.3167 +            'TT1'  => 'description',
452.3168 +            'TT2'  => 'title',
452.3169 +            'TT3'  => 'subtitle',
452.3170 +            'TXT'  => 'lyricist',
452.3171 +            'TXX'  => 'text',
452.3172 +            'TXXX' => 'text',
452.3173 +            'TYE'  => 'year',
452.3174 +            'TYER' => 'year',
452.3175 +            'UFI'  => 'unique_file_identifier',
452.3176 +            'UFID' => 'unique_file_identifier',
452.3177 +            'ULT'  => 'unsychronised_lyric',
452.3178 +            'USER' => 'terms_of_use',
452.3179 +            'USLT' => 'unsynchronised lyric',
452.3180 +            'WAF'  => 'url_file',
452.3181 +            'WAR'  => 'url_artist',
452.3182 +            'WAS'  => 'url_source',
452.3183 +            'WCOP' => 'copyright',
452.3184 +            'WCP'  => 'copyright',
452.3185 +            'WOAF' => 'url_file',
452.3186 +            'WOAR' => 'url_artist',
452.3187 +            'WOAS' => 'url_source',
452.3188 +            'WORS' => 'url_station',
452.3189 +            'WPB'  => 'url_publisher',
452.3190 +            'WPUB' => 'url_publisher',
452.3191 +            'WXX'  => 'url_user',
452.3192 +            'WXXX' => 'url_user',
452.3193 +            'TFEA' => 'featured_artist',
452.3194 +            'TSTU' => 'studio'
452.3195 +        );
452.3196 +
452.3197 +        return @$lookup[$frame_name];
452.3198 +    }
452.3199 +
452.3200 +
452.3201 +
452.3202 +    public static function TextEncodingTerminatorLookup($encoding) {
452.3203 +
452.3204 +        // http://www.id3.org/id3v2.4.0-structure.txt
452.3205 +        // Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings:
452.3206 +        // $00  ISO-8859-1. Terminated with $00.
452.3207 +        // $01  UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00.
452.3208 +        // $02  UTF-16BE encoded Unicode without BOM. Terminated with $00 00.
452.3209 +        // $03  UTF-8 encoded Unicode. Terminated with $00.
452.3210 +
452.3211 +        static $lookup = array (
452.3212 +            0   => "\x00", 
452.3213 +            1   => "\x00\x00", 
452.3214 +            2   => "\x00\x00", 
452.3215 +            3   => "\x00", 
452.3216 +            255 => "\x00\x00"
452.3217 +        );
452.3218 +
452.3219 +        return @$lookup[$encoding];
452.3220 +    }
452.3221 +
452.3222 +
452.3223 +
452.3224 +    public static function IsValidID3v2FrameName($frame_name, $id3v2_major_version) {
452.3225 +
452.3226 +        switch ($id3v2_major_version) {
452.3227 +            case 2:
452.3228 +                return preg_match('/[A-Z][A-Z0-9]{2}/', $frame_name);
452.3229 +
452.3230 +            case 3:
452.3231 +            case 4:
452.3232 +                return preg_match('/[A-Z][A-Z0-9]{3}/', $frame_name);
452.3233 +        }
452.3234 +        return false;
452.3235 +    }
452.3236 +
452.3237 +
452.3238 +
452.3239 +    public static function IsValidDateStampString($date_stamp) {
452.3240 +
452.3241 +        if (strlen($date_stamp) != 8) {
452.3242 +            return false;
452.3243 +        }
452.3244 +        if ((int)$date_stamp) {
452.3245 +            return false;
452.3246 +        }
452.3247 +        
452.3248 +        $year  = substr($date_stamp, 0, 4);
452.3249 +        $month = substr($date_stamp, 4, 2);
452.3250 +        $day   = substr($date_stamp, 6, 2);
452.3251 +        if (!$year  ||  !$month  ||  !$day  ||  $month > 12  ||  $day > 31 ) {
452.3252 +            return false;
452.3253 +        }
452.3254 +        if (($day > 30) && (($month == 4) || ($month == 6) || ($month == 9) || ($month == 11))) {
452.3255 +            return false;
452.3256 +        }
452.3257 +        if (($day > 29) && ($month == 2)) {
452.3258 +            return false;
452.3259 +        }
452.3260 +        return true;
452.3261 +    }
452.3262 +    
452.3263 +    
452.3264 +
452.3265 +    public static function array_merge_noclobber($array1, $array2) {
452.3266 +        if (!is_array($array1) || !is_array($array2)) {
452.3267 +            return false;
452.3268 +        }
452.3269 +        $newarray = $array1;
452.3270 +        foreach ($array2 as $key => $val) {
452.3271 +            if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) {
452.3272 +                $newarray[$key] = getid3_id3v2::array_merge_noclobber($newarray[$key], $val);
452.3273 +            } elseif (!isset($newarray[$key])) {
452.3274 +                $newarray[$key] = $val;
452.3275 +            }
452.3276 +        }
452.3277 +        return $newarray;
452.3278 +    }
452.3279 +
452.3280 +
452.3281 +}
452.3282 +
452.3283 +?>
452.3284 \ No newline at end of file
   453.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   453.2 +++ b/e2gallerypro/e2upload/Backend/Assets/getid3/module.tag.lyrics3.php	Mon Feb 22 08:02:39 2010 -0500
   453.3 @@ -0,0 +1,270 @@
   453.4 +<?php
   453.5 +// +----------------------------------------------------------------------+
   453.6 +// | PHP version 5                                                        |
   453.7 +// +----------------------------------------------------------------------+
   453.8 +// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen                 |
   453.9 +// +----------------------------------------------------------------------+
  453.10 +// | This source file is subject to version 2 of the GPL license,         |
  453.11 +// | that is bundled with this package in the file license.txt and is     |
  453.12 +// | available through the world-wide-web at the following url:           |
  453.13 +// | http://www.gnu.org/copyleft/gpl.html                                 |
  453.14 +// +----------------------------------------------------------------------+
  453.15 +// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
  453.16 +// +----------------------------------------------------------------------+
  453.17 +// | Authors: James Heinrich <infoØgetid3*org>                            |
  453.18 +// |          Allan Hansen <ahØartemis*dk>                                |
  453.19 +// +----------------------------------------------------------------------+
  453.20 +// | module.tag.lyrics3.php                                               |
  453.21 +// | module for analyzing Lyrics3 tags                                    |
  453.22 +// | dependencies: module.tag.apetag.php (optional)                       |
  453.23 +// +----------------------------------------------------------------------+
  453.24 +//
  453.25 +// $Id: module.tag.lyrics3.php,v 1.5 2006/11/16 22:04:23 ah Exp $
  453.26 +
  453.27 +
  453.28 +class getid3_lyrics3 extends getid3_handler
  453.29 +{
  453.30 +
  453.31 +    public function Analyze() {
  453.32 +
  453.33 +        $getid3 = $this->getid3;
  453.34 +
  453.35 +        fseek($getid3->fp, (0 - 128 - 9 - 6), SEEK_END);  // end - ID3v1 - LYRICSEND - [Lyrics3size]
  453.36 +        $lyrics3_id3v1 = fread($getid3->fp, 128 + 9 + 6);
  453.37 +        $lyrics3_lsz   = substr($lyrics3_id3v1,  0,   6); // Lyrics3size
  453.38 +        $lyrics3_end   = substr($lyrics3_id3v1,  6,   9); // LYRICSEND or LYRICS200
  453.39 +        $id3v1_tag     = substr($lyrics3_id3v1, 15, 128); // ID3v1
  453.40 +
  453.41 +        // Lyrics3v1, ID3v1, no APE
  453.42 +        if ($lyrics3_end == 'LYRICSEND') {
  453.43 +
  453.44 +            $lyrics3_size    = 5100;
  453.45 +            $lyrics3_offset  = filesize($getid3->filename) - 128 - $lyrics3_size;
  453.46 +            $lyrics3_version = 1;
  453.47 +        } 
  453.48 +
  453.49 +        // Lyrics3v2, ID3v1, no APE
  453.50 +        elseif ($lyrics3_end == 'LYRICS200') {
  453.51 +
  453.52 +            // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
  453.53 +            $lyrics3_size    = $lyrics3_lsz + 6 + strlen('LYRICS200');
  453.54 +            $lyrics3_offset  = filesize($getid3->filename) - 128 - $lyrics3_size;
  453.55 +            $lyrics3_version = 2;
  453.56 +        } 
  453.57 +        
  453.58 +        // Lyrics3v1, no ID3v1, no APE
  453.59 +        elseif (substr(strrev($lyrics3_id3v1), 0, 9) == 'DNESCIRYL') {            // strrev('LYRICSEND') = 'DNESCIRYL'
  453.60 +
  453.61 +            $lyrics3_size    = 5100;
  453.62 +            $lyrics3_offset  = filesize($getid3->filename) - $lyrics3_size;
  453.63 +            $lyrics3_version = 1;
  453.64 +            $lyrics3_offset  = filesize($getid3->filename) - $lyrics3_size;
  453.65 +        } 
  453.66 +    
  453.67 +        // Lyrics3v2, no ID3v1, no APE
  453.68 +        elseif (substr(strrev($lyrics3_id3v1), 0, 9) == '002SCIRYL') {             // strrev('LYRICS200') = '002SCIRYL'
  453.69 +
  453.70 +            $lyrics3_size    = strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 15;   // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'  // 15 = 6 + strlen('LYRICS200')
  453.71 +            $lyrics3_offset  = filesize($getid3->filename) - $lyrics3_size;
  453.72 +            $lyrics3_version = 2;
  453.73 +        } 
  453.74 +    
  453.75 +        elseif (isset($getid3->info['ape']['tag_offset_start']) && ($getid3->info['ape']['tag_offset_start'] > 15)) {
  453.76 +
  453.77 +            fseek($getid3->fp, $getid3->info['ape']['tag_offset_start'] - 15, SEEK_SET);
  453.78 +            $lyrics3_lsz = fread($getid3->fp, 6);
  453.79 +            $lyrics3_end = fread($getid3->fp, 9);
  453.80 +
  453.81 +            
  453.82 +            // Lyrics3v1, APE, maybe ID3v1
  453.83 +            if ($lyrics3_end == 'LYRICSEND') {
  453.84 +
  453.85 +                $lyrics3_size    = 5100;
  453.86 +                $lyrics3_offset  = $getid3->info['ape']['tag_offset_start'] - $lyrics3_size;
  453.87 +                $getid3->info['avdataend'] = $lyrics3_offset;
  453.88 +                $lyrics3_version = 1;
  453.89 +                $getid3->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability');
  453.90 +            } 
  453.91 +        
  453.92 +            
  453.93 +            // Lyrics3v2, APE, maybe ID3v1
  453.94 +            elseif ($lyrics3_end == 'LYRICS200') {
  453.95 +
  453.96 +                $lyrics3_size    = $lyrics3_lsz + 15; // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
  453.97 +                $lyrics3_offset  = $getid3->info['ape']['tag_offset_start'] - $lyrics3_size;
  453.98 +                $lyrics3_version = 2;
  453.99 +                $getid3->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability');
 453.100 +
 453.101 +            }
 453.102 +        }
 453.103 +        
 453.104 +        
 453.105 +        //// GetLyrics3Data()
 453.106 +        
 453.107 +        
 453.108 +        if (isset($lyrics3_offset)) {
 453.109 +            
 453.110 +            $getid3->info['avdataend'] = $lyrics3_offset;
 453.111 +            
 453.112 +            if ($lyrics3_size <= 0) {
 453.113 +                return false;
 453.114 +            }
 453.115 +
 453.116 +            fseek($getid3->fp, $lyrics3_offset, SEEK_SET);
 453.117 +            $raw_data = fread($getid3->fp, $lyrics3_size);
 453.118 +    
 453.119 +            if (substr($raw_data, 0, 11) != 'LYRICSBEGIN') {
 453.120 +                if (strpos($raw_data, 'LYRICSBEGIN') !== false) {
 453.121 +    
 453.122 +                    $getid3->warning('"LYRICSBEGIN" expected at '.$lyrics3_offset.' but actually found at '.($lyrics3_offset + strpos($raw_data, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$lyrics3_version);
 453.123 +                    $getid3->info['avdataend'] = $lyrics3_offset + strpos($raw_data, 'LYRICSBEGIN');
 453.124 +                    $parsed_lyrics3['tag_offset_start'] = $getid3->info['avdataend'];
 453.125 +                    $raw_data = substr($raw_data, strpos($raw_data, 'LYRICSBEGIN'));
 453.126 +                    $lyrics3_size = strlen($raw_data);
 453.127 +                }
 453.128 +                else {
 453.129 +                    throw new getid3_exception('"LYRICSBEGIN" expected at '.$lyrics3_offset.' but found "'.substr($raw_data, 0, 11).'" instead.');
 453.130 +                }
 453.131 +    
 453.132 +            }
 453.133 +    
 453.134 +            $parsed_lyrics3['raw']['lyrics3version'] = $lyrics3_version;
 453.135 +            $parsed_lyrics3['raw']['lyrics3tagsize'] = $lyrics3_size;
 453.136 +            $parsed_lyrics3['tag_offset_start']      = $lyrics3_offset;
 453.137 +            $parsed_lyrics3['tag_offset_end']        = $lyrics3_offset + $lyrics3_size;
 453.138 +    
 453.139 +            switch ($lyrics3_version) {
 453.140 +    
 453.141 +                case 1:
 453.142 +                    if (substr($raw_data, strlen($raw_data) - 9, 9) == 'LYRICSEND') {
 453.143 +                        $parsed_lyrics3['raw']['LYR'] = trim(substr($raw_data, 11, strlen($raw_data) - 11 - 9));
 453.144 +                        getid3_lyrics3::Lyrics3LyricsTimestampParse($parsed_lyrics3);
 453.145 +                    }
 453.146 +                    else {
 453.147 +                        throw new getid3_exception('"LYRICSEND" expected at '.(ftell($getid3->fp) - 11 + $lyrics3_size - 9).' but found "'.substr($raw_data, strlen($raw_data) - 9, 9).'" instead.');
 453.148 +                    }
 453.149 +                    break;
 453.150 +    
 453.151 +                case 2:
 453.152 +                    if (substr($raw_data, strlen($raw_data) - 9, 9) == 'LYRICS200') {
 453.153 +                        $parsed_lyrics3['raw']['unparsed'] = substr($raw_data, 11, strlen($raw_data) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ
 453.154 +                        $raw_data = $parsed_lyrics3['raw']['unparsed'];
 453.155 +                        while (strlen($raw_data) > 0) {
 453.156 +                            $fieldname = substr($raw_data, 0, 3);
 453.157 +                            $fieldsize = (int)substr($raw_data, 3, 5);
 453.158 +                            $parsed_lyrics3['raw'][$fieldname] = substr($raw_data, 8, $fieldsize);
 453.159 +                            $raw_data  = substr($raw_data, 3 + 5 + $fieldsize);
 453.160 +                        }
 453.161 +    
 453.162 +                        if (isset($parsed_lyrics3['raw']['IND'])) {
 453.163 +                            $i = 0;
 453.164 +                            foreach (array ('lyrics', 'timestamps', 'inhibitrandom') as $flagname) {
 453.165 +                                if (strlen($parsed_lyrics3['raw']['IND']) > ++$i) {
 453.166 +                                    $parsed_lyrics3['flags'][$flagname] = getid3_lyrics3::IntString2Bool(substr($parsed_lyrics3['raw']['IND'], $i, 1));
 453.167 +                                }
 453.168 +                            }
 453.169 +                        }
 453.170 +    
 453.171 +                        foreach (array ('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author') as $key => $value) {
 453.172 +                            if (isset($parsed_lyrics3['raw'][$key])) {
 453.173 +                                $parsed_lyrics3['comments'][$value][] = trim($parsed_lyrics3['raw'][$key]);
 453.174 +                            }
 453.175 +                        }
 453.176 +    
 453.177 +                        if (isset($parsed_lyrics3['raw']['IMG'])) {
 453.178 +                            foreach (explode("\r\n", $parsed_lyrics3['raw']['IMG']) as $key => $image_string) {
 453.179 +                                if (strpos($image_string, '||') !== false) {
 453.180 +                                    $imagearray = explode('||', $image_string);
 453.181 +                                    $parsed_lyrics3['images'][$key]['filename']    = @$imagearray[0];
 453.182 +                                    $parsed_lyrics3['images'][$key]['description'] = @$imagearray[1];
 453.183 +                                    $parsed_lyrics3['images'][$key]['timestamp']   = getid3_lyrics3::Lyrics3Timestamp2Seconds(@$imagearray[2]);
 453.184 +                                }
 453.185 +                            }
 453.186 +                        }
 453.187 +                        
 453.188 +                        if (isset($parsed_lyrics3['raw']['LYR'])) {
 453.189 +                            getid3_lyrics3::Lyrics3LyricsTimestampParse($parsed_lyrics3);
 453.190 +                        }
 453.191 +                    }
 453.192 +                      else {
 453.193 +                        throw new getid3_exception('"LYRICS200" expected at '.(ftell($getid3->fp) - 11 + $lyrics3_size - 9).' but found "'.substr($raw_data, strlen($raw_data) - 9, 9).'" instead.');
 453.194 +                    }
 453.195 +                    break;
 453.196 +    
 453.197 +                default:
 453.198 +                    throw new getid3_exception('Cannot process Lyrics3 version '.$lyrics3_version.' (only v1 and v2)');
 453.199 +            }
 453.200 +    
 453.201 +            if (isset($getid3->info['id3v1']['tag_offset_start']) && ($getid3->info['id3v1']['tag_offset_start'] < $parsed_lyrics3['tag_offset_end'])) {
 453.202 +                $getid3->warning('ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data');
 453.203 +                unset($getid3->info['id3v1']);
 453.204 +            }
 453.205 +    
 453.206 +            $getid3->info['lyrics3'] = $parsed_lyrics3;
 453.207 +    
 453.208 +    
 453.209 +            // Check for APE tag after lyrics3
 453.210 +            if (!@$getid3->info['ape'] && $getid3->option_tag_apetag && class_exists('getid3_apetag')) {
 453.211 +                $apetag = new getid3_apetag($getid3);
 453.212 +                $apetag->option_override_end_offset = $getid3->info['lyrics3']['tag_offset_start'];
 453.213 +                $apetag->Analyze();
 453.214 +            }
 453.215 +        }
 453.216 +
 453.217 +        return true;
 453.218 +    }
 453.219 +    
 453.220 +
 453.221 +    
 453.222 +    
 453.223 +    public static function Lyrics3Timestamp2Seconds($rawtimestamp) {
 453.224 +        if (ereg('^\\[([0-9]{2}):([0-9]{2})\\]$', $rawtimestamp, $regs)) {
 453.225 +            return (int)(($regs[1] * 60) + $regs[2]);
 453.226 +        }
 453.227 +        return false;
 453.228 +    }
 453.229 +
 453.230 +    
 453.231 +    
 453.232 +    public static function Lyrics3LyricsTimestampParse(&$lyrics3_data) {
 453.233 +
 453.234 +        $lyrics_array = explode("\r\n", $lyrics3_data['raw']['LYR']);
 453.235 +        foreach ($lyrics_array as $key => $lyric_line) {
 453.236 +            
 453.237 +            while (ereg('^(\\[[0-9]{2}:[0-9]{2}\\])', $lyric_line, $regs)) {
 453.238 +                $this_line_timestamps[] = getid3_lyrics3::Lyrics3Timestamp2Seconds($regs[0]);
 453.239 +                $lyric_line = str_replace($regs[0], '', $lyric_line);
 453.240 +            }
 453.241 +            $no_timestamp_lyrics_array[$key] = $lyric_line;
 453.242 +            if (@is_array($this_line_timestamps)) {
 453.243 +                sort($this_line_timestamps);
 453.244 +                foreach ($this_line_timestamps as $timestampkey => $timestamp) {
 453.245 +                    if (isset($lyrics3_data['synchedlyrics'][$timestamp])) {
 453.246 +                        // timestamps only have a 1-second resolution, it's possible that multiple lines
 453.247 +                        // could have the same timestamp, if so, append
 453.248 +                        $lyrics3_data['synchedlyrics'][$timestamp] .= "\r\n".$lyric_line;
 453.249 +                    } else {
 453.250 +                        $lyrics3_data['synchedlyrics'][$timestamp] = $lyric_line;
 453.251 +                    }
 453.252 +                }
 453.253 +            }
 453.254 +            unset($this_line_timestamps);
 453.255 +            $regs = array ();
 453.256 +        }
 453.257 +        $lyrics3_data['unsynchedlyrics'] = implode("\r\n", $no_timestamp_lyrics_array);
 453.258 +        if (isset($lyrics3_data['synchedlyrics']) && is_array($lyrics3_data['synchedlyrics'])) {
 453.259 +            ksort($lyrics3_data['synchedlyrics']);
 453.260 +        }
 453.261 +        return true;
 453.262 +    }
 453.263 +
 453.264 +
 453.265 +
 453.266 +    public static function IntString2Bool($char) {
 453.267 +        
 453.268 +        return $char == '1' ? true : ($char == '0' ? false : null);
 453.269 +    }
 453.270 +}
 453.271 +
 453.272 +
 453.273 +?>
 453.274 \ No newline at end of file
   454.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   454.2 +++ b/e2gallerypro/e2upload/Backend/FileManager.php	Mon Feb 22 08:02:39 2010 -0500
   454.3 @@ -0,0 +1,391 @@
   454.4 +<?php
   454.5 +/*
   454.6 +Script: FileManager.php
   454.7 +	MooTools FileManager - Backend for the FileManager Script
   454.8 +
   454.9 +License:
  454.10 +	MIT-style license.
  454.11 +
  454.12 +Copyright:
  454.13 +	Copyright (c) 2009 [Christoph Pojer](http://og5.net/christoph).
  454.14 +
  454.15 +Dependencies:
  454.16 +	- Upload.php
  454.17 +	- Image.php
  454.18 +	- getId3 Library
  454.19 +
  454.20 +Options:
  454.21 +	- directory: (string) The base directory to be used for the FileManger
  454.22 +	- assetBasePath: (string) The path to all images and swf files
  454.23 +	- dateFormat: (string, defaults to *j M Y - H:i*) The format in which dates should be displayed
  454.24 +	- upload: (boolean, defaults to *false*) Whether to allow uploads or not
  454.25 +	- destroy: (boolean, defaults to *false*) Whether to allow deletion of files or not
  454.26 +	- maxUploadSize: (integeter, defaults to *3145728* bytes) The maximum file size for upload in bytes
  454.27 +	- safe: (string, defaults to *true*) If true, disallows 
  454.28 +	- filter: (string) If specified, the mimetypes to be allowed (for display and upload).
  454.29 +		Example: image/ allows all Image Mimetypes
  454.30 +*/
  454.31 +
  454.32 +require_once(FileManagerUtility::getPath().'/Upload.php');
  454.33 +require_once(FileManagerUtility::getPath().'/Image.php');
  454.34 +
  454.35 +class FileManager {
  454.36 +	
  454.37 +	private $path = null,
  454.38 +		$length = null,
  454.39 +		$basedir = null,
  454.40 +		$basename = null,
  454.41 +		$options,
  454.42 +		$post,
  454.43 +		$get;
  454.44 +	
  454.45 +	public function __construct($options){
  454.46 +		$this->options = array_merge(array(
  454.47 +			'directory' => '../../Gallery',
  454.48 +			'assetBasePath' => '../Assets',
  454.49 +			'dateFormat' => 'j M Y - H:i',
  454.50 +			'maxUploadSize' => 1024*1024*3,
  454.51 +			'upload' => false,
  454.52 +			'destroy' => false,
  454.53 +			'safe' => true,
  454.54 +			'filter' => null,
  454.55 +		), $options);
  454.56 +		
  454.57 +		$this->basedir = realpath($this->options['directory']);
  454.58 +		$this->basename = pathinfo($this->basedir, PATHINFO_BASENAME).'/';
  454.59 +		$this->path = realpath($this->options['directory'].'/../');
  454.60 +		$this->length = strlen($this->path);
  454.61 +		
  454.62 +		header('Expires: Fri, 01 Jan 1990 00:00:00 GMT');
  454.63 +		header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
  454.64 +		
  454.65 +		$this->get = $_GET;
  454.66 +		$this->post = $_POST;
  454.67 +	}
  454.68 +	
  454.69 +	public function fireEvent($event){
  454.70 +		$event = $event ? 'on'.ucfirst($event) : null;
  454.71 +		if(!$event || !method_exists($this, $event)) $event = 'onView';
  454.72 +		
  454.73 +		$this->{$event}();
  454.74 +	}
  454.75 +	
  454.76 +	protected function onView(){
  454.77 +		$dir = $this->getDir(!empty($this->post['directory']) ? $this->post['directory'] : null);
  454.78 +		$files = ($files = glob($dir.'/*')) ? $files : array();
  454.79 +		
  454.80 +		if($dir!=$this->basedir) array_unshift($files, $dir.'/..');
  454.81 +		natcasesort($files);
  454.82 +		foreach($files as $file){
  454.83 +			$mime = $this->getMimeType($file);
  454.84 +			if($this->options['filter'] && $mime!='text/directory' && !FileManagerUtility::startsWith($mime, $this->options['filter']))
  454.85 +				continue;
  454.86 +			
  454.87 +			$out[is_dir($file) ? 0 : 1][] = array(
  454.88 +				'name' => pathinfo($file, PATHINFO_BASENAME),
  454.89 +				'date' => date($this->options['dateFormat'], filemtime($file)),
  454.90 +				'mime' => $this->getMimeType($file),
  454.91 +				'icon' => $this->getIcon($this->normalize($file)),
  454.92 +				'size' => filesize($file),
  454.93 +			);
  454.94 +		}
  454.95 +		
  454.96 +		echo json_encode(array(
  454.97 +			'path' => $this->getPath($dir),
  454.98 +			'dir' => array(
  454.99 +				'name' => pathinfo($dir, PATHINFO_BASENAME),
 454.100 +				'date' => date($this->options['dateFormat'], filemtime($dir)),
 454.101 +				'mime' => 'text/directory',
 454.102 +				'icon' => 'dir',
 454.103 +			),
 454.104 +			'files' => array_merge(!empty($out[0]) ? $out[0] : array(), !empty($out[1]) ? $out[1] : array()),
 454.105 +		));
 454.106 +	}
 454.107 +	
 454.108 +	protected function onDetail(){
 454.109 +		if(empty($this->post['directory']) || empty($this->post['file'])) return;
 454.110 +		
 454.111 +		$file = realpath($this->path.'/'.$this->post['directory'].'/'.$this->post['file']);
 454.112 +		if(!$this->checkFile($file)) return;
 454.113 +		
 454.114 +		require_once(FileManagerUtility::getPath().'/Assets/getid3/getid3.php');
 454.115 +		
 454.116 +		$url = $this->normalize(substr($file, strlen($this->path)+1));
 454.117 +		$mime = $this->getMimeType($file);
 454.118 +		$content = null;
 454.119 +		if(FileManagerUtility::startsWith($mime, 'image/')){
 454.120 +			$size = getimagesize($file);
 454.121 +			$content = '<img src="'.$url.'" class="preview" alt="" />
 454.122 +				<h2>${more}</h2>
 454.123 +				<dl>
 454.124 +					<dt>${width}</dt><dd>'.$size[0].'px</dd>
 454.125 +					<dt>${height}</dt><dd>'.$size[1].'px</dd>
 454.126 +				</dl>';
 454.127 +		}elseif(FileManagerUtility::startsWith($mime, 'text/') || $mime=='application/x-javascript'){
 454.128 +			$filecontent = file_get_contents($file, null, null, 0, 300);
 454.129 +			if(!FileManagerUtility::isBinary($filecontent)) $content = '<div class="textpreview">'.nl2br(str_replace(array('$', "\t"), array('&#36;', '&nbsp;&nbsp;'), htmlentities($filecontent))).'</div>';
 454.130 +		}elseif($mime=='application/zip'){
 454.131 +			$out = array(array(), array());
 454.132 +			$getid3 = new getID3();
 454.133 +			$getid3->Analyze($file);
 454.134 +			foreach($getid3->info['zip']['files'] as $name => $size){
 454.135 +				$icon = is_array($size) ? 'dir' : $this->getIcon($name);
 454.136 +				$out[$icon=='dir' ? 0 : 1][$name] = '<li><a><img src="'.$this->options['assetBasePath'].'/Icons/'.$icon.'.png" alt="" /> '.$name.'</a></li>';
 454.137 +			}
 454.138 +			natcasesort($out[0]);
 454.139 +			natcasesort($out[1]);
 454.140 +			$content = '<ul>'.implode(array_merge($out[0], $out[1])).'</ul>';
 454.141 +		}elseif(FileManagerUtility::startsWith($mime, 'audio/')){
 454.142 +			$getid3 = new getID3();
 454.143 +			$getid3->Analyze($file);
 454.144 +			
 454.145 +			$content = '<div class="object">
 454.146 +					<object type="application/x-shockwave-flash" data="'.$this->options['assetBasePath'].'/dewplayer.swf?mp3='.rawurlencode($url).'&volume=30" width="200" height="20">
 454.147 +						<param name="movie" value="'.$this->options['assetBasePath'].'/dewplayer.swf?mp3='.rawurlencode($url).'&volume=30" />
 454.148 +					</object>
 454.149 +				</div>
 454.150 +				<h2>${more}</h2>
 454.151 +				<dl>
 454.152 +					<dt>${title}</dt><dd>'.$getid3->info['comments']['title'][0].'</dd>
 454.153 +					<dt>${artist}</dt><dd>'.$getid3->info['comments']['artist'][0].'</dd>
 454.154 +					<dt>${album}</dt><dd>'.$getid3->info['comments']['album'][0].'</dd>
 454.155 +					<dt>${length}</dt><dd>'.$getid3->info['playtime_string'].'</dd>
 454.156 +					<dt>${bitrate}</dt><dd>'.round($getid3->info['bitrate']/1000).'kbps</dd>
 454.157 +				</dl>';
 454.158 +		}
 454.159 +		
 454.160 +		echo json_encode(array(
 454.161 +			'content' => $content ? $content : '<div class="margin">
 454.162 +					${nopreview}<br/><button value="'.$url.'">${download}</button>
 454.163 +				</div>',
 454.164 +		));
 454.165 +	}
 454.166 +	
 454.167 +	protected function onDestroy(){
 454.168 +		if(!$this->options['destroy'] || empty($this->post['directory']) || empty($this->post['file'])) return;
 454.169 +		
 454.170 +		$file = realpath($this->path.'/'.$this->post['directory'].'/'.$this->post['file']);
 454.171 +		if(!$this->checkFile($file)) return;
 454.172 +		
 454.173 +		$this->unlink($file);
 454.174 +		
 454.175 +		echo json_encode(array(
 454.176 +			'content' => 'destroyed',
 454.177 +		));
 454.178 +	}
 454.179 +	
 454.180 +	protected function onCreate(){
 454.181 +		if(empty($this->post['directory']) || empty($this->post['file'])) return;
 454.182 +		
 454.183 +		$file = $this->getName($this->post['file'], $this->getDir($this->post['directory']));
 454.184 +		if(!$file) return;
 454.185 +		
 454.186 +		mkdir($file);
 454.187 +		
 454.188 +		$this->onView();
 454.189 +	}
 454.190 +	
 454.191 +	protected function onUpload(){
 454.192 +		try{
 454.193 +			if(!$this->options['upload'])
 454.194 +				throw new FileManagerException('disabled');
 454.195 +			if(empty($this->get['directory']) || (function_exists('UploadIsAuthenticated') && !UploadIsAuthenticated($this->get)))
 454.196 +				throw new FileManagerException('authenticated');
 454.197 +			
 454.198 +			$dir = $this->getDir($this->get['directory']);
 454.199 +			$name = pathinfo((Upload::exists('Filedata')) ? $this->getName($_FILES['Filedata']['name'], $dir) : null, PATHINFO_FILENAME);
 454.200 +			$file = Upload::move('Filedata', $dir.'/', array(
 454.201 +				'name' => $name,
 454.202 +				'extension' => $this->options['safe'] && $name && in_array(strtolower(pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION)), array('exe', 'dll', 'php', 'php3', 'php4', 'php5', 'phps')) ? 'txt' : null,
 454.203 +				'size' => $this->options['maxUploadSize'],
 454.204 +				'mimes' => $this->getAllowedMimeTypes(),
 454.205 +			));
 454.206 +			
 454.207 +			if(FileManagerUtility::startsWith(Upload::mime($file), 'image/') && !empty($this->get['resize'])){
 454.208 +				$img = new Image($file);
 454.209 +				$size = $img->getSize();
 454.210 +				if($size['width']>800) $img->resize(800)->save();
 454.211 +				elseif($size['height']>600) $img->resize(null, 600)->save();
 454.212 +			}
 454.213 +			
 454.214 +			echo json_encode(array(
 454.215 +				'status' => 1,
 454.216 +				'name' => pathinfo($file, PATHINFO_BASENAME),
 454.217 +			));
 454.218 +		}catch(UploadException $e){
 454.219 +			echo json_encode(array(
 454.220 +				'status' => 0,
 454.221 +				'error' => class_exists('ValidatorException') ? $e->getMessage() : '${upload.'.$e->getMessage().'}', // This is for Styx :)
 454.222 +			));
 454.223 +		}catch(FileManagerException $e){
 454.224 +			echo json_encode(array(
 454.225 +				'status' => 0,
 454.226 +				'error' => '${upload.'.$e->getMessage().'}',
 454.227 +			));
 454.228 +		}
 454.229 +	}
 454.230 +	
 454.231 +	/* This method is used by both move and rename */
 454.232 +	protected function onMove(){
 454.233 +		if(empty($this->post['directory']) || empty($this->post['file'])) return;
 454.234 +		
 454.235 +		$rename = empty($this->post['newDirectory']) && !empty($this->post['name']);
 454.236 +		$dir = $this->getDir($this->post['directory']);
 454.237 +		$file = realpath($dir.'/'.$this->post['file']);
 454.238 +		
 454.239 +		$is_dir = is_dir($file);
 454.240 +		if(!$this->checkFile($file) || (!$rename && $is_dir))
 454.241 +			return;
 454.242 +		
 454.243 +		if($rename || $is_dir){
 454.244 +			if(empty($this->post['name'])) return;
 454.245 +			$newname = $this->getName($this->post['name'], $dir);
 454.246 +			$fn = 'rename';
 454.247 +		}else{
 454.248 +			$newname = $this->getName(pathinfo($file, PATHINFO_FILENAME), $this->getDir($this->post['newDirectory']));
 454.249 +			$fn = !empty($this->post['copy']) ? 'copy' : 'rename';
 454.250 +		}
 454.251 +		
 454.252 +		if(!$newname) return;
 454.253 +		
 454.254 +		$ext = pathinfo($file, PATHINFO_EXTENSION);
 454.255 +		if($ext) $newname .= '.'.$ext;
 454.256 +		$fn($file, $newname);
 454.257 +		
 454.258 +		echo json_encode(array(
 454.259 +			'name' => pathinfo($this->normalize($newname), PATHINFO_BASENAME),
 454.260 +		));
 454.261 +	}
 454.262 +	
 454.263 +	protected function unlink($file){
 454.264 +		$file = realpath($file);
 454.265 +		if($this->basedir==$file || strlen($this->basedir)>=strlen($file))
 454.266 +			return;
 454.267 +		
 454.268 +		if(is_dir($file)){
 454.269 +			$files = glob($file.'/*');
 454.270 +			if(is_array($files))
 454.271 +				foreach($files as $f)
 454.272 +					$this->unlink($f);
 454.273 +				
 454.274 +			rmdir($file);
 454.275 +		}else{
 454.276 +			try{ if($this->checkFile($file)) unlink($file); }catch(Exception $e){}
 454.277 +		}
 454.278 +	}
 454.279 +	
 454.280 +	protected function getName($file, $dir){
 454.281 +		$files = array();
 454.282 +		foreach((array)glob($dir.'/*') as $f)
 454.283 +			$files[] = pathinfo($f, PATHINFO_FILENAME);
 454.284 +		
 454.285 +		$pathinfo = pathinfo($file);
 454.286 +		$file = $dir.'/'.FileManagerUtility::pagetitle($pathinfo['filename'], $files).(!empty($pathinfo['extension']) ? '.'.$pathinfo['extension'] : null);
 454.287 +		
 454.288 +		return !$file || !FileManagerUtility::startsWith($file, $this->basedir) || file_exists($file) ? null : $file;
 454.289 +	}
 454.290 +	
 454.291 +	protected function getIcon($file){
 454.292 +		if(FileManagerUtility::endsWith($file, '/..')) return 'dir_up';
 454.293 +		else if(is_dir($file)) return 'dir';
 454.294 +		
 454.295 +		$ext = pathinfo($file, PATHINFO_EXTENSION);
 454.296 +		return ($ext && file_exists(realpath($this->options['assetBasePath'].'/Icons/'.$ext.'.png'))) ? $ext : 'default';
 454.297 +	}
 454.298 +
 454.299 +	protected function getMimeType($file){
 454.300 +		return is_dir($file) ? 'text/directory' : Upload::mime($file);
 454.301 +	}
 454.302 +	
 454.303 +	protected function getDir($dir){
 454.304 +		$dir = realpath($this->path.'/'.(FileManagerUtility::startsWith($dir, $this->basename) ? $dir : $this->basename));
 454.305 +		return $this->checkFile($dir) ? $dir : $this->basedir;
 454.306 +	}
 454.307 +	
 454.308 +	protected function getPath($file){
 454.309 +		$file = $this->normalize(substr($file, $this->length));
 454.310 +		return substr($file, FileManagerUtility::startsWith($file, '/') ? 1 : 0);
 454.311 +	}
 454.312 +	
 454.313 +	protected function checkFile($file){
 454.314 +		$mimes = $this->getAllowedMimeTypes();
 454.315 +		$hasFilter = $this->options['filter'] && count($mimes);
 454.316 +		if($hasFilter) array_push($mimes, 'text/directory');
 454.317 +		return !(!$file || !FileManagerUtility::startsWith($file, $this->basedir) || !file_exists($file) || ($hasFilter && !in_array($this->getMimeType($file), $mimes)));
 454.318 +	}
 454.319 +	
 454.320 +	protected function normalize($file){
 454.321 +		return preg_replace('/\\\|\/{2,}/', '/', $file);
 454.322 +	}
 454.323 +	
 454.324 +	protected function getAllowedMimeTypes(){
 454.325 +		$filter = $this->options['filter'];
 454.326 +		
 454.327 +		if(!$filter) return null;
 454.328 +		if(!FileManagerUtility::endsWith($filter, '/')) return array($filter);
 454.329 +		
 454.330 +		static $mimes;
 454.331 +		if(!$mimes) $mimes = parse_ini_file(FileManagerUtility::getPath().'/MimeTypes.ini');
 454.332 +		
 454.333 +		foreach($mimes as $mime)
 454.334 +			if(FileManagerUtility::startsWith($mime, $filter))
 454.335 +				$mimeTypes[] = strtolower($mime);
 454.336 +		
 454.337 +		return $mimeTypes;
 454.338 +	}
 454.339 +
 454.340 +}
 454.341 +
 454.342 +class FileManagerException extends Exception {}
 454.343 +
 454.344 +/* Stripped-down version of some Styx PHP Framework-Functionality bundled with this FileBrowser. Styx is located at: http://styx.og5.net */
 454.345 +class FileManagerUtility {
 454.346 +	
 454.347 +	public static function endsWith($string, $look){
 454.348 +		return strrpos($string, $look)===strlen($string)-strlen($look);
 454.349 +	}
 454.350 +	
 454.351 +	public static function startsWith($string, $look){
 454.352 +		return strpos($string, $look)===0;
 454.353 +	}
 454.354 +	
 454.355 +	public static function pagetitle($data, $options = array()){
 454.356 +		static $regex;
 454.357 +		if(!$regex){
 454.358 +			$regex = array(
 454.359 +				explode(' ', 'Æ æ Œ œ ß Ü ü Ö ö Ä ä À à Â Ã Ä Å &#260; &#258; Ç &#262; &#268; &#270; &#272; à È É Ê Ë &#280; &#282; &#286; Ì à Î à &#304; &#321; &#317; &#313; Ñ &#323; &#327; Ò Ó Ô Õ Ö Ø &#336; &#340; &#344; Š &#346; &#350; &#356; &#354; Ù Ú Û Ü &#366; &#368; à Ž &#377; &#379; à á â ã ä å &#261; &#259; ç &#263; &#269; &#271; &#273; è é ê ë &#281; &#283; &#287; ì í î ï &#305; &#322; &#318; &#314; ñ &#324; &#328; ð ò ó ô õ ö ø &#337; &#341; &#345; &#347; š &#351; &#357; &#355; ù ú û ü &#367; &#369; ý ÿ ž &#378; &#380;'),
 454.360 +				explode(' ', 'Ae ae Oe oe ss Ue ue Oe oe Ae ae A A A A A A A A C C C D D D E E E E E E G I I I I I L L L N N N O O O O O O O R R S S S T T U U U U U U Y Z Z Z a a a a a a a a c c c d d e e e e e e g i i i i i l l l n n n o o o o o o o o r r s s s t t u u u u u u y y z z z'),
 454.361 +			);
 454.362 +			
 454.363 +			$regex[0][] = '"';
 454.364 +			$regex[0][] = "'";
 454.365 +		}
 454.366 +		
 454.367 +		$data = trim(substr(preg_replace('/(?:[^A-z0-9]|_|\^)+/i', '_', str_replace($regex[0], $regex[1], $data)), 0, 64), '_');
 454.368 +		return !empty($options) ? self::checkTitle($data, $options) : $data;
 454.369 +	}
 454.370 +	
 454.371 +	protected static function checkTitle($data, $options = array(), $i = 0){
 454.372 +		if(!is_array($options)) return $data;
 454.373 +		
 454.374 +		foreach($options as $content)
 454.375 +			if($content && strtolower($content)==strtolower($data.($i ? '_'.$i : '')))
 454.376 +				return self::checkTitle($data, $options, ++$i);
 454.377 +		
 454.378 +		return $data.($i ? '_'.$i : '');
 454.379 +	}
 454.380 +	
 454.381 +	public static function isBinary($str){
 454.382 +		$array = array(0, 255);
 454.383 +		for($i = 0; $i < strlen($str); $i++)
 454.384 +			if(in_array(ord($str[$i]), $array)) return true;
 454.385 +		
 454.386 +		return false;
 454.387 +	}
 454.388 +	
 454.389 +	public static function getPath(){
 454.390 +		static $path;
 454.391 +		return $path ? $path : $path = pathinfo(__FILE__, PATHINFO_DIRNAME);
 454.392 +	}
 454.393 +	
 454.394 +}
 454.395 \ No newline at end of file
   455.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   455.2 +++ b/e2gallerypro/e2upload/Backend/Image.php	Mon Feb 22 08:02:39 2010 -0500
   455.3 @@ -0,0 +1,290 @@
   455.4 +<?php
   455.5 +/**
   455.6 + * Styx::Image - Provides an Interface to the GD-Library for image manipulation
   455.7 + *
   455.8 + * @package Styx
   455.9 + * @subpackage Utility
  455.10 + *
  455.11 + * @license MIT-style License
  455.12 + * @author Christoph Pojer <christoph.pojer@gmail.com>
  455.13 + *
  455.14 + * @link http://www.bin-co.com/php/scripts/classes/gd_image/ Based on work by "Binny V A"
  455.15 + */
  455.16 +
  455.17 +class Image {
  455.18 +	/**
  455.19 +	 * The path to the image file
  455.20 +	 *
  455.21 +	 * @var string
  455.22 +	 */
  455.23 +	private $file;
  455.24 +	/**
  455.25 +	 * The image resource
  455.26 +	 *
  455.27 +	 * @var resource
  455.28 +	 */
  455.29 +	private $image;
  455.30 +	/**
  455.31 +	 * Metadata regarding the image
  455.32 +	 *
  455.33 +	 * @var array
  455.34 +	 */
  455.35 +	private $meta;
  455.36 +	
  455.37 +	/**
  455.38 +	 * @param string $file The path to the image file
  455.39 +	 */
  455.40 +	public function __construct($file){
  455.41 +		$file = realpath($file);
  455.42 +		if(!file_exists($file))
  455.43 +			return;
  455.44 +		
  455.45 +		$this->file = $file;
  455.46 +		$img = getimagesize($file);
  455.47 +
  455.48 +		$this->meta = array(
  455.49 +			'width' => $img[0],
  455.50 +			'height' => $img[1],
  455.51 +			'mime' => $img['mime'],
  455.52 +			'ext' => end(explode('/', $img['mime'])),
  455.53 +		);
  455.54 +		if($this->meta['ext']=='jpg')
  455.55 +			$this->meta['ext'] = 'jpeg';
  455.56 +		
  455.57 +		if(!in_array($this->meta['ext'], array('gif', 'png', 'jpeg')))
  455.58 +			return;
  455.59 +		
  455.60 +		if(in_array($this->meta['ext'], array('gif', 'png'))){
  455.61 +			$this->image = $this->create();
  455.62 +			
  455.63 +			$fn = 'imagecreatefrom'.$this->meta['ext'];
  455.64 +			$original = $fn($file);
  455.65 +			imagecopyresampled($this->image, $original, 0, 0, 0, 0, $this->meta['width'], $this->meta['height'], $this->meta['width'], $this->meta['height']);
  455.66 +		}else{
  455.67 +			$this->image = imagecreatefromjpeg($file);
  455.68 +		}
  455.69 +	}
  455.70 +	
  455.71 +	public function __destruct(){
  455.72 +		if(!empty($this->image)) imagedestroy($this->image);
  455.73 +	}
  455.74 +	
  455.75 +	/**
  455.76 +	 * Returns the size of the image
  455.77 +	 *
  455.78 +	 * @return array
  455.79 +	 */
  455.80 +	public function getSize(){
  455.81 +		return array(
  455.82 +			'width' => $this->meta['width'],
  455.83 +			'height' => $this->meta['height'],
  455.84 +		);
  455.85 +	}
  455.86 +	
  455.87 +	/**
  455.88 +	 * Creates a new, empty image with the desired size
  455.89 +	 *
  455.90 +	 * @param int $x
  455.91 +	 * @param int $y
  455.92 +	 * @param string $ext
  455.93 +	 * @return resource
  455.94 +	 */
  455.95 +	private function create($x = null, $y = null, $ext = null){
  455.96 +		if(!$x) $x = $this->meta['width'];
  455.97 +		if(!$y) $y = $this->meta['height'];
  455.98 +		
  455.99 +		$image = imagecreatetruecolor($x, $y);
 455.100 +		if(!$ext) $ext = $this->meta['ext'];
 455.101 +		if($ext=='png'){
 455.102 +			imagealphablending($image, false);
 455.103 +			imagefilledrectangle($image, 0, 0, $x, $y, imagecolorallocatealpha($image, 0, 0, 0, 127));
 455.104 +		}
 455.105 +		
 455.106 +		return $image;
 455.107 +	}
 455.108 +	
 455.109 +	/**
 455.110 +	 * Replaces the image resource with the given parameter
 455.111 +	 *
 455.112 +	 * @param resource $new
 455.113 +	 */
 455.114 +	private function set($new){
 455.115 +		imagedestroy($this->image);
 455.116 +		$this->image = $new;
 455.117 +		
 455.118 +		$this->meta['width'] = imagesx($this->image);
 455.119 +		$this->meta['height'] = imagesy($this->image);
 455.120 +	}
 455.121 +	
 455.122 +	/**
 455.123 +	 * Returns the path to the image file
 455.124 +	 *
 455.125 +	 * @return string
 455.126 +	 */
 455.127 +	public function getPathname(){
 455.128 +		return $this->file;
 455.129 +	}
 455.130 +	
 455.131 +	/**
 455.132 +	 * Rotates the image by the given angle
 455.133 +	 *
 455.134 +	 * @param int $angle
 455.135 +	 * @param array $bgcolor An indexed array with red/green/blue/alpha values
 455.136 +	 * @return Image
 455.137 +	 */
 455.138 +	public function rotate($angle, $bgcolor = null){
 455.139 +		if(empty($this->image) || !$angle || $angle>=360) return $this;
 455.140 +		
 455.141 +		$this->set(imagerotate($this->image, $angle, is_array($bgcolor) ? imagecolorallocatealpha($this->image, $bgcolor[0], $bgcolor[1], $bgcolor[2], !empty($bgcolor[3]) ? $bgcolor[3] : null) : $bgcolor));
 455.142 +
 455.143 +		return $this;
 455.144 +	}
 455.145 +	
 455.146 +	/**
 455.147 +	 * Resizes the image to the given size, automatically calculates
 455.148 +	 * the new ratio if parameter {@link $ratio} is set to true
 455.149 +	 *
 455.150 +	 * @param int $x
 455.151 +	 * @param int $y
 455.152 +	 * @param bool $ratio
 455.153 +	 * @return Image
 455.154 +	 */
 455.155 +	public function resize($x = null, $y = null, $ratio = true){
 455.156 +		if(empty($this->image) || (!$x && !$y)) return $this;
 455.157 +		
 455.158 +		if(!$y) $y = $ratio ? $this->meta['height']*$x/$this->meta['width'] : $this->meta['height'];
 455.159 +		if(!$x) $x = $ratio ? $this->meta['width']*$y/$this->meta['height'] : $this->meta['width'];
 455.160 +		
 455.161 +		$new = $this->create($x, $y);
 455.162 +		imagecopyresampled($new, $this->image, 0, 0, 0, 0, $x, $y, $this->meta['width'], $this->meta['height']);
 455.163 +		$this->set($new);
 455.164 +		
 455.165 +		return $this;
 455.166 +	}
 455.167 +	
 455.168 +	/**
 455.169 +	 * Crops the image. The values are given like margin/padding values in css
 455.170 +	 *
 455.171 +	 * <b>Example</b>
 455.172 +	 * <ul>
 455.173 +	 * <li>crop(10) - Crops by 10px on all sides</li>
 455.174 +	 * <li>crop(10, 5) - Crops by 10px on top and bottom and by 5px on left and right sides</li>
 455.175 +	 * <li>crop(10, 5, 5) - Crops by 10px on top and by 5px on left, right and bottom sides</li>
 455.176 +	 * <li>crop(10, 5, 3, 2) - Crops by 10px on top, 5px by right, 3px by bottom and 2px by left sides</li>
 455.177 +	 * </ul>
 455.178 +	 *
 455.179 +	 * @param int $top
 455.180 +	 * @param int $right
 455.181 +	 * @param int $bottom
 455.182 +	 * @param int $left
 455.183 +	 * @return Image
 455.184 +	 */
 455.185 +	public function crop($top, $right = null, $bottom = null, $left = null){
 455.186 +		if(empty($this->image)) return $this;
 455.187 +		
 455.188 +		if(!is_numeric($right) && !is_numeric($bottom) && !is_numeric($left))
 455.189 +			$right = $bottom = $left = $top;
 455.190 +		
 455.191 +		if(!is_numeric($bottom) && !is_numeric($left)){
 455.192 +			$bottom = $top;
 455.193 +			$left = $right;
 455.194 +		}
 455.195 +		
 455.196 +		if(!is_numeric($left))
 455.197 +			$left = $right;
 455.198 +		
 455.199 +		$x = $this->meta['width']-$left-$right;
 455.200 +		$y = $this->meta['height']-$top-$bottom;
 455.201 +
 455.202 +		if($x<0 || $y<0) return $this;
 455.203 +		
 455.204 +		$new = $this->create($x, $y);
 455.205 +		imagecopy($new, $this->image, 0, 0, $left, $top, $x, $y);
 455.206 +		$this->set($new);
 455.207 +		
 455.208 +		return $this;
 455.209 +	}
 455.210 +	
 455.211 +	/**
 455.212 +	 * Flips the image horizontally or vertically. To Flip both just use ->rotate(180)
 455.213 +	 *
 455.214 +	 * @see Image::rotate()
 455.215 +	 * @param string $type Either horizontal or vertical
 455.216 +	 * @return Image
 455.217 +	 */
 455.218 +	public function flip($type){
 455.219 +		if(empty($this->image) || !in_array($type, array('horizontal', 'vertical'))) return $this;
 455.220 +		
 455.221 +		$new = $this->create();
 455.222 +		
 455.223 +		if($type=='horizontal')
 455.224 +			for($x=0;$x<$this->meta['width'];$x++)
 455.225 +				imagecopy($new, $this->image, $this->meta['width']-$x-1, 0, $x, 0, 1, $this->meta['height']);
 455.226 +		elseif($type=='vertical')
 455.227 +			for($y=0;$y<$this->meta['height'];$y++)
 455.228 +				imagecopy($new, $this->image, 0, $this->meta['height']-$y-1, 0, $y, $this->meta['width'], 1);
 455.229 +		
 455.230 +		$this->set($new);
 455.231 +		
 455.232 +		return $this;
 455.233 +	}
 455.234 +	
 455.235 +	/**
 455.236 +	 * Stores the image in the desired directory or outputs it
 455.237 +	 *
 455.238 +	 * @param string $ext
 455.239 +	 * @param string $file
 455.240 +	 */
 455.241 +	private function process($ext = null, $file = null){
 455.242 +		if(!$ext) $ext = $this->meta['ext'];
 455.243 +		
 455.244 +		if($ext=='png') imagesavealpha($this->image, true);
 455.245 +		$fn = 'image'.$ext;
 455.246 +		$fn($this->image, $file);
 455.247 +		
 455.248 +		// If there is a new filename change the internal name too
 455.249 +		if($file) $this->file = $file;
 455.250 +	}
 455.251 +
 455.252 +	/**
 455.253 +	 * Saves the image to the given path
 455.254 +	 *
 455.255 +	 * @param string $file Leave empty to replace the original file
 455.256 +	 * @return Image
 455.257 +	 */
 455.258 +	public function save($file = null){
 455.259 +		if(empty($this->image)) return $this;
 455.260 +		
 455.261 +		if(!$file) $file = $this->file;
 455.262 +		
 455.263 +		$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
 455.264 +		if(!$ext){
 455.265 +			$file .= '.'.$this->meta['ext'];
 455.266 +			$ext = $this->meta['ext'];
 455.267 +		}
 455.268 +		
 455.269 +		if($ext=='jpg') $ext = 'jpeg';
 455.270 +		
 455.271 +		if(!in_array($ext, array('png', 'jpeg', 'gif')))
 455.272 +			return $this;
 455.273 +		
 455.274 +		$this->process($ext, $file);
 455.275 +		
 455.276 +		return $this;
 455.277 +	}
 455.278 +
 455.279 +	/**
 455.280 +	 * Outputs the manipulated image
 455.281 +	 *
 455.282 +	 * @return Image
 455.283 +	 */
 455.284 +	public function show(){
 455.285 +		if(empty($this->image)) return $this;
 455.286 +		
 455.287 +		header('Content-type: '.$this->meta['mime']);
 455.288 +		$this->process();
 455.289 +		
 455.290 +		return $this;
 455.291 +	}
 455.292 +	
 455.293 +}
 455.294 \ No newline at end of file
   456.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   456.2 +++ b/e2gallerypro/e2upload/Backend/MimeTypes.ini	Mon Feb 22 08:02:39 2010 -0500
   456.3 @@ -0,0 +1,202 @@
   456.4 +; Mimetypes configuration file
   456.5 +; The types are sorted by the filetype
   456.6 +
   456.7 +[application]
   456.8 +ai = application/postscript
   456.9 +bcpio = application/x-bcpio
  456.10 +bin = application/octet-stream
  456.11 +ccad = application/clariscad
  456.12 +cdf = application/x-netcdf
  456.13 +class = application/octet-stream
  456.14 +cpio = application/x-cpio
  456.15 +cpt = application/mac-compactpro
  456.16 +csh = application/x-csh
  456.17 +dcr = application/x-director
  456.18 +dir = application/x-director
  456.19 +dms = application/octet-stream
  456.20 +doc = application/msword
  456.21 +drw = application/drafting
  456.22 +dvi = application/x-dvi
  456.23 +dwg = application/acad
  456.24 +dxf = application/dxf
  456.25 +dxr = application/x-director
  456.26 +eps = application/postscript
  456.27 +exe = application/octet-stream
  456.28 +ez = application/andrew-inset
  456.29 +gtar = application/x-gtar
  456.30 +gz = application/x-gzip
  456.31 +hdf = application/x-hdf
  456.32 +hqx = application/mac-binhex40
  456.33 +ips = application/x-ipscript
  456.34 +ipx = application/x-ipix
  456.35 +iso = application/x-isoview;
  456.36 +js = application/x-javascript
  456.37 +latex = application/x-latex
  456.38 +lha = application/octet-stream
  456.39 +lnk = application/x-ms-shortcut
  456.40 +lsp = application/x-lisp
  456.41 +lzh = application/octet-stream
  456.42 +man = application/x-troff-man
  456.43 +me = application/x-troff-me
  456.44 +mif = application/vnd.mif
  456.45 +ms = application/x-troff-ms
  456.46 +nc = application/x-netcdf
  456.47 +oda = application/oda
  456.48 +odt = application/vnd.oasis.opendocument.text
  456.49 +ods = application/vnd.oasis.opendocument.spreadsheet
  456.50 +odp = application/vnd.oasis.opendocument.presentation
  456.51 +odg = application/vnd.oasis.opendocument.graphics
  456.52 +odc = application/vnd.oasis.opendocument.chart
  456.53 +odf = application/vnd.oasis.opendocument.formula
  456.54 +odb = application/vnd.oasis.opendocument.database
  456.55 +odi = application/vnd.oasis.opendocument.image
  456.56 +odm = application/vnd.oasis.opendocument.text-master
  456.57 +ott = application/vnd.oasis.opendocument.text-template
  456.58 +ots = application/vnd.oasis.opendocument.spreadsheet-template
  456.59 +otp = application/vnd.oasis.opendocument.presentation-template
  456.60 +otg = application/vnd.oasis.opendocument.graphics-template
  456.61 +pdf = application/pdf
  456.62 +pgn = application/x-chess-pgn
  456.63 +pot = application/mspowerpoint
  456.64 +pps = application/mspowerpoint
  456.65 +ppt = application/mspowerpoint
  456.66 +ppz = application/mspowerpoint
  456.67 +pre = application/x-freelance
  456.68 +prt = application/pro_eng
  456.69 +ps = application/postscript
  456.70 +rar = application/x-rar
  456.71 +roff = application/x-troff
  456.72 +scm = application/x-lotusscreencam
  456.73 +set = application/set
  456.74 +sh = application/x-sh
  456.75 +shar = application/x-shar
  456.76 +sit = application/x-stuffit
  456.77 +skd = application/x-koan
  456.78 +skm = application/x-koan
  456.79 +skp = application/x-koan
  456.80 +skt = application/x-koan
  456.81 +smi = application/smil
  456.82 +smil = application/smil
  456.83 +sol = application/solids
  456.84 +spl = application/x-futuresplash
  456.85 +src = application/x-wais-source
  456.86 +step = application/STEP
  456.87 +stl = application/SLA
  456.88 +stp = application/STEP
  456.89 +sv4cpio = application/x-sv4cpio
  456.90 +sv4crc = application/x-sv4crc
  456.91 +swf = application/x-shockwave-flash
  456.92 +t = application/x-troff
  456.93 +tar = application/x-tar
  456.94 +tcl = application/x-tcl
  456.95 +tex = application/x-tex
  456.96 +texi = application/x-texinfo
  456.97 +texinfo = application/x-texinfo
  456.98 +tr = application/x-troff
  456.99 +tsp = application/dsptype
 456.100 +unv = application/i-deas
 456.101 +ustar = application/x-ustar
 456.102 +vcd = application/x-cdlink
 456.103 +vda = application/vda
 456.104 +xlc = application/vnd.ms-excel
 456.105 +xll = application/vnd.ms-excel
 456.106 +xlm = application/vnd.ms-excel
 456.107 +xls = application/vnd.ms-excel
 456.108 +xlw = application/vnd.ms-excel
 456.109 +zip = application/zip
 456.110 +
 456.111 +[audio]
 456.112 +aif = audio/x-aiff
 456.113 +aifc = audio/x-aiff
 456.114 +aiff = audio/x-aiff
 456.115 +au = audio/basic
 456.116 +kar = audio/midi
 456.117 +mid = audio/midi
 456.118 +midi = audio/midi
 456.119 +mp2 = audio/mpeg
 456.120 +mp3 = audio/mpeg
 456.121 +mpga = audio/mpeg
 456.122 +ra = audio/x-realaudio
 456.123 +ram = audio/x-pn-realaudio
 456.124 +rm = audio/x-pn-realaudio
 456.125 +rpm = audio/x-pn-realaudio-plugin
 456.126 +snd = audio/basic
 456.127 +tsi = audio/TSP-audio
 456.128 +wav = audio/x-wav
 456.129 +
 456.130 +[text]
 456.131 +as = text/x-actionscript
 456.132 +asc = text/plain
 456.133 +c = text/plain
 456.134 +cc = text/plain
 456.135 +css = text/css
 456.136 +etx = text/x-setext
 456.137 +f = text/plain
 456.138 +f90 = text/plain
 456.139 +h = text/plain
 456.140 +hh = text/plain
 456.141 +htm = text/html
 456.142 +html = text/html
 456.143 +m = text/plain
 456.144 +rtf = text/rtf
 456.145 +rtx = text/richtext
 456.146 +sgm = text/sgml
 456.147 +sgml = text/sgml
 456.148 +tsv = text/tab-separated-values
 456.149 +tpl = text/template
 456.150 +txt = text/plain
 456.151 +xml = text/xml
 456.152 +
 456.153 +[video]
 456.154 +avi = video/x-msvideo
 456.155 +fli = video/x-fli
 456.156 +flv = video/x-flv
 456.157 +mov = video/quicktime
 456.158 +movie = video/x-sgi-movie
 456.159 +mpe = video/mpeg
 456.160 +mpeg = video/mpeg
 456.161 +mpg = video/mpeg
 456.162 +qt = video/quicktime
 456.163 +viv = video/vnd.vivo
 456.164 +vivo = video/vnd.vivo
 456.165 +wmv = video/x-ms-wmv
 456.166 +
 456.167 +[image]
 456.168 +bmp = image/bmp
 456.169 +gif = image/gif
 456.170 +ief = image/ief
 456.171 +jpe = image/jpeg
 456.172 +jpeg = image/jpeg
 456.173 +jpg = image/jpeg
 456.174 +pbm = image/x-portable-bitmap
 456.175 +pgm = image/x-portable-graymap
 456.176 +png = image/png
 456.177 +pnm = image/x-portable-anymap
 456.178 +ppm = image/x-portable-pixmap
 456.179 +psd = image/psd
 456.180 +ras = image/cmu-raster
 456.181 +rgb = image/x-rgb
 456.182 +tif = image/tiff
 456.183 +tiff = image/tiff
 456.184 +xbm = image/x-xbitmap
 456.185 +xpm = image/x-xpixmap
 456.186 +xwd = image/x-xwindowdump
 456.187 +
 456.188 +[x-conference]
 456.189 +ice = x-conference/x-cooltalk
 456.190 +
 456.191 +[model]
 456.192 +iges = model/iges
 456.193 +igs = model/iges
 456.194 +mesh = model/mesh
 456.195 +msh = model/mesh
 456.196 +silo = model/mesh
 456.197 +vrml = model/vrml
 456.198 +wrl = model/vrml
 456.199 +
 456.200 +[www]
 456.201 +mime = www/mime
 456.202 +
 456.203 +[chemical]
 456.204 +pdb = chemical/x-pdb
 456.205 +xyz = chemical/x-pdb
 456.206 \ No newline at end of file
   457.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   457.2 +++ b/e2gallerypro/e2upload/Backend/Upload.php	Mon Feb 22 08:02:39 2010 -0500
   457.3 @@ -0,0 +1,122 @@
   457.4 +<?php
   457.5 +/**
   457.6 + * Styx::Upload - Handles file uploads
   457.7 + *
   457.8 + * @package Styx
   457.9 + * @subpackage Utility
  457.10 + *
  457.11 + * @license MIT-style License
  457.12 + * @author Christoph Pojer <christoph.pojer@gmail.com>
  457.13 + */
  457.14 +
  457.15 +class Upload {
  457.16 +	
  457.17 +	/**
  457.18 +	 * Moves the uploaded file to the specified location. It throws a UploadException
  457.19 +	 * if anything goes wrong except for if the upload does not exist. This can be checked with {@link Upload::exists()}
  457.20 +	 *
  457.21 +	 * @param string $file
  457.22 +	 * @param string $to
  457.23 +	 * @param array $options
  457.24 +	 * @return bool|string Path to moved file or false if the specified upload does not exist
  457.25 +	 */
  457.26 +	public static function move($file, $to, $options = null){
  457.27 +		if(!self::exists($file)) return false;
  457.28 +		
  457.29 +		$options = array_merge(array(
  457.30 +			'name' => null,
  457.31 +			'extension' => null,
  457.32 +			'size' => null,
  457.33 +			'chmod' => 0777,
  457.34 +			'overwrite' => false,
  457.35 +			'mimes' => array(),
  457.36 +		), $options);
  457.37 +		
  457.38 +		$file = $_FILES[$file];
  457.39 +		
  457.40 +		if($options['size'] && $file['size']>$options['size'])
  457.41 +			throw new UploadException('size');
  457.42 +		
  457.43 +		$pathinfo = pathinfo($file['name']);
  457.44 +		if($options['extension']) $pathinfo['extension'] = $options['extension'];
  457.45 +		if(!$pathinfo['extension'])
  457.46 +			throw new UploadException('extension');
  457.47 +		
  457.48 +		if(count($options['mimes'])){
  457.49 +			$mime = self::mime($file['tmp_name'], array(
  457.50 +				'default' => $file['type'],
  457.51 +				'extension' => $pathinfo['extension'],
  457.52 +			));
  457.53 +			
  457.54 +			if(!$mime || !in_array($mime, $options['mimes']))
  457.55 +				throw new UploadException('extension');
  457.56 +		}
  457.57 +		
  457.58 +		$file['ext'] = strtolower($pathinfo['extension']);
  457.59 +		$file['base'] = basename($pathinfo['basename'], '.'.$pathinfo['extension']);
  457.60 +		
  457.61 +		$real = realpath($to);
  457.62 +		if(!$real) throw new UploadException('path');
  457.63 +		if(is_dir($real)) $to = $real.'/'.($options['name'] ? $options['name'] : $file['base']).'.'.$file['ext'];
  457.64 +		
  457.65 +		if(!$options['overwrite'] && file_exists($to))
  457.66 +			throw new UploadException('exists');
  457.67 +		
  457.68 +		if(!move_uploaded_file($file['tmp_name'], $to))
  457.69 +			throw new UploadException(strtolower($_FILES[$file]['error']<=2 ? 'size' : ($_FILES[$file]['error']==3 ? 'partial' : 'nofile')));
  457.70 +		
  457.71 +		chmod($to, $options['chmod']);
  457.72 +		
  457.73 +		return realpath($to);
  457.74 +	}
  457.75 +	
  457.76 +	/**
  457.77 +	 * Returns whether the Upload exists or not
  457.78 +	 *
  457.79 +	 * @param string $file
  457.80 +	 * @return bool
  457.81 +	 */
  457.82 +	public function exists($file){
  457.83 +		return !(empty($_FILES[$file]['name']) || empty($_FILES[$file]['size']));
  457.84 +	}
  457.85 +	
  457.86 +	/**
  457.87 +	 * Returns (if possible) the mimetype of the given file
  457.88 +	 *
  457.89 +	 * @param string $file
  457.90 +	 * @param array $options
  457.91 +	 */
  457.92 +	public function mime($file, $options = array()){
  457.93 +		$file = realpath($file);
  457.94 +		$options = array_merge(array(
  457.95 +			'default' => null,
  457.96 +			'extension' => strtolower(pathinfo($file, PATHINFO_EXTENSION)),
  457.97 +		), $options);
  457.98 +		
  457.99 +		$mime = null;
 457.100 +		if(function_exists('finfo_open') && $f = finfo_open(FILEINFO_MIME, getenv('MAGIC'))){
 457.101 +			$mime = finfo_file($f, $file);
 457.102 +			finfo_close($f);
 457.103 +		}
 457.104 +		
 457.105 +		if(!$mime && in_array($options['extension'], array('gif', 'jpg', 'jpeg', 'png'))){
 457.106 +			$image = getimagesize($file);
 457.107 +			if(!empty($image['mime']))
 457.108 +				$mime = $image['mime'];
 457.109 +		}
 457.110 +		
 457.111 +		if(!$mime && $options['default']) $mime = $options['default'];
 457.112 +		
 457.113 +		if((!$mime || $mime=='application/octet-stream') && $options['extension']){
 457.114 +			static $mimes;
 457.115 +			if(!$mimes) $mimes = parse_ini_file(pathinfo(__FILE__, PATHINFO_DIRNAME).'/MimeTypes.ini');
 457.116 +			
 457.117 +			if(!empty($mimes[$options['extension']])) return $mimes[$options['extension']];
 457.118 +		}
 457.119 +		
 457.120 +		return $mime;
 457.121 +	}
 457.122 +	
 457.123 +}
 457.124 +
 457.125 +class UploadException extends Exception {}
 457.126 \ No newline at end of file
   458.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   458.2 +++ b/e2gallerypro/e2upload/Compressed/filemanager-yui-all.js	Mon Feb 22 08:02:39 2010 -0500
   458.3 @@ -0,0 +1,1 @@
   458.4 +var FileManager=new Class({Implements:[Options,Events],Request:null,Directory:null,Current:null,options:{directory:"",url:null,assetBasePath:null,selectable:false,hideOnClick:false,language:"en"},hooks:{show:{},cleanup:{}},initialize:function(a){this.setOptions(a);this.options.assetBasePath=this.options.assetBasePath.replace(/(\/|\\)*$/,"/");this.droppables=[];this.Directory=this.options.directory;this.language=FileManager.Language[this.options.language]||FileManager.Language.en;this.container=new Element("div",{"class":"filemanager-container filemanager-engine-"+Browser.Engine.name+(Browser.Engine.trident?Browser.Engine.version:"")});this.el=new Element("div",{"class":"filemanager"}).inject(this.container);this.menu=new Element("div",{"class":"filemanager-menu"}).inject(this.el);this.loader=new Element("div",{"class":"loader",opacity:0,tween:{duration:200}}).inject(this.menu);this.browser=new Element("ul",{"class":"filemanager-browser"}).addEvents({click:(function(g){if(g.target.match("ul")){return this.deselect()}if(!g.target||!g.target.getParent("li")){return}var f=g.target.getParent("li").getElement("span");if(!f){return}g.stop();var d=f.retrieve("file");if(f.retrieve("block")){f.eliminate("block");return}else{if(d.mime=="text/directory"){f.addClass("selected");this.load(this.Directory+"/"+d.name);return}}this.fillInfo(d);if(this.Current){this.Current.removeClass("selected")}this.Current=f.addClass("selected");this.switchButton()}).bind(this)}).inject(this.el);if(this.options.selectable){this.addMenuButton("open")}this.addMenuButton("create");this.info=new Element("div",{"class":"filemanager-infos",opacity:0}).inject(this.el);var b=new Element("div",{"class":"filemanager-head"}).adopt([new Element("img",{"class":"filemanager-icon"}),new Element("h1")]);this.info.adopt([b,new Element("h2",{text:this.language.information})]);var c=new Element("dl").adopt([new Element("dt",{text:this.language.modified}),new Element("dd",{"class":"filemanager-modified"}),new Element("dt",{text:this.language.type}),new Element("dd",{"class":"filemanager-type"}),new Element("dt",{text:this.language.size}),new Element("dd",{"class":"filemanager-size"}),new Element("dt",{text:this.language.dir}),new Element("dd",{"class":"filemanager-dir"})]).inject(this.info);this.preview=new Element("div",{"class":"filemanager-preview"});this.info.adopt([new Element("h2",{"class":"filemanager-headline",text:this.language.preview}),this.preview]);this.closeIcon=new Element("div",{"class":"filemanager-close",title:this.language.close,events:{click:this.hide.bind(this)}}).adopt(new Asset.image(this.options.assetBasePath+"destroy.png")).inject(this.el);new FileManager.Tips(this.closeIcon.appearOn(this.closeIcon,[1,0.8]).appearOn(this.el,0.8));this.imageadd=new Asset.image(this.options.assetBasePath+"add.png",{"class":"browser-add"}).set("opacity",0).inject(this.container);this.container.inject(document.body);this.overlay=new Overlay(this.options.hideOnClick?{events:{click:this.hide.bind(this)}}:null);this.bound={keydown:(function(d){if(d.control){this.imageadd.fade(1)}}).bind(this),keyup:(function(){this.imageadd.fade(0)}).bind(this),keyesc:(function(d){if(d.key=="esc"){this.hide()}}).bind(this),scroll:(function(){this.el.center(this.offsets);this.fireEvent("scroll")}).bind(this)}},show:function(a){if(a){a.stop()}this.load(this.Directory);this.overlay.show();this.info.set("opacity",0);(function(){this.container.setStyles({opacity:0,display:"block"});this.el.center(this.offsets);this.fireEvent("show");this.container.set("opacity",1);this.fireHooks("show");window.addEvents({scroll:this.bound.scroll,resize:this.bound.scroll,keyup:this.bound.keyesc})}).delay(500,this)},hide:function(a){if(a){a.stop()}this.overlay.hide();this.browser.empty();this.container.setStyle("display","none");this.fireHooks("cleanup").fireEvent("hide");window.removeEvent("scroll",this.bound.scroll).removeEvent("resize",this.bound.scroll).removeEvent("keyup",this.bound.keyesc)},open:function(a){a.stop();if(!this.Current){return false}this.fireEvent("complete",[this.normalize(this.Directory+"/"+this.Current.retrieve("file").name),this.Current.retrieve("file")]);this.hide()},create:function(b){b.stop();var a=this;new Dialog(this.language.createdir,{language:{confirm:this.language.create,decline:this.language.cancel},content:[new Element("input",{"class":"createDirectory"})],onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onShow:function(){var c=this;this.el.getElement("input").addEvent("keyup",function(d){if(d.key=="enter"){c.el.getElement("button-confirm").fireEvent("click")}}).focus()},onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=create",onSuccess:a.fill.bind(a),data:{file:this.el.getElement("input").get("value"),directory:a.Directory}},a).post()}})},deselect:function(a){if(a&&this.Current!=a){return}if(a){this.fillInfo()}if(this.Current){this.Current.removeClass("selected")}this.Current=null;this.switchButton()},load:function(a,b){this.deselect();if(!b){this.info.fade(0)}if(this.Request){this.Request.cancel()}this.Request=new FileManager.Request({url:this.options.url,onSuccess:(function(c){this.fill(c,b)}).bind(this),data:{directory:a}},this).post()},destroy:function(c,b){c.stop();var a=this;new Dialog(this.language.destroyfile,{language:{confirm:this.language.destroy,decline:this.language.cancel},onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=destroy",data:{file:b.name,directory:a.Directory},onSuccess:function(d){if(!d||d.content!="destroyed"){new Dialog(a.language.nodestroy,{language:{confirm:a.language.ok},buttons:["confirm"]});return}a.fireEvent("modify",[$unlink(b)]);b.element.getParent().fade(0).get("tween").chain(function(){a.deselect(b.element);this.element.destroy()})}},a).post()}})},rename:function(d,c){d.stop();var b=c.name;if(c.mime!="text/directory"){b=b.replace(/\..*$/,"")}var a=this;new Dialog(this.language.renamefile,{language:{confirm:this.language.rename,decline:this.language.cancel},content:[new Element("input",{"class":"rename",value:b})],onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onShow:function(){var e=this;this.el.getElement("input").addEvent("keyup",function(f){if(f.key=="enter"){e.el.getElement("button-confirm").fireEvent("click")}}).focus()},onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=move",onSuccess:(function(e){if(!e||!e.name){return}a.fireEvent("modify",[$unlink(c)]);c.element.getElement("span").set("text",e.name);c.name=e.name;a.fillInfo(c)}).bind(this),data:{file:c.name,name:this.el.getElement("input").get("value"),directory:a.Directory}},a).post()}})},fill:function(c,e){this.Directory=c.path;this.CurrentDir=c.dir;if(!e){this.fillInfo(c.dir)}this.browser.empty();if(!c.files){return}var d=[[],[]];$each(c.files,function(g){g.dir=c.path;var h=g.element=new Element("span",{"class":"fi",href:"#"}).adopt(new Asset.image(this.options.assetBasePath+"Icons/"+g.icon+".png"),new Element("span",{text:g.name})).store("file",g);var f=[];if(g.mime!="text/directory"){f.push(new Asset.image(this.options.assetBasePath+"disk.png",{title:this.language.download}).addClass("browser-icon").addEvent("click",(function(i){i.stop();window.open(this.normalize(this.Directory+"/"+g.name))}).bind(this)).inject(h,"top"))}if(g.name!=".."){["rename","destroy"].each(function(i){f.push(new Asset.image(this.options.assetBasePath+i+".png",{title:this.language[i]}).addClass("browser-icon").addEvent("click",this[i].bindWithEvent(this,[g])).injectTop(h))},this)}d[g.mime=="text/directory"?1:0].push(h);if(g.name==".."){h.set("opacity",0.7)}h.inject(new Element("li").inject(this.browser));f=$$(f.map(function(i){return i.appearOn(i,[1,0.7])})).appearOn(h.getParent("li"),0.7)},this);var b=this;$$(d[0]).makeDraggable({droppables:$$(this.droppables,d[1]),onDrag:function(f,g){b.imageadd.setStyles(Hash.getValues(g.page).map(function(h){return h+15}).associate(["left","top"]))},onBeforeStart:function(f){f.setStyles({left:"0",top:"0"})},onStart:function(f){b.onDragStart(f,this);f.set("opacity",0.7);document.addEvents({keydown:b.bound.keydown,keyup:b.bound.keyup})},onEnter:function(f,g){g.addClass("droppable")},onLeave:function(f,g){g.removeClass("droppable")},onDrop:function(h,j,i){document.removeEvents("keydown",b.bound.keydown).removeEvents("keyup",b.bound.keydown);b.imageadd.fade(0);h.set("opacity",1).store("block",true);if(i.control||!j){h.setStyles({left:"0",top:"0"})}if(!j&&!i.control){return}var f;if(j){j.addClass("selected");(function(){j.removeClass("droppable").removeClass("selected")}).delay(300);if(b.onDragComplete(h,j)){return}f=j.retrieve("file")}var g=h.retrieve("file");new FileManager.Request({url:b.options.url+"?event=move",data:{file:g.name,directory:b.Directory,newDirectory:f?f.dir+"/"+f.name:b.Directory,copy:i.control?1:0},onSuccess:function(){if(!f){b.load(b.Directory)}}},b).post();b.fireEvent("modify",[$unlink(g)]);if(!i.control){h.fade(0).get("tween").chain(function(){b.deselect(h);h.getParent().destroy()})}}});$$(d).setStyles({left:"0",top:"0"});var a=new FileManager.Tips(this.browser.getElements("img.browser-icon"));a.tip.removeClass("tip-base")},fillInfo:function(b,d){if(!b){b=this.CurrentDir}if(!d){d=this.Directory}if(!b){return}var a=this.size(b.size);this.info.fade(1).getElement("img").set({src:this.options.assetBasePath+"Icons/"+b.icon+".png",alt:b.mime});this.fireHooks("cleanup");this.preview.empty();this.info.getElement("h1").set("text",b.name);this.info.getElement("dd.filemanager-modified").set("text",b.date);this.info.getElement("dd.filemanager-type").set("text",b.mime);this.info.getElement("dd.filemanager-size").set("text",!a[0]&&a[1]=="Bytes"?"-":(a.join(" ")+(a[1]!="Bytes"?" ("+b.size+" Bytes)":"")));this.info.getElement("h2.filemanager-headline").setStyle("display",b.mime=="text/directory"?"none":"block");var e=[],c=[];d.split("/").each(function(f){if(!f){return}c.push(f);e.push(new Element("a",{"class":"icon",href:"#",text:f}).addEvent("click",(function(h,g){h.stop();this.load(g)}).bindWithEvent(this,[c.join("/")])));e.push(new Element("span",{text:" / "}))},this);e.pop();e[e.length-1].addClass("selected").removeEvents("click").addEvent("click",function(f){f.stop()});this.info.getElement("dd.filemanager-dir").empty().adopt(new Element("span",{text:"/ "}),e);if(b.mime=="text/directory"){return}if(this.Request){this.Request.cancel()}this.Request=new FileManager.Request({url:this.options.url+"?event=detail",onSuccess:(function(f){var h=this.preview.removeClass("filemanager-loading").set("html",f&&f.content?f.content.substitute(this.language,/\\?\$\{([^{}]+)\}/g):"").getElement("img.prev");if(h){h.addEvent("load",function(){this.setStyle("background","none")})}var g=this.preview.getElements("button");if(g){g.addEvent("click",function(i){i.stop();window.open(this.get("value"))})}}).bind(this),data:{directory:this.Directory,file:b.name}},this).post()},size:function(b){var c=["Bytes","KB","MB","GB","TB"];for(var a=0;b>1024;a++){b=b/1024}return[Math.round(b),c[a]]},normalize:function(a){return a.replace(/\/+/g,"/")},switchButton:function(){var a=!!this.Current;var b=this.menu.getElement("button.filemanager-open");if(b){b.set("disabled",!a)[(a?"remove":"add")+"Class"]("disabled")}},addMenuButton:function(a){var b=new Element("button",{"class":"filemanager-"+a,text:this.language[a]}).inject(this.menu);if(this[a]){b.addEvent("click",this[a].bind(this))}return b},fireHooks:function(c){var a=Array.slice(arguments,1);for(var b in this.hooks[c]){this.hooks[c][b].apply(this,a)}return this},onRequest:function(){this.loader.set("opacity",1)},onComplete:function(){this.loader.fade(0)},onDialogOpen:$empty,onDialogClose:$empty,onDragStart:$empty,onDragComplete:$lambda(false)});FileManager.Language={};if(!window.FileManager){var FileManager={}}FileManager.Tips=new Class({Extends:Tips,options:{offsets:{x:15,y:0},text:null,onShow:function(b,a){if(b.get("opacity")==0.8&&b.getStyle("visibility")=="visible"){return}b.get("tween").pause();b.set({opacity:0,tween:{duration:200,link:"cancel"}}).fade(0.8)},onHide:function(b,a){b.get("tween").pause().start("opacity",0).chain(function(){b.setStyle("left",0)})}},initialize:function(b,a){this.parent(b,a);this.tip.addClass("tip-filebrowser")}});FileManager.Request=new Class({Extends:Request.JSON,initialize:function(a,b){this.parent(a);if(b){this.addEvents({request:b.onRequest.bind(b),complete:b.onComplete.bind(b)})}}});Element.implement({appearOn:function(c,b,a){b=$type(b)=="array"?[b[0]||1,b[1]||0]:[b||1,0];this.set({opacity:b[1],tween:a||{duration:200}});$(c).addEvents({mouseenter:this.fade.bind(this,b[0]),mouseleave:this.fade.bind(this,b[1])});return this},center:function(e){var a=document.getScroll(),g=document.getSize(),c=this.getSize(),b={x:"left",y:"top"};if(!e){e={}}for(var f in b){var d=a[f]+(g[f]-c[f])/2+(e[f]||0);this.setStyle(b[f],d<10?10:d)}return this}});var Dialog=new Class({Implements:[Options,Events],options:{request:null,buttons:["confirm","decline"],language:{}},initialize:function(b,a){this.setOptions(a);this.el=new Element("div",{"class":"dialog dialog-engine-"+Browser.Engine.name+(Browser.Engine.trident?Browser.Engine.version:""),opacity:0,tween:{duration:250}}).adopt([$type(b)=="string"?new Element("div",{text:b}):b]);if(this.options.content){this.el.getElement("div").adopt(this.options.content)}Array.each(this.options.buttons,function(c){new Element("button",{"class":"dialog-"+c,text:this.options.language[c]}).addEvent("click",(function(d){if(d){d.stop()}this.fireEvent(c).fireEvent("close");this.overlay.hide();this.destroy()}).bind(this)).inject(this.el)},this);this.overlay=new Overlay({"class":"overlay overlay-dialog",events:{click:this.fireEvent.bind(this,["close"])},tween:{duration:250}});this.bound={scroll:(function(){if(!this.el){this.destroy()}else{this.el.center()}}).bind(this),keyesc:(function(c){if(c.key=="esc"){this.fireEvent("close").destroy()}}).bind(this)};this.show()},show:function(){this.overlay.show();var a=this.fireEvent("open");this.el.setStyle("display","block").inject(document.body).center().fade(1).get("tween").chain(function(){a.fireEvent("show")});window.addEvents({scroll:this.bound.scroll,resize:this.bound.scroll,keyup:this.bound.keyesc})},destroy:function(){if(this.el){this.el.fade(0).get("tween").chain((function(){this.overlay.destroy();this.el.destroy()}).bind(this))}window.removeEvent("scroll",this.bound.scroll).removeEvent("resize",this.bound.scroll).removeEvent("keyup",this.bound.keyesc)}}),Overlay=new Class({initialize:function(a){this.el=new Element("div",$extend({"class":"overlay"},a)).inject(document.body)},show:function(){this.objects=$$("object, select, embed").filter(function(a){return a.id=="SwiffFileManagerUpload"||a.style.visibility=="hidden"?false:!!(a.style.visibility="hidden")});this.resize=(function(){if(!this.el){this.destroy()}else{this.el.setStyles({width:document.getScrollWidth(),height:document.getScrollHeight()})}}).bind(this);this.resize();this.el.setStyles({opacity:0,display:"block"}).get("tween").pause().start("opacity",0.5);window.addEvent("resize",this.resize);return this},hide:function(){this.el.fade(0).get("tween").chain((function(){this.revertObjects();this.el.setStyle("display","none")}).bind(this));window.removeEvent("resize",this.resize);return this},destroy:function(){this.revertObjects().el.destroy()},revertObjects:function(){if(this.objects&&this.objects.length){this.objects.each(function(a){a.style.visibility="visible"})}return this}});FileManager.TinyMCE=function(a){return function(f,b,d,e){var c=new FileManager($extend({onComplete:function(g){if(!e.document){return}e.document.getElementById(f).value=g;if(e.ImageDialog){e.ImageDialog.showPreviewImage(g,1)}this.container.destroy()}},a(d)));c.el.setStyle("zIndex",400001);c.overlay.el.setStyle("zIndex",400000);c.show()}};FileManager.implement("SwiffZIndex",400002);var Dialog=new Class({Extends:Dialog,initialize:function(b,a){this.parent(b,a);this.el.setStyle("zIndex",400010);this.overlay.el.setStyle("zIndex",400009)}});Fx.ProgressBar=new Class({Extends:Fx,options:{text:null,url:null,transition:Fx.Transitions.Circ.easeOut,fit:true,link:"cancel"},initialize:function(c,b){this.element=$(c);this.parent(b);var a=this.options.url;if(a){this.element.setStyles({"background-image":"url("+a+")","background-repeat":"no-repeat"})}if(this.options.fit){a=a||this.element.getStyle("background-image").replace(/^url\(["']?|["']?\)$/g,"");if(a){var d=new Image();d.onload=function(){this.fill=d.width;d=d.onload=null;this.set(this.now||0)}.bind(this);d.src=a;if(!this.fill&&d.width){d.onload()}}}else{this.set(0)}},start:function(b,a){return this.parent(this.now,(arguments.length==1)?b.limit(0,100):b/a*100)},set:function(c){this.now=c;var a=(this.fill)?(((this.fill/-2)+(c/100)*(this.element.width||1)||0).round()+"px"):((100-c)+"%");this.element.setStyle("backgroundPosition",a+" 0px").title=Math.round(c)+"%";var b=$(this.options.text);if(b){b.set("text",Math.round(c)+"%")}return this}});Swiff.Uploader=new Class({Extends:Swiff,Implements:Events,options:{path:"Swiff.Uploader.swf",target:null,zIndex:9999,height:30,width:100,callBacks:null,params:{wMode:"opaque",menu:"false",allowScriptAccess:"always"},typeFilter:null,multiple:true,queued:true,verbose:false,url:null,method:null,data:null,mergeData:true,fieldName:null,fileSizeMin:1,fileSizeMax:null,allowDuplicates:false,buttonImage:null,fileListMax:0,fileListSizeMax:0,instantStart:false,appendCookieData:false,fileClass:null},initialize:function(b){this.addEvent("load",this.initializeSwiff,true).addEvent("select",this.processFiles,true).addEvent("complete",this.update,true).addEvent("fileRemove",function(d){this.fileList.erase(d)}.bind(this),true);this.setOptions(b);if(this.options.callBacks){Hash.each(this.options.callBacks,function(e,d){this.addEvent(d,e)},this)}this.options.callBacks={fireCallback:this.fireCallback.bind(this)};var c=this.options.path;if(!c.contains("?")){c+="?noCache="+$time()}this.options.container=this.box=new Element("span",{"class":"swiff-uploader-box"}).inject($(this.options.container)||document.body);this.target=$(this.options.target);if(this.target){var a=window.getScroll();this.box.setStyles({position:"absolute",visibility:"visible",zIndex:this.options.zIndex,overflow:"hidden",height:1,width:1,top:a.y,left:a.x});this.parent(c,{params:{wMode:"transparent"},height:"100%",width:"100%"});this.target.addEvent("mouseenter",this.reposition.bind(this,[]));this.addEvents({buttonEnter:this.targetRelay.bind(this,["mouseenter"]),buttonLeave:this.targetRelay.bind(this,["mouseleave"]),buttonDown:this.targetRelay.bind(this,["mousedown"]),buttonDisable:this.targetRelay.bind(this,["disable"])});this.reposition();window.addEvent("resize",this.reposition.bind(this,[]))}else{this.parent(c)}this.inject(this.box);this.fileList=[];this.size=this.uploading=this.bytesLoaded=this.percentLoaded=0;if(Browser.Plugins.Flash.version<9){this.fireEvent("fail",["flash"])}else{this.verifyLoad.delay(500,this)}},verifyLoad:function(){if(this.loaded){return}if(!this.object.parentNode){this.fireEvent("fail",["disabled"])}else{if(this.object.style.display=="none"){this.fireEvent("fail",["hidden"])}else{if(!this.object.offsetWidth){this.fireEvent("fail",["empty"])}}}},fireCallback:function(b,a){if(b.substr(0,4)=="file"){if(a.length>1){this.update(a[1])}var e=a[0];var c=this.findFile(e.id);this.fireEvent(b,c||e,5);if(c){var d=b.replace(/^file([A-Z])/,function(g,f){return f.toLowerCase()});c.update(e).fireEvent(d,[e],10)}}else{this.fireEvent(b,a,5)}},update:function(a){$extend(this,a);this.fireEvent("queue",[this],10);return this},findFile:function(b){for(var a=0;a<this.fileList.length;a++){if(this.fileList[a].id==b){return this.fileList[a]}}return null},initializeSwiff:function(){this.remote("initialize",{width:this.options.width,height:this.options.height,typeFilter:this.options.typeFilter,multiple:this.options.multiple,queued:this.options.queued,url:this.options.url,method:this.options.method,data:this.options.data,mergeData:this.options.mergeData,fieldName:this.options.fieldName,verbose:this.options.verbose,fileSizeMin:this.options.fileSizeMin,fileSizeMax:this.options.fileSizeMax,allowDuplicates:this.options.allowDuplicates,buttonImage:this.options.buttonImage});this.loaded=true;this.appendCookieData()},targetRelay:function(a){if(this.target){this.target.fireEvent(a)}},reposition:function(a){a=a||(this.target&&this.target.offsetHeight)?this.target.getCoordinates(this.box.getOffsetParent()):{top:window.getScrollTop(),left:0,width:40,height:40};this.box.setStyles(a);this.fireEvent("reposition",[a,this.box,this.target])},setOptions:function(a){if(a){if(a.url){a.url=Swiff.Uploader.qualifyPath(a.url)}if(a.buttonImage){a.buttonImage=Swiff.Uploader.qualifyPath(a.buttonImage)}this.parent(a);if(this.loaded){this.remote("setOptions",a)}}return this},setEnabled:function(a){this.remote("setEnabled",a)},start:function(){this.remote("start")},stop:function(){this.remote("stop")},remove:function(){this.remote("remove")},fileStart:function(a){this.remote("fileStart",a.id)},fileStop:function(a){this.remote("fileStop",a.id)},fileRemove:function(a){this.remote("fileRemove",a.id)},fileRequeue:function(a){this.remote("fileRequeue",a.id)},appendCookieData:function(){var a=this.options.appendCookieData;if(!a){return}var c={};document.cookie.split(/;\s*/).each(function(d){d=d.split("=");if(d.length==2){c[decodeURIComponent(d[0])]=decodeURIComponent(d[1])}});var b=this.options.data||{};if($type(a)=="string"){b[a]=c}else{$extend(b,c)}this.setOptions({data:b})},processFiles:function(f,d,a){var c=this.options.fileClass||Swiff.Uploader.File;var b=[],e=[];if(f){f.each(function(h){var g=new c(this,h);if(!g.validate()){g.remove.delay(10,g);b.push(g)}else{this.size+=h.size;this.fileList.push(g);e.push(g);g.render()}},this);this.fireEvent("selectSuccess",[e],10)}if(d||b.length){b.extend((d)?d.map(function(g){return new c(this,g)},this):[]).each(function(g){g.invalidate().render()});this.fireEvent("selectFail",[b],10)}this.update(a);if(this.options.instantStart&&e.length){this.start()}}});$extend(Swiff.Uploader,{STATUS_QUEUED:0,STATUS_RUNNING:1,STATUS_ERROR:2,STATUS_COMPLETE:3,STATUS_STOPPED:4,log:function(){if(window.console&&console.info){console.info.apply(console,arguments)}},unitLabels:{b:[{min:1,unit:"B"},{min:1024,unit:"kB"},{min:1048576,unit:"MB"},{min:1073741824,unit:"GB"}],s:[{min:1,unit:"s"},{min:60,unit:"m"},{min:3600,unit:"h"},{min:86400,unit:"d"}]},formatUnit:function(a,h,b){var f=Swiff.Uploader.unitLabels[(h=="bps")?"b":h];var c=(h=="bps")?"/s":"";var e,d=f.length,j;if(a<1){return"0 "+f[0].unit+c}if(h=="s"){var g=[];for(e=d-1;e>=0;e--){j=Math.floor(a/f[e].min);if(j){g.push(j+" "+f[e].unit);a-=j*f[e].min;if(!a){break}}}return(b===false)?g:g.join(b||", ")}for(e=d-1;e>=0;e--){j=f[e].min;if(a>=j){break}}return(a/j).toFixed(1)+" "+f[e].unit+c}});Swiff.Uploader.qualifyPath=(function(){var a;return function(b){(a||(a=new Element("a"))).href=b;return a.href}})();Swiff.Uploader.File=new Class({Implements:Events,initialize:function(b,a){this.base=b;this.update(a)},update:function(a){return $extend(this,a)},validate:function(){var a=this.base.options;if(a.fileListMax&&this.base.fileList.length>=a.fileListMax){this.validationError="fileListMax";return false}if(a.fileListSizeMax&&(this.base.size+this.size)>a.fileListSizeMax){this.validationError="fileListSizeMax";return false}return true},invalidate:function(){this.invalid=true;this.base.fireEvent("fileInvalid",this,10);return this.fireEvent("invalid",this,10)},render:function(){return this},setOptions:function(a){if(a){if(a.url){a.url=Swiff.Uploader.qualifyPath(a.url)}this.base.remote("fileSetOptions",this.id,a);this.options=$merge(this.options,a)}return this},start:function(){this.base.fileStart(this);return this},stop:function(){this.base.fileStop(this);return this},remove:function(){this.base.fileRemove(this);return this},requeue:function(){this.base.fileRequeue(this)}});FileManager.implement({options:{resizeImages:true,upload:true,uploadAuthData:{}},hooks:{show:{upload:function(){this.startUpload()}},cleanup:{upload:function(){if(!this.options.upload||!this.upload){return}if(this.upload.uploader){this.upload.uploader.set("opacity",0).dispose()}}}},onDialogOpen:function(){if(this.swf&&this.swf.box){this.swf.box.setStyle("visibility","hidden")}},onDialogClose:function(){if(this.swf&&this.swf.box){this.swf.box.setStyle("visibility","visible")}},startUpload:function(){if(!this.options.upload||this.swf){return}var c=this;this.upload={button:this.addMenuButton("upload").addEvents({click:function(){return false},mouseenter:function(){this.addClass("hover")},mouseleave:function(){this.removeClass("hover");this.blur()},mousedown:function(){this.focus()}}),list:new Element("ul",{"class":"filemanager-uploader-list"}),uploader:new Element("div",{opacity:0}).adopt(new Element("h2",{text:this.language.upload}),new Element("div",{"class":"filemanager-uploader"}))};this.upload.uploader.getElement("div").adopt(this.upload.list);this.closeIcon.appearOn(this.upload.button,0.8);if(this.options.resizeImages){var d=new Element("div",{"class":"checkbox"}),b=(function(){this.toggleClass("checkboxChecked")}).bind(d);b();this.upload.label=new Element("label").adopt(d,new Element("span",{text:this.language.resizeImages})).addEvent("click",b).inject(this.menu)}var a=new Class({Extends:Swiff.Uploader.File,initialize:function(f,e){this.parent(f,e);this.setOptions({url:c.options.url+"?"+Hash.toQueryString($merge({},c.options.uploadAuthData,{event:"upload",directory:c.normalize(c.Directory),resize:c.options.resizeImages&&d.hasClass("checkboxChecked")?1:0}))})},render:function(){if(this.invalid){var i=c.language.uploader.unknown,h={name:this.name,size:Swiff.Uploader.formatUnit(this.size,"b")};if(c.language.uploader[this.validationError]){i=c.language.uploader[this.validationError]}if(this.validationError=="sizeLimitMin"){h.size_min=Swiff.Uploader.formatUnit(this.base.options.fileSizeMin,"b")}else{if(this.validationError=="sizeLimitMax"){h.size_max=Swiff.Uploader.formatUnit(this.base.options.fileSizeMax,"b")}}new Dialog(new Element("div",{html:i.substitute(h,/\\?\$\{([^{}]+)\}/g)}),{language:{confirm:c.language.ok},buttons:["confirm"]});return this}this.addEvents({open:this.onOpen,remove:this.onRemove,requeue:this.onRequeue,progress:this.onProgress,stop:this.onStop,complete:this.onComplete});this.ui={};this.ui.icon=new Asset.image(c.options.assetBasePath+"Icons/"+this.extension+".png",{onerror:function(){new Asset.image(c.options.assetBasePath+"Icons/default.png").replaces(this)}});this.ui.element=new Element("li",{"class":"file",id:"file-"+this.id});this.ui.title=new Element("span",{"class":"file-title",text:this.name});this.ui.size=new Element("span",{"class":"file-size",text:Swiff.Uploader.formatUnit(this.size,"b")});var e,g=this;this.ui.cancel=new Asset.image(c.options.assetBasePath+"cancel.png",{"class":"file-cancel",title:c.language.cancel}).addEvent("click",function(){g.remove();e.hide();e.detach(this)});e=new FileManager.Tips(this.ui.cancel);var f=new Element("img",{"class":"file-progress",src:c.options.assetBasePath+"bar.gif"});this.ui.element.adopt(this.ui.cancel,f,this.ui.icon,this.ui.title,this.ui.size).inject(c.upload.list).highlight();this.ui.progress=new Fx.ProgressBar(f).set(0);this.base.reposition();return this.parent()},onOpen:function(){this.ui.element.addClass("file-running")},onRemove:function(){this.ui=this.ui.element.destroy()},onProgress:function(){this.ui.progress.start(this.progress.percentLoaded)},onStop:function(){this.remove()},onComplete:function(){this.ui.progress=this.ui.progress.cancel().element.destroy();this.ui.cancel=this.ui.cancel.destroy();var e=JSON.decode(this.response.text);if(!e.status){new Dialog((""+e.error).substitute(c.language,/\\?\$\{([^{}]+)\}/g),{language:{confirm:c.language.ok},buttons:["confirm"]})}this.ui.element.set("tween",{duration:2000}).highlight(e.status?"#e6efc2":"#f0c2c2");(function(){this.ui.element.setStyle("overflow","hidden").morph({opacity:0,height:0}).get("morph").chain(function(){this.element.destroy();if(!c.upload.list.getElements("li").length){c.upload.uploader.fade(0).get("tween").chain(function(){c.fillInfo()})}})}).delay(5000,this)}});this.swf=new Swiff.Uploader({id:"SwiffFileManagerUpload",path:this.options.assetBasePath+"Swiff.Uploader.swf",queued:false,target:this.upload.button,allowDuplicates:true,instantStart:true,fileClass:a,fileSizeMax:25*1024*1024,onBrowse:function(){},onCancel:function(){},zIndex:this.SwiffZIndex||9999,onSelectSuccess:function(){c.fillInfo();c.info.getElement("h2.filemanager-headline").setStyle("display","none");c.preview.adopt(c.upload.uploader);c.upload.uploader.fade(1)},onComplete:function(){c.load(c.Directory,true)},onFail:function(e){$$(c.upload.button,c.upload.label).dispose();new Dialog(new Element("div",{html:c.language.flash[e]||c.language.flash.flash}),{language:{confirm:c.language.ok},buttons:["confirm"]})}})}});FileManager.Language.en={more:"Details",width:"Width:",height:"Height:",ok:"Ok",open:"Select file",upload:"Upload",create:"Create folder",createdir:"Please specify a folder name:",cancel:"Cancel",information:"Information",type:"Type:",size:"Size:",dir:"Path:",modified:"Last modified:",preview:"Preview",close:"Close",destroy:"Delete",destroyfile:"Are you sure to delete this file?",rename:"Rename",renamefile:"Please enter a new file name:",download:"Download",nopreview:"<i>No preview available</i>",title:"Title:",artist:"Artist:",album:"Album:",length:"Length:",bitrate:"Bitrate:",deselect:"Deselect",nodestroy:"Deleting files has been disabled on this Server.","upload.disabled":"Uploading has been disabled on this Server.","upload.authenticated":"You are not authenticated to upload files.","upload.path":"The specified Upload-Folder does not exist. Please contact the administrator of this Website.","upload.exists":"The specified Upload-Location does already exist. Please contact the administrator of this Website.","upload.mime":"The specified file-type is not allowed.","upload.extension":"The uploaded file has an unknown or forbidden file extension.","upload.size":"The size of the file you uploaded is too big to be processed on this server. Please upload a smaller file.","upload.partial":"The file you uploaded was only partially uploaded, please upload the file again.","upload.nofile":"There was no file specified to be uploaded.","upload.default":"Something went wrong with the File-Upload.",uploader:{unknown:"Unknown Error",sizeLimitMin:'You can not attach "<em>${name}</em>" (${size}), the file size minimum is <strong>${size_min}</strong>!',sizeLimitMax:'You can not attach "<em>${name}</em>" (${size}), the file size limit is <strong>${size_max}</strong>!'},flash:{hidden:"To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).",disabled:"To enable the embedded uploader, enable the blocked Flash movie  and refresh (see Flashblock).",flash:'In order to upload files you need to install <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'},resizeImages:"Resize big images on upload"};
   458.5 \ No newline at end of file
   459.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   459.2 +++ b/e2gallerypro/e2upload/Compressed/filemanager-yui-basic.js	Mon Feb 22 08:02:39 2010 -0500
   459.3 @@ -0,0 +1,1 @@
   459.4 +var FileManager=new Class({Implements:[Options,Events],Request:null,Directory:null,Current:null,options:{directory:"",url:null,assetBasePath:null,selectable:false,hideOnClick:false,language:"en"},hooks:{show:{},cleanup:{}},initialize:function(a){this.setOptions(a);this.options.assetBasePath=this.options.assetBasePath.replace(/(\/|\\)*$/,"/");this.droppables=[];this.Directory=this.options.directory;this.language=FileManager.Language[this.options.language]||FileManager.Language.en;this.container=new Element("div",{"class":"filemanager-container filemanager-engine-"+Browser.Engine.name+(Browser.Engine.trident?Browser.Engine.version:"")});this.el=new Element("div",{"class":"filemanager"}).inject(this.container);this.menu=new Element("div",{"class":"filemanager-menu"}).inject(this.el);this.loader=new Element("div",{"class":"loader",opacity:0,tween:{duration:200}}).inject(this.menu);this.browser=new Element("ul",{"class":"filemanager-browser"}).addEvents({click:(function(g){if(g.target.match("ul")){return this.deselect()}if(!g.target||!g.target.getParent("li")){return}var f=g.target.getParent("li").getElement("span");if(!f){return}g.stop();var d=f.retrieve("file");if(f.retrieve("block")){f.eliminate("block");return}else{if(d.mime=="text/directory"){f.addClass("selected");this.load(this.Directory+"/"+d.name);return}}this.fillInfo(d);if(this.Current){this.Current.removeClass("selected")}this.Current=f.addClass("selected");this.switchButton()}).bind(this)}).inject(this.el);if(this.options.selectable){this.addMenuButton("open")}this.addMenuButton("create");this.info=new Element("div",{"class":"filemanager-infos",opacity:0}).inject(this.el);var b=new Element("div",{"class":"filemanager-head"}).adopt([new Element("img",{"class":"filemanager-icon"}),new Element("h1")]);this.info.adopt([b,new Element("h2",{text:this.language.information})]);var c=new Element("dl").adopt([new Element("dt",{text:this.language.modified}),new Element("dd",{"class":"filemanager-modified"}),new Element("dt",{text:this.language.type}),new Element("dd",{"class":"filemanager-type"}),new Element("dt",{text:this.language.size}),new Element("dd",{"class":"filemanager-size"}),new Element("dt",{text:this.language.dir}),new Element("dd",{"class":"filemanager-dir"})]).inject(this.info);this.preview=new Element("div",{"class":"filemanager-preview"});this.info.adopt([new Element("h2",{"class":"filemanager-headline",text:this.language.preview}),this.preview]);this.closeIcon=new Element("div",{"class":"filemanager-close",title:this.language.close,events:{click:this.hide.bind(this)}}).adopt(new Asset.image(this.options.assetBasePath+"destroy.png")).inject(this.el);new FileManager.Tips(this.closeIcon.appearOn(this.closeIcon,[1,0.8]).appearOn(this.el,0.8));this.imageadd=new Asset.image(this.options.assetBasePath+"add.png",{"class":"browser-add"}).set("opacity",0).inject(this.container);this.container.inject(document.body);this.overlay=new Overlay(this.options.hideOnClick?{events:{click:this.hide.bind(this)}}:null);this.bound={keydown:(function(d){if(d.control){this.imageadd.fade(1)}}).bind(this),keyup:(function(){this.imageadd.fade(0)}).bind(this),keyesc:(function(d){if(d.key=="esc"){this.hide()}}).bind(this),scroll:(function(){this.el.center(this.offsets);this.fireEvent("scroll")}).bind(this)}},show:function(a){if(a){a.stop()}this.load(this.Directory);this.overlay.show();this.info.set("opacity",0);(function(){this.container.setStyles({opacity:0,display:"block"});this.el.center(this.offsets);this.fireEvent("show");this.container.set("opacity",1);this.fireHooks("show");window.addEvents({scroll:this.bound.scroll,resize:this.bound.scroll,keyup:this.bound.keyesc})}).delay(500,this)},hide:function(a){if(a){a.stop()}this.overlay.hide();this.browser.empty();this.container.setStyle("display","none");this.fireHooks("cleanup").fireEvent("hide");window.removeEvent("scroll",this.bound.scroll).removeEvent("resize",this.bound.scroll).removeEvent("keyup",this.bound.keyesc)},open:function(a){a.stop();if(!this.Current){return false}this.fireEvent("complete",[this.normalize(this.Directory+"/"+this.Current.retrieve("file").name),this.Current.retrieve("file")]);this.hide()},create:function(b){b.stop();var a=this;new Dialog(this.language.createdir,{language:{confirm:this.language.create,decline:this.language.cancel},content:[new Element("input",{"class":"createDirectory"})],onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onShow:function(){var c=this;this.el.getElement("input").addEvent("keyup",function(d){if(d.key=="enter"){c.el.getElement("button-confirm").fireEvent("click")}}).focus()},onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=create",onSuccess:a.fill.bind(a),data:{file:this.el.getElement("input").get("value"),directory:a.Directory}},a).post()}})},deselect:function(a){if(a&&this.Current!=a){return}if(a){this.fillInfo()}if(this.Current){this.Current.removeClass("selected")}this.Current=null;this.switchButton()},load:function(a,b){this.deselect();if(!b){this.info.fade(0)}if(this.Request){this.Request.cancel()}this.Request=new FileManager.Request({url:this.options.url,onSuccess:(function(c){this.fill(c,b)}).bind(this),data:{directory:a}},this).post()},destroy:function(c,b){c.stop();var a=this;new Dialog(this.language.destroyfile,{language:{confirm:this.language.destroy,decline:this.language.cancel},onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=destroy",data:{file:b.name,directory:a.Directory},onSuccess:function(d){if(!d||d.content!="destroyed"){new Dialog(a.language.nodestroy,{language:{confirm:a.language.ok},buttons:["confirm"]});return}a.fireEvent("modify",[$unlink(b)]);b.element.getParent().fade(0).get("tween").chain(function(){a.deselect(b.element);this.element.destroy()})}},a).post()}})},rename:function(d,c){d.stop();var b=c.name;if(c.mime!="text/directory"){b=b.replace(/\..*$/,"")}var a=this;new Dialog(this.language.renamefile,{language:{confirm:this.language.rename,decline:this.language.cancel},content:[new Element("input",{"class":"rename",value:b})],onOpen:this.onDialogOpen.bind(this),onClose:this.onDialogClose.bind(this),onShow:function(){var e=this;this.el.getElement("input").addEvent("keyup",function(f){if(f.key=="enter"){e.el.getElement("button-confirm").fireEvent("click")}}).focus()},onConfirm:function(){new FileManager.Request({url:a.options.url+"?event=move",onSuccess:(function(e){if(!e||!e.name){return}a.fireEvent("modify",[$unlink(c)]);c.element.getElement("span").set("text",e.name);c.name=e.name;a.fillInfo(c)}).bind(this),data:{file:c.name,name:this.el.getElement("input").get("value"),directory:a.Directory}},a).post()}})},fill:function(c,e){this.Directory=c.path;this.CurrentDir=c.dir;if(!e){this.fillInfo(c.dir)}this.browser.empty();if(!c.files){return}var d=[[],[]];$each(c.files,function(g){g.dir=c.path;var h=g.element=new Element("span",{"class":"fi",href:"#"}).adopt(new Asset.image(this.options.assetBasePath+"Icons/"+g.icon+".png"),new Element("span",{text:g.name})).store("file",g);var f=[];if(g.mime!="text/directory"){f.push(new Asset.image(this.options.assetBasePath+"disk.png",{title:this.language.download}).addClass("browser-icon").addEvent("click",(function(i){i.stop();window.open(this.normalize(this.Directory+"/"+g.name))}).bind(this)).inject(h,"top"))}if(g.name!=".."){["rename","destroy"].each(function(i){f.push(new Asset.image(this.options.assetBasePath+i+".png",{title:this.language[i]}).addClass("browser-icon").addEvent("click",this[i].bindWithEvent(this,[g])).injectTop(h))},this)}d[g.mime=="text/directory"?1:0].push(h);if(g.name==".."){h.set("opacity",0.7)}h.inject(new Element("li").inject(this.browser));f=$$(f.map(function(i){return i.appearOn(i,[1,0.7])})).appearOn(h.getParent("li"),0.7)},this);var b=this;$$(d[0]).makeDraggable({droppables:$$(this.droppables,d[1]),onDrag:function(f,g){b.imageadd.setStyles(Hash.getValues(g.page).map(function(h){return h+15}).associate(["left","top"]))},onBeforeStart:function(f){f.setStyles({left:"0",top:"0"})},onStart:function(f){b.onDragStart(f,this);f.set("opacity",0.7);document.addEvents({keydown:b.bound.keydown,keyup:b.bound.keyup})},onEnter:function(f,g){g.addClass("droppable")},onLeave:function(f,g){g.removeClass("droppable")},onDrop:function(h,j,i){document.removeEvents("keydown",b.bound.keydown).removeEvents("keyup",b.bound.keydown);b.imageadd.fade(0);h.set("opacity",1).store("block",true);if(i.control||!j){h.setStyles({left:"0",top:"0"})}if(!j&&!i.control){return}var f;if(j){j.addClass("selected");(function(){j.removeClass("droppable").removeClass("selected")}).delay(300);if(b.onDragComplete(h,j)){return}f=j.retrieve("file")}var g=h.retrieve("file");new FileManager.Request({url:b.options.url+"?event=move",data:{file:g.name,directory:b.Directory,newDirectory:f?f.dir+"/"+f.name:b.Directory,copy:i.control?1:0},onSuccess:function(){if(!f){b.load(b.Directory)}}},b).post();b.fireEvent("modify",[$unlink(g)]);if(!i.control){h.fade(0).get("tween").chain(function(){b.deselect(h);h.getParent().destroy()})}}});$$(d).setStyles({left:"0",top:"0"});var a=new FileManager.Tips(this.browser.getElements("img.browser-icon"));a.tip.removeClass("tip-base")},fillInfo:function(b,d){if(!b){b=this.CurrentDir}if(!d){d=this.Directory}if(!b){return}var a=this.size(b.size);this.info.fade(1).getElement("img").set({src:this.options.assetBasePath+"Icons/"+b.icon+".png",alt:b.mime});this.fireHooks("cleanup");this.preview.empty();this.info.getElement("h1").set("text",b.name);this.info.getElement("dd.filemanager-modified").set("text",b.date);this.info.getElement("dd.filemanager-type").set("text",b.mime);this.info.getElement("dd.filemanager-size").set("text",!a[0]&&a[1]=="Bytes"?"-":(a.join(" ")+(a[1]!="Bytes"?" ("+b.size+" Bytes)":"")));this.info.getElement("h2.filemanager-headline").setStyle("display",b.mime=="text/directory"?"none":"block");var e=[],c=[];d.split("/").each(function(f){if(!f){return}c.push(f);e.push(new Element("a",{"class":"icon",href:"#",text:f}).addEvent("click",(function(h,g){h.stop();this.load(g)}).bindWithEvent(this,[c.join("/")])));e.push(new Element("span",{text:" / "}))},this);e.pop();e[e.length-1].addClass("selected").removeEvents("click").addEvent("click",function(f){f.stop()});this.info.getElement("dd.filemanager-dir").empty().adopt(new Element("span",{text:"/ "}),e);if(b.mime=="text/directory"){return}if(this.Request){this.Request.cancel()}this.Request=new FileManager.Request({url:this.options.url+"?event=detail",onSuccess:(function(f){var h=this.preview.removeClass("filemanager-loading").set("html",f&&f.content?f.content.substitute(this.language,/\\?\$\{([^{}]+)\}/g):"").getElement("img.prev");if(h){h.addEvent("load",function(){this.setStyle("background","none")})}var g=this.preview.getElements("button");if(g){g.addEvent("click",function(i){i.stop();window.open(this.get("value"))})}}).bind(this),data:{directory:this.Directory,file:b.name}},this).post()},size:function(b){var c=["Bytes","KB","MB","GB","TB"];for(var a=0;b>1024;a++){b=b/1024}return[Math.round(b),c[a]]},normalize:function(a){return a.replace(/\/+/g,"/")},switchButton:function(){var a=!!this.Current;var b=this.menu.getElement("button.filemanager-open");if(b){b.set("disabled",!a)[(a?"remove":"add")+"Class"]("disabled")}},addMenuButton:function(a){var b=new Element("button",{"class":"filemanager-"+a,text:this.language[a]}).inject(this.menu);if(this[a]){b.addEvent("click",this[a].bind(this))}return b},fireHooks:function(c){var a=Array.slice(arguments,1);for(var b in this.hooks[c]){this.hooks[c][b].apply(this,a)}return this},onRequest:function(){this.loader.set("opacity",1)},onComplete:function(){this.loader.fade(0)},onDialogOpen:$empty,onDialogClose:$empty,onDragStart:$empty,onDragComplete:$lambda(false)});FileManager.Language={};if(!window.FileManager){var FileManager={}}FileManager.Tips=new Class({Extends:Tips,options:{offsets:{x:15,y:0},text:null,onShow:function(b,a){if(b.get("opacity")==0.8&&b.getStyle("visibility")=="visible"){return}b.get("tween").pause();b.set({opacity:0,tween:{duration:200,link:"cancel"}}).fade(0.8)},onHide:function(b,a){b.get("tween").pause().start("opacity",0).chain(function(){b.setStyle("left",0)})}},initialize:function(b,a){this.parent(b,a);this.tip.addClass("tip-filebrowser")}});FileManager.Request=new Class({Extends:Request.JSON,initialize:function(a,b){this.parent(a);if(b){this.addEvents({request:b.onRequest.bind(b),complete:b.onComplete.bind(b)})}}});Element.implement({appearOn:function(c,b,a){b=$type(b)=="array"?[b[0]||1,b[1]||0]:[b||1,0];this.set({opacity:b[1],tween:a||{duration:200}});$(c).addEvents({mouseenter:this.fade.bind(this,b[0]),mouseleave:this.fade.bind(this,b[1])});return this},center:function(e){var a=document.getScroll(),g=document.getSize(),c=this.getSize(),b={x:"left",y:"top"};if(!e){e={}}for(var f in b){var d=a[f]+(g[f]-c[f])/2+(e[f]||0);this.setStyle(b[f],d<10?10:d)}return this}});var Dialog=new Class({Implements:[Options,Events],options:{request:null,buttons:["confirm","decline"],language:{}},initialize:function(b,a){this.setOptions(a);this.el=new Element("div",{"class":"dialog dialog-engine-"+Browser.Engine.name+(Browser.Engine.trident?Browser.Engine.version:""),opacity:0,tween:{duration:250}}).adopt([$type(b)=="string"?new Element("div",{text:b}):b]);if(this.options.content){this.el.getElement("div").adopt(this.options.content)}Array.each(this.options.buttons,function(c){new Element("button",{"class":"dialog-"+c,text:this.options.language[c]}).addEvent("click",(function(d){if(d){d.stop()}this.fireEvent(c).fireEvent("close");this.overlay.hide();this.destroy()}).bind(this)).inject(this.el)},this);this.overlay=new Overlay({"class":"overlay overlay-dialog",events:{click:this.fireEvent.bind(this,["close"])},tween:{duration:250}});this.bound={scroll:(function(){if(!this.el){this.destroy()}else{this.el.center()}}).bind(this),keyesc:(function(c){if(c.key=="esc"){this.fireEvent("close").destroy()}}).bind(this)};this.show()},show:function(){this.overlay.show();var a=this.fireEvent("open");this.el.setStyle("display","block").inject(document.body).center().fade(1).get("tween").chain(function(){a.fireEvent("show")});window.addEvents({scroll:this.bound.scroll,resize:this.bound.scroll,keyup:this.bound.keyesc})},destroy:function(){if(this.el){this.el.fade(0).get("tween").chain((function(){this.overlay.destroy();this.el.destroy()}).bind(this))}window.removeEvent("scroll",this.bound.scroll).removeEvent("resize",this.bound.scroll).removeEvent("keyup",this.bound.keyesc)}}),Overlay=new Class({initialize:function(a){this.el=new Element("div",$extend({"class":"overlay"},a)).inject(document.body)},show:function(){this.objects=$$("object, select, embed").filter(function(a){return a.id=="SwiffFileManagerUpload"||a.style.visibility=="hidden"?false:!!(a.style.visibility="hidden")});this.resize=(function(){if(!this.el){this.destroy()}else{this.el.setStyles({width:document.getScrollWidth(),height:document.getScrollHeight()})}}).bind(this);this.resize();this.el.setStyles({opacity:0,display:"block"}).get("tween").pause().start("opacity",0.5);window.addEvent("resize",this.resize);return this},hide:function(){this.el.fade(0).get("tween").chain((function(){this.revertObjects();this.el.setStyle("display","none")}).bind(this));window.removeEvent("resize",this.resize);return this},destroy:function(){this.revertObjects().el.destroy()},revertObjects:function(){if(this.objects&&this.objects.length){this.objects.each(function(a){a.style.visibility="visible"})}return this}});FileManager.TinyMCE=function(a){return function(f,b,d,e){var c=new FileManager($extend({onComplete:function(g){if(!e.document){return}e.document.getElementById(f).value=g;if(e.ImageDialog){e.ImageDialog.showPreviewImage(g,1)}this.container.destroy()}},a(d)));c.el.setStyle("zIndex",400001);c.overlay.el.setStyle("zIndex",400000);c.show()}};FileManager.implement("SwiffZIndex",400002);var Dialog=new Class({Extends:Dialog,initialize:function(b,a){this.parent(b,a);this.el.setStyle("zIndex",400010);this.overlay.el.setStyle("zIndex",400009)}});FileManager.Language.en={more:"Details",width:"Width:",height:"Height:",ok:"Ok",open:"Select file",upload:"Upload",create:"Create folder",createdir:"Please specify a folder name:",cancel:"Cancel",information:"Information",type:"Type:",size:"Size:",dir:"Path:",modified:"Last modified:",preview:"Preview",close:"Close",destroy:"Delete",destroyfile:"Are you sure to delete this file?",rename:"Rename",renamefile:"Please enter a new file name:",download:"Download",nopreview:"<i>No preview available</i>",title:"Title:",artist:"Artist:",album:"Album:",length:"Length:",bitrate:"Bitrate:",deselect:"Deselect",nodestroy:"Deleting files has been disabled on this Server.","upload.disabled":"Uploading has been disabled on this Server.","upload.authenticated":"You are not authenticated to upload files.","upload.path":"The specified Upload-Folder does not exist. Please contact the administrator of this Website.","upload.exists":"The specified Upload-Location does already exist. Please contact the administrator of this Website.","upload.mime":"The specified file-type is not allowed.","upload.extension":"The uploaded file has an unknown or forbidden file extension.","upload.size":"The size of the file you uploaded is too big to be processed on this server. Please upload a smaller file.","upload.partial":"The file you uploaded was only partially uploaded, please upload the file again.","upload.nofile":"There was no file specified to be uploaded.","upload.default":"Something went wrong with the File-Upload.",uploader:{unknown:"Unknown Error",sizeLimitMin:'You can not attach "<em>${name}</em>" (${size}), the file size minimum is <strong>${size_min}</strong>!',sizeLimitMax:'You can not attach "<em>${name}</em>" (${size}), the file size limit is <strong>${size_max}</strong>!'},flash:{hidden:"To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).",disabled:"To enable the embedded uploader, enable the blocked Flash movie  and refresh (see Flashblock).",flash:'In order to upload files you need to install <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'},resizeImages:"Resize big images on upload"};
   459.5 \ No newline at end of file
   460.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   460.2 +++ b/e2gallerypro/e2upload/Css/Additions.css	Mon Feb 22 08:02:39 2010 -0500
   460.3 @@ -0,0 +1,116 @@
   460.4 +/* TIPS */
   460.5 +.tip-filebrowser {
   460.6 +	z-index: 1201;
   460.7 +}
   460.8 +.tip-filebrowser .tip {
   460.9 +	background: #000;
  460.10 +	-moz-border-radius: 5px;
  460.11 +	-webkit-border-radius: 5px;
  460.12 +	border-radius: 5px;
  460.13 +}
  460.14 + 
  460.15 +.tip-filebrowser .tip-title {
  460.16 +	color: #fff;
  460.17 +	font-size: 11px;
  460.18 +	padding: 1px 4px;
  460.19 +	line-height: 21px;
  460.20 +	text-align: center;
  460.21 +	font-weight: bold;
  460.22 +}
  460.23 + 
  460.24 +.tip-filebrowser .tip-text {
  460.25 +	display: none;
  460.26 +}
  460.27 +
  460.28 +/* Overlay */
  460.29 +div.overlay {
  460.30 +	position: absolute;
  460.31 +	left: 0;
  460.32 +	top: 0;
  460.33 +	display: none;
  460.34 +	
  460.35 +	z-index: 999;
  460.36 +	background: #000;
  460.37 +}
  460.38 +
  460.39 +/* Dialog */
  460.40 +div.overlay-dialog {
  460.41 +	z-index: 1999;
  460.42 +	background: #fff;
  460.43 +}
  460.44 +
  460.45 +div.dialog-engine-trident4 { width: 249px; }
  460.46 +
  460.47 +div.dialog {
  460.48 +	position: absolute;
  460.49 +	display: none;
  460.50 +	z-index: 2000;
  460.51 +	
  460.52 +	width: 229px;
  460.53 +	height: 121px;
  460.54 +	
  460.55 +	color: #bebebe;
  460.56 +	font-family: Tahoma, sans-serif;
  460.57 +	font-size: 12px;
  460.58 +	background: url(../Assets/dialog.png) no-repeat;
  460.59 +}
  460.60 +div.dialog a {
  460.61 +	color: #aaa;
  460.62 +}
  460.63 +div.dialog a:hover {
  460.64 +	text-decoration: none;
  460.65 +}
  460.66 +
  460.67 +div.dialog div {
  460.68 +	margin: 10px;
  460.69 +}
  460.70 +
  460.71 +div.dialog input, div.dialog select {
  460.72 +	width: 94%;
  460.73 +	margin: 20px 2%;
  460.74 +	padding: 2px 1%;
  460.75 +	border: 1px solid #bebebe;
  460.76 +	background: #fff;
  460.77 +	
  460.78 +	color: #333;
  460.79 +	font-family: Tahoma, sans-serif;
  460.80 +	font-size: 12px;
  460.81 +}
  460.82 +
  460.83 +div.dialog-engine-trident4 input, div.dialog-engine-trident5 input {
  460.84 +	width: 80%;
  460.85 +}
  460.86 +
  460.87 +div.dialog button {
  460.88 +	position: absolute;
  460.89 +	bottom: 15px;
  460.90 +	right: 15px;
  460.91 +	
  460.92 +	width: auto;
  460.93 +	height: 22px;
  460.94 +	padding: 2px;
  460.95 +	border: 1px solid #bebebe;
  460.96 +	
  460.97 +	cursor: pointer;
  460.98 +	color: #333;
  460.99 +	text-shadow: #eee 1px 1px 1px;
 460.100 +	
 460.101 +	font-family: Tahoma, sans-serif;
 460.102 +	letter-spacing: 0;
 460.103 +	font-size: 12px;
 460.104 +	font-weight: normal;
 460.105 +	margin: 0;
 460.106 +	background: url(../Assets/button.png) repeat-x;
 460.107 +	-moz-border-radius: 4px;
 460.108 +	-webkit-border-radius: 4px;
 460.109 +	border-radius: 4px;
 460.110 +}
 460.111 +div.dialog-engine-trident4 button, div.dialog-engine-trident5 button {
 460.112 +	padding: 0 .25em;
 460.113 +	overflow: visible;
 460.114 +}
 460.115 +
 460.116 +div.dialog button.dialog-decline {
 460.117 +	right: auto;
 460.118 +	left: 15px;
 460.119 +}
 460.120 \ No newline at end of file
   461.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   461.2 +++ b/e2gallerypro/e2upload/Css/FileManager.css	Mon Feb 22 08:02:39 2010 -0500
   461.3 @@ -0,0 +1,388 @@
   461.4 +div.filemanager-container { display: none; }
   461.5 +div.filemanager * { outline: 0; }
   461.6 +div.filemanager a img { border: 0 }
   461.7 +
   461.8 +div.filemanager, div.filemanager button, div.filemanager label, div.filemanager h1 {
   461.9 +	width: auto;
  461.10 +	margin: 0;
  461.11 +	
  461.12 +	font-family: Tahoma, sans-serif;
  461.13 +	font-size: 12px;
  461.14 +	font-weight: normal;
  461.15 +	text-transform: none;
  461.16 +	letter-spacing: 0;
  461.17 +}
  461.18 +
  461.19 +div.filemanager {
  461.20 +	border: 1px solid #bebebe;
  461.21 +	background: #eee;
  461.22 +	
  461.23 +	position: absolute;
  461.24 +	z-index: 1001;
  461.25 +	width: 800px;
  461.26 +	height: 450px;
  461.27 +}
  461.28 +
  461.29 +div.filemanager div.filemanager-menu {
  461.30 +	position: absolute;
  461.31 +	height: 30px;
  461.32 +	left: 30%;
  461.33 +	width: 70%;
  461.34 +	bottom: 0;
  461.35 +	line-height: 30px;
  461.36 +	
  461.37 +	border-top: 1px solid #bebebe;
  461.38 +	background: url(../Assets/menu.png) repeat-x;
  461.39 +}
  461.40 +
  461.41 +div.filemanager button {
  461.42 +	cursor: pointer;
  461.43 +	height: 22px;
  461.44 +	line-height: 20px;
  461.45 +	margin: 4px 5px;
  461.46 +	padding: 0 5px;
  461.47 +	
  461.48 +	color: #FFF;
  461.49 +	
  461.50 +	clear: none;
  461.51 +	background: url(../Assets/button.png) repeat-x;
  461.52 +	border: 1px solid #a1aeb9;
  461.53 +	-moz-border-radius: 4px;
  461.54 +	-webkit-border-radius: 4px;
  461.55 +	border-radius: 4px;
  461.56 +}
  461.57 +div.filemanager-engine-trident4 button, div.filemanager-engine-trident5 button {
  461.58 +	padding: 0 .25em;
  461.59 +	overflow: visible;
  461.60 +}
  461.61 +
  461.62 +div.filemanager-menu button {
  461.63 +	float: right;
  461.64 +}
  461.65 +
  461.66 +div.filemanager button:hover, div.filemanager button.hover, div.filemanager button:focus {
  461.67 +	border: 1px solid #5f676e;
  461.68 +}
  461.69 +
  461.70 +div.filemanager button.disabled, div.filemanager button.disabled:hover, div.filemanager button.disabled:focus {
  461.71 +	cursor: default;
  461.72 +	color: #666;
  461.73 +	text-shadow: none;
  461.74 +	background: url(../Assets/button_disabled.png) repeat-x;
  461.75 +	border-color: #bababa;
  461.76 +}
  461.77 +
  461.78 +div.filemanager button.filemanager-open {
  461.79 +	font-weight: bold;
  461.80 +}
  461.81 +
  461.82 +div.filemanager-menu label {
  461.83 +	cursor: pointer;
  461.84 +	float: right;
  461.85 +	font-size: 11px;
  461.86 +	width: auto;
  461.87 +}
  461.88 +
  461.89 +div.filemanager-menu div.loader {
  461.90 +	float: left;
  461.91 +	width: 16px;
  461.92 +	height: 16px;
  461.93 +	margin: 8px 0;
  461.94 +	background: url(../Assets/loader.gif) no-repeat;
  461.95 +}
  461.96 +
  461.97 +div.filemanager ul {
  461.98 +	margin: 0;
  461.99 +	padding: 0;
 461.100 +	position: relative;
 461.101 +	line-height: 1.8em;
 461.102 +	overflow: auto;
 461.103 +	overflow-x: hidden;
 461.104 +	zoom: 1;
 461.105 +}
 461.106 +
 461.107 +div.filemanager ul li {
 461.108 +	background: none;
 461.109 +	list-style-image: none;
 461.110 +	list-style-type: none;
 461.111 +	list-style: none;
 461.112 +	line-height: 1.8em;
 461.113 +	margin: 0;
 461.114 +	padding: 0;
 461.115 +	height: 21px;
 461.116 +	white-space: nowrap;
 461.117 +}
 461.118 +
 461.119 +div.filemanager ul.filemanager-browser {
 461.120 +	left: 0px;
 461.121 +	top: 0px;
 461.122 +	height: 100%;
 461.123 +	width: 30%;
 461.124 +	
 461.125 +	border: 0;
 461.126 +	border-right: 1px solid #bebebe;
 461.127 +	background: url(../Assets/filelist.png) repeat-x #c1c7cf;
 461.128 +}
 461.129 +
 461.130 +div.filemanager ul li span.fi {
 461.131 +	height: 21px;
 461.132 +	padding-left: 5px;
 461.133 +	color: #000;
 461.134 +	text-decoration: none;
 461.135 +	display: block;
 461.136 +	white-space: nowrap;
 461.137 +	cursor: pointer;
 461.138 +}
 461.139 +
 461.140 +div.filemanager ul li span.fi span {
 461.141 +	white-space: nowrap;
 461.142 +	display: block;
 461.143 +	width: 90%;
 461.144 +	overflow: hidden;
 461.145 +}
 461.146 +
 461.147 +div.filemanager-engine-trident4 ul li span.fi span, div.filemanager-engine-trident5 ul li span.fi span, div.filemanager-engine-presto ul li span.fi span, div.filemanager ul li:hover span.fi span {
 461.148 +	width: 65%;
 461.149 +	overflow: hidden;
 461.150 +}
 461.151 +
 461.152 +div.filemanager ul li span.dir {
 461.153 +	background-color: transparent;
 461.154 +}
 461.155 +
 461.156 +div.filemanager ul li span.droppable {
 461.157 +	background-color: #99b7e7;
 461.158 +}
 461.159 +
 461.160 +ul.filemanager-browser a, ul.filemanager-browser span {
 461.161 +	position: relative;
 461.162 +}
 461.163 +
 461.164 +div.filemanager ul li a.selected, div.filemanager ul li span.selected {
 461.165 +	background: url(../Assets/filelist_selected.png) repeat-x;
 461.166 +	color: #eee;
 461.167 +	outline: none;
 461.168 +}
 461.169 +
 461.170 +div.filemanager ul li img {
 461.171 +	display: block;
 461.172 +	float: left;
 461.173 +	margin: 3px 3px 0 0;
 461.174 +}
 461.175 +
 461.176 +div.filemanager ul li img.browser-icon {
 461.177 +	float: right;
 461.178 +}
 461.179 +
 461.180 +div.filemanager span.notice {
 461.181 +	position: absolute;
 461.182 +	bottom: 16px;
 461.183 +	left: 16px;
 461.184 +}
 461.185 +
 461.186 +div.filemanager div.filemanager-close {
 461.187 +	position: absolute;
 461.188 +	right: -10px;
 461.189 +	top: -10px;
 461.190 +	height: 20px;
 461.191 +	width: 20px;
 461.192 +	
 461.193 +	cursor: pointer;
 461.194 +	background: url(../Assets/button.png) repeat-x;
 461.195 +	border: 1px solid #a1aeb9;
 461.196 +	-moz-border-radius: 10px;
 461.197 +	-webkit-border-radius: 10px;
 461.198 +	border-radius: 10px;
 461.199 +}
 461.200 +div.filemanager div.filemanager-close img {
 461.201 +	padding: 2px;
 461.202 +}
 461.203 +
 461.204 +div.filemanager-infos {
 461.205 +	position: absolute;
 461.206 +	left: 30%;
 461.207 +	top: 0;
 461.208 +	width: 70%;
 461.209 +	line-height: 1.6em;
 461.210 +	overflow: auto;
 461.211 +}
 461.212 +
 461.213 +div.filemanager-head {
 461.214 +	height: 32px;
 461.215 +	overflow: hidden;
 461.216 +}
 461.217 +
 461.218 +img.filemanager-icon {
 461.219 +	float: left;
 461.220 +	margin: 10px 12px;
 461.221 +}
 461.222 +
 461.223 +div.filemanager h1 {
 461.224 +	margin: 0;
 461.225 +	padding: 0;
 461.226 +	width: 80%;
 461.227 +	height: 32px;
 461.228 +	line-height: 32px;
 461.229 +	
 461.230 +	color: #333;
 461.231 +	font-size: 20px;
 461.232 +	letter-spacing: 1px;
 461.233 +	overflow: hidden;
 461.234 +	white-space: nowrap;
 461.235 +	background-color: transparent;
 461.236 +}
 461.237 +
 461.238 +div.filemanager h2 {
 461.239 +	margin: 0;
 461.240 +	border-top: 1px solid #bebebe;
 461.241 +	font-size: 14px;
 461.242 +	font-weight: bold;
 461.243 +	padding: 2px 0 0 5px;
 461.244 +	clear: both;
 461.245 +}
 461.246 +
 461.247 +div.filemanager dl {
 461.248 +	margin: 5px 0;
 461.249 +	width: 100%;
 461.250 +	clear: both;
 461.251 +	overflow: auto;
 461.252 +}
 461.253 +
 461.254 +div.filemanager dt, div.filemanager dd {
 461.255 +	float: left;
 461.256 +	line-height: 20px;
 461.257 +	font-size: 11px;
 461.258 +}
 461.259 +
 461.260 +div.filemanager dt {
 461.261 +	clear: both;
 461.262 +	width: 22%;
 461.263 +	margin-left: 5%;
 461.264 +	font-weight: bold;
 461.265 +}
 461.266 +
 461.267 +div.filemanager dd {
 461.268 +	width: 60%;
 461.269 +	white-space: nowrap;
 461.270 +	overflow: auto;
 461.271 +}
 461.272 +
 461.273 +div.filemanager div.margin {
 461.274 +	margin-left: 15px;
 461.275 +}
 461.276 +
 461.277 +div.filemanager dd.filemanager-dir a.icon {
 461.278 +	border: 1px solid #bebebe;
 461.279 +	padding: 2px 5px 2px 20px;
 461.280 +	text-decoration: none;
 461.281 +	background: #eee url(../Assets/Icons/dir.png) 2px 0 no-repeat;
 461.282 +	color: #000;
 461.283 +
 461.284 +	-moz-border-radius: 3px;
 461.285 +	-webkit-border-radius: 3px;
 461.286 +	border-radius: 3px;
 461.287 +}
 461.288 +
 461.289 +div.filemanager dd.filemanager-dir a.icon:hover {
 461.290 +	text-decoration: none;
 461.291 +	background-color: #fff;
 461.292 +}
 461.293 +
 461.294 +div.filemanager dd.filemanager-dir a.selected, div.filemanager dd.filemanager-dir a.selected:hover {
 461.295 +	margin: 0 1px;
 461.296 +	background-color: transparent;
 461.297 +	border: none;
 461.298 +	cursor: auto;
 461.299 +}
 461.300 +
 461.301 +div.filemanager-preview {
 461.302 +	margin-top: 5px;
 461.303 +}
 461.304 +
 461.305 +div.filemanager-preview img.preview {
 461.306 +	margin: 0 auto 1em;
 461.307 +	display: block;
 461.308 +	max-height: 100px;
 461.309 +}
 461.310 +
 461.311 +div.filemanager-engine-trident4 div.filemanager-preview img.preview {
 461.312 +	height: 100px;
 461.313 +}
 461.314 +
 461.315 +div.filemanager-preview ul, div.filemanager-preview div.textpreview {
 461.316 +	border: 1px solid #bebebe;
 461.317 +	background: #fff;
 461.318 +	
 461.319 +	padding: 2px;
 461.320 +	margin: 1em auto;
 461.321 +	
 461.322 +	width: 490px;
 461.323 +	height: 220px;
 461.324 +	overflow: auto;
 461.325 +}
 461.326 +
 461.327 +div.filemanager-preview div.textpreview {
 461.328 +	font: 9px Verdana, Arial, Helvetica, sans-serif;
 461.329 +}
 461.330 +
 461.331 +div.filemanager-preview div.object {
 461.332 +	width: 200px;
 461.333 +	height: 20px;
 461.334 +	border: 1px solid #bebebe;
 461.335 +	margin: 0 0 1em 190px;
 461.336 +	overflow: hidden;
 461.337 +}
 461.338 +
 461.339 +div.filemanager-container img.browser-add {
 461.340 +	position: absolute;
 461.341 +	width: 16px;
 461.342 +	height: 16px;
 461.343 +	z-index: 1010;
 461.344 +}
 461.345 +
 461.346 +/* UPLOAD */
 461.347 +div.filemanager-container .file span {
 461.348 +	padding: 0 5px 0 0;
 461.349 +}
 461.350 +
 461.351 +div.filemanager-container .file .file-size {
 461.352 +	color: #666;
 461.353 +}
 461.354 +
 461.355 +div.filemanager-container .file .file-cancel {
 461.356 +	cursor: pointer;
 461.357 +	padding-left: 5px;
 461.358 +	float: right;
 461.359 +}
 461.360 +div.filemanager-container .file .file-progress {
 461.361 +	margin-top: 5px;
 461.362 +	float: right;
 461.363 +	width: 125px;
 461.364 +	height: 12px;
 461.365 +	background-image: url(../Assets/progress.gif);
 461.366 +}
 461.367 +
 461.368 +div.filemanager div.checkbox {
 461.369 +	float: left;
 461.370 +	height: 12px;
 461.371 +	width: 16px;
 461.372 +	margin: 10px 3px 0;
 461.373 +	background: url(../Assets/checkbox.png) no-repeat;
 461.374 +}
 461.375 +
 461.376 +div.filemanager div.checkboxChecked {
 461.377 +	background-position: 0 -12px;
 461.378 +}
 461.379 +
 461.380 +/* SELECTED FILE */
 461.381 +div.selected-file img {
 461.382 +	vertical-align: bottom;
 461.383 +	padding: 0 3px 0 0;
 461.384 +}
 461.385 +div.selected-file span {
 461.386 +	line-height: 16px;
 461.387 +}
 461.388 +div.selected-file .file-cancel {
 461.389 +	cursor: pointer;
 461.390 +	padding: 0 0 0 5px;
 461.391 +}
 461.392 \ No newline at end of file
   462.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/DSC_0670.jpg has changed
   463.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/DSC_2051.jpg has changed
   464.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/DSC_2343.jpg has changed
   465.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/DSC_7850.jpg has changed
   466.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/E29_2000.jpg has changed
   467.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/large/DSC_0670.jpg has changed
   468.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/large/DSC_2051.jpg has changed
   469.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/large/DSC_2343.jpg has changed
   470.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/large/DSC_7850.jpg has changed
   471.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/large/E29_2000.jpg has changed
   472.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/mainthumb.jpg has changed
   473.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_0670.jpg has changed
   474.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_2051.jpg has changed
   475.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_2343.jpg has changed
   476.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/thumbs/DSC_7850.jpg has changed
   477.1 Binary file e2gallerypro/e2upload/Galleries/gallery1/thumbs/E29_2000.jpg has changed
   478.1 Binary file e2gallerypro/e2upload/Galleries/gallery2/mainthumb.jpg has changed
   479.1 Binary file e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Buffalo_Verde.jpg has changed
   480.1 Binary file e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Longhorn_Sunset.jpg has changed
   481.1 Binary file e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Turquoise_Sky.jpg has changed
   482.1 Binary file e2gallerypro/e2upload/Galleries/prints/Judy_Yates_Wood_Duck_Pair.jpg has changed
   483.1 Binary file e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Buffalo_Verde.jpg has changed
   484.1 Binary file e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Longhorn_Sunset.jpg has changed
   485.1 Binary file e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Turquoise_Sky.jpg has changed
   486.1 Binary file e2gallerypro/e2upload/Galleries/prints/large/Judy_Yates_Wood_Duck_Pair.jpg has changed
   487.1 Binary file e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Buffalo_Verde.jpg has changed
   488.1 Binary file e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Longhorn_Sunset.jpg has changed
   489.1 Binary file e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Turquoise_Sky.jpg has changed
   490.1 Binary file e2gallerypro/e2upload/Galleries/prints/thumbs/Judy_Yates_Wood_Duck_Pair.jpg has changed
   491.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   491.2 +++ b/e2gallerypro/e2upload/Source/Additions.js	Mon Feb 22 08:02:39 2010 -0500
   491.3 @@ -0,0 +1,247 @@
   491.4 +/*
   491.5 +Script: Additions.js
   491.6 +	MooTools Additions - Various Helpers, Overlay-Class, Dialog-Class
   491.7 +
   491.8 +License:
   491.9 +	MIT-style license.
  491.10 +
  491.11 +Copyright:
  491.12 +	Copyright (c) 2009 [Christoph Pojer](http://og5.net/christoph).
  491.13 +
  491.14 +Dependencies:
  491.15 +	- MooTools Core 1.2.2
  491.16 +	- MooTools More 1.2.2.1 or newer: Tips.js
  491.17 +
  491.18 +Contains:
  491.19 +	- FileManager.Tips: Augmented version of Tips for use within the FileManager
  491.20 +	- FileManager.Request: Simple extension to request to always use the loader-icon specified by the FileManager instance
  491.21 +	- Element.appearOn: Can be used to show an element when another is hovered: $(myElement).appearOn(myWrapper)
  491.22 +	- Element.center: Centers an element
  491.23 +	- Dialog, Overlay: Nice Classes used by the FileManager
  491.24 +*/
  491.25 +
  491.26 +if(!window.FileManager) var FileManager = {};
  491.27 +
  491.28 +FileManager.Tips = new Class({
  491.29 +	
  491.30 +	Extends: Tips,
  491.31 +	
  491.32 +	options: {
  491.33 +		offsets: {x: 15, y: 0},
  491.34 +		text: null,
  491.35 +		onShow: function(tip, el){
  491.36 +			if(tip.get('opacity')==0.8 && tip.getStyle('visibility')=='visible') return;
  491.37 +			
  491.38 +			tip.get('tween').pause();
  491.39 +			tip.set({
  491.40 +				opacity: 0,
  491.41 +				tween: {
  491.42 +					duration: 200,
  491.43 +					link: 'cancel'
  491.44 +				}
  491.45 +			}).fade(0.8);
  491.46 +		},
  491.47 +		
  491.48 +		onHide: function(tip, el){
  491.49 +			tip.get('tween').pause().start('opacity', 0).chain(function(){
  491.50 +				tip.setStyle('left', 0);
  491.51 +			});
  491.52 +		}
  491.53 +	},
  491.54 +	
  491.55 +	initialize: function(el, options){
  491.56 +		this.parent(el, options);
  491.57 +		this.tip.addClass('tip-filebrowser');
  491.58 +	}
  491.59 +	
  491.60 +});
  491.61 +
  491.62 +FileManager.Request = new Class({
  491.63 +	
  491.64 +	Extends: Request.JSON,
  491.65 +	
  491.66 +	initialize: function(options, filebrowser){
  491.67 +		this.parent(options);
  491.68 +		
  491.69 +		if(filebrowser)	this.addEvents({
  491.70 +			request: filebrowser.onRequest.bind(filebrowser),
  491.71 +			complete: filebrowser.onComplete.bind(filebrowser)
  491.72 +		});
  491.73 +	}
  491.74 +	
  491.75 +});
  491.76 +
  491.77 +Element.implement({
  491.78 +	
  491.79 +	appearOn: function(el, opacity, options){
  491.80 +		opacity = $type(opacity) == 'array' ? [opacity[0] || 1, opacity[1] || 0] : [opacity || 1, 0];
  491.81 +		
  491.82 +		this.set({
  491.83 +			opacity: opacity[1],
  491.84 +			tween: options || {duration: 200}
  491.85 +		});
  491.86 +		
  491.87 +		$(el).addEvents({
  491.88 +			mouseenter: this.fade.bind(this, opacity[0]),
  491.89 +			mouseleave: this.fade.bind(this, opacity[1])
  491.90 +		});
  491.91 +		
  491.92 +		return this;
  491.93 +	},
  491.94 +	
  491.95 +	center: function(offsets){
  491.96 +		var scroll = document.getScroll(),
  491.97 +			offset = document.getSize(),
  491.98 +			size = this.getSize(),
  491.99 +			values = {x: 'left', y: 'top'};
 491.100 +		
 491.101 +		if(!offsets) offsets = {};
 491.102 +		
 491.103 +		for(var z in values){
 491.104 +			var style = scroll[z]+(offset[z]-size[z])/2+(offsets[z] || 0);
 491.105 +			this.setStyle(values[z], style < 10 ? 10 : style);
 491.106 +		}
 491.107 +		
 491.108 +		return this;
 491.109 +	}
 491.110 +	
 491.111 +});
 491.112 +
 491.113 +var Dialog = new Class({
 491.114 +	
 491.115 +	Implements: [Options, Events],
 491.116 +	
 491.117 +	options: {
 491.118 +		/*onShow: $empty,
 491.119 +		onOpen: $empty,
 491.120 +		onConfirm: $empty,
 491.121 +		onDecline: $empty,
 491.122 +		onClose: $empty,*/
 491.123 +		request: null,
 491.124 +		buttons: ['confirm', 'decline'],
 491.125 +		language: {}
 491.126 +	},
 491.127 +	
 491.128 +	initialize: function(text, options){
 491.129 +		this.setOptions(options);
 491.130 +		
 491.131 +		this.el = new Element('div', {
 491.132 +			'class': 'dialog dialog-engine-'+Browser.Engine.name+(Browser.Engine.trident ? Browser.Engine.version : ''),
 491.133 +			opacity: 0,
 491.134 +			tween: {duration: 250}
 491.135 +		}).adopt([
 491.136 +			$type(text)=='string' ? new Element('div', {text: text}) : text
 491.137 +		]);
 491.138 +		
 491.139 +		if(this.options.content) this.el.getElement('div').adopt(this.options.content);
 491.140 +		
 491.141 +		Array.each(this.options.buttons, function(v){
 491.142 +			new Element('button', {'class': 'dialog-'+v, text: this.options.language[v]}).addEvent('click', (function(e){
 491.143 +				if(e) e.stop();
 491.144 +				this.fireEvent(v).fireEvent('close');
 491.145 +				this.overlay.hide();
 491.146 +				this.destroy();
 491.147 +			}).bind(this)).inject(this.el);
 491.148 +		}, this);
 491.149 +		
 491.150 +		this.overlay = new Overlay({
 491.151 +			'class': 'overlay overlay-dialog',
 491.152 +			events: {click: this.fireEvent.bind(this, ['close'])},
 491.153 +			tween: {duration: 250}
 491.154 +		});
 491.155 +		
 491.156 +		this.bound = {
 491.157 +			scroll: (function(){
 491.158 +				if(!this.el) this.destroy();
 491.159 +				else this.el.center();
 491.160 +			}).bind(this),
 491.161 +			keyesc: (function(e){
 491.162 +				if(e.key=='esc') this.fireEvent('close').destroy();
 491.163 +			}).bind(this)
 491.164 +		};
 491.165 +		
 491.166 +		this.show();
 491.167 +	},
 491.168 +	
 491.169 +	show: function(){
 491.170 +		this.overlay.show();
 491.171 +		var self = this.fireEvent('open');
 491.172 +		this.el.setStyle('display', 'block').inject(document.body).center().fade(1).get('tween').chain(function(){
 491.173 +			self.fireEvent('show');
 491.174 +		});
 491.175 +		
 491.176 +		window.addEvents({
 491.177 +			scroll: this.bound.scroll,
 491.178 +			resize: this.bound.scroll,
 491.179 +			keyup: this.bound.keyesc
 491.180 +		});
 491.181 +	},
 491.182 +	
 491.183 +	destroy: function(){
 491.184 +		if(this.el) this.el.fade(0).get('tween').chain((function(){
 491.185 +			this.overlay.destroy();
 491.186 +			this.el.destroy();
 491.187 +		}).bind(this));
 491.188 +		
 491.189 +		window.removeEvent('scroll', this.bound.scroll).removeEvent('resize', this.bound.scroll).removeEvent('keyup', this.bound.keyesc);
 491.190 +	}
 491.191 +	
 491.192 +}),
 491.193 +Overlay = new Class({
 491.194 +	
 491.195 +	initialize: function(options){
 491.196 +		this.el = new Element('div', $extend({
 491.197 +			'class': 'overlay'
 491.198 +		}, options)).inject(document.body);
 491.199 +	},
 491.200 +	
 491.201 +	show: function(){
 491.202 +		this.objects = $$('object, select, embed').filter(function(el){
 491.203 +			return el.id=='SwiffFileManagerUpload' || el.style.visibility=='hidden' ? false : !!(el.style.visibility = 'hidden');
 491.204 +		});
 491.205 +		
 491.206 +		this.resize = (function(){
 491.207 +			if(!this.el) this.destroy();
 491.208 +			else this.el.setStyles({
 491.209 +				width: document.getScrollWidth(),
 491.210 +				height: document.getScrollHeight()
 491.211 +			});
 491.212 +		}).bind(this);
 491.213 +		
 491.214 +		this.resize();
 491.215 +		
 491.216 +		this.el.setStyles({
 491.217 +			opacity: 0,
 491.218 +			display: 'block'
 491.219 +		}).get('tween').pause().start('opacity', 0.5);
 491.220 +		
 491.221 +		window.addEvent('resize', this.resize);
 491.222 +		
 491.223 +		return this;
 491.224 +	},
 491.225 +	
 491.226 +	hide: function(){
 491.227 +		this.el.fade(0).get('tween').chain((function(){
 491.228 +			this.revertObjects();
 491.229 +			this.el.setStyle('display', 'none');
 491.230 +		}).bind(this));
 491.231 +		
 491.232 +		window.removeEvent('resize', this.resize);
 491.233 +		
 491.234 +		return this;
 491.235 +	},
 491.236 +	
 491.237 +	destroy: function(){
 491.238 +		this.revertObjects().el.destroy();
 491.239 +	},
 491.240 +	
 491.241 +	revertObjects: function(){
 491.242 +		if(this.objects && this.objects.length)
 491.243 +			this.objects.each(function(el){
 491.244 +				el.style.visibility = 'visible';	
 491.245 +			});
 491.246 +		
 491.247 +		return this;
 491.248 +	}
 491.249 +	
 491.250 +});
 491.251 \ No newline at end of file
   492.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   492.2 +++ b/e2gallerypro/e2upload/Source/FileManager.js	Mon Feb 22 08:02:39 2010 -0500
   492.3 @@ -0,0 +1,585 @@
   492.4 +/*
   492.5 +Script: FileManager.js
   492.6 +	MooTools FileManager
   492.7 +
   492.8 +License:
   492.9 +	MIT-style license.
  492.10 +
  492.11 +Version:
  492.12 +	1.0rc1
  492.13 +
  492.14 +Copyright:
  492.15 +	Copyright (c) 2009 [Christoph Pojer](http://og5.net/christoph).
  492.16 +
  492.17 +Dependencies:
  492.18 +	- MooTools Core 1.2.2
  492.19 +	- MooTools More 1.2.2.1 or newer: Drag.js, Drag.Move.js, Tips.js, Asset.js
  492.20 +	- Additions.js
  492.21 +
  492.22 +Todo:
  492.23 +	- Add Scroller.js (optional) for Drag&Drop in the Filelist
  492.24 +
  492.25 +Inspiration:
  492.26 +	- Loosely based on a Script by [Yannick Croissant](http://dev.k1der.net/dev/brooser-un-browser-de-fichier-pour-mootools/)
  492.27 +
  492.28 +Options:
  492.29 +	- url: (string) The base url to the Backend FileManager, without QueryString
  492.30 +	- assetBasePath: (string) The path to all images and swf files
  492.31 +	- selectable: (boolean, defaults to *false*) If true, provides a button to select a file
  492.32 +	- language: (string, defaults to *en*) The language used for the FileManager
  492.33 +	- hideOnClick: (boolean, defaults to *false*) When true, hides the FileManager when the area outside of it is clicked
  492.34 +	- directory: (string) Can be used to load a subfolder instead of the base folder
  492.35 +
  492.36 +Events:
  492.37 +	- onComplete(path, file): fired when a file gets selected via the "Select file" button
  492.38 +	- onModify(file): fired when a file gets renamed/deleted or modified in another way
  492.39 +	- onShow: fired when the FileManager opens
  492.40 +	- onHide: event fired when FileManager closes
  492.41 +*/
  492.42 +
  492.43 +var FileManager = new Class({
  492.44 +
  492.45 +	Implements: [Options, Events],
  492.46 +
  492.47 +	Request: null,
  492.48 +	Directory: null,
  492.49 +	Current: null,
  492.50 +
  492.51 +	options: {
  492.52 +		/*onComplete: $empty,
  492.53 +		onModify: $empty,
  492.54 +		onShow: $empty,
  492.55 +		onHide: $empty,*/
  492.56 +		directory: '',
  492.57 +		url: null,
  492.58 +		assetBasePath: null,
  492.59 +		selectable: false,
  492.60 +		hideOnClick: false,
  492.61 +		language: 'en'
  492.62 +	},
  492.63 +	
  492.64 +	hooks: {
  492.65 +		show: {},
  492.66 +		cleanup: {}
  492.67 +	},
  492.68 +
  492.69 +	initialize: function(options){
  492.70 +		this.setOptions(options);
  492.71 +		this.options.assetBasePath = this.options.assetBasePath.replace(/(\/|\\)*$/, '/');
  492.72 +		this.droppables = [];
  492.73 +		this.Directory = this.options.directory;
  492.74 +		
  492.75 +		this.language = FileManager.Language[this.options.language] || FileManager.Language.en;
  492.76 +		this.container = new Element('div', {'class': 'filemanager-container filemanager-engine-'+Browser.Engine.name+(Browser.Engine.trident ? Browser.Engine.version : '')});
  492.77 +		this.el = new Element('div', {'class': 'filemanager'}).inject(this.container);
  492.78 +		this.menu = new Element('div', {'class': 'filemanager-menu'}).inject(this.el);
  492.79 +		this.loader = new Element('div', {'class': 'loader', opacity: 0, tween: {duration: 200}}).inject(this.menu);
  492.80 +		this.browser = new Element('ul', {'class': 'filemanager-browser'}).addEvents({
  492.81 +			click: (function(e){
  492.82 +				if(e.target.match('ul')) return this.deselect();
  492.83 +				
  492.84 +				if(!e.target || !e.target.getParent('li')) return;
  492.85 +				var el = e.target.getParent('li').getElement('span');
  492.86 +				if(!el) return;
  492.87 +				
  492.88 +				e.stop();
  492.89 +				var file = el.retrieve('file');
  492.90 +				if(el.retrieve('block')){
  492.91 +					el.eliminate('block');
  492.92 +					return;
  492.93 +				}else if(file.mime=='text/directory'){
  492.94 +					el.addClass('selected');
  492.95 +					this.load(this.Directory+'/'+file.name);
  492.96 +					return;
  492.97 +				}
  492.98 +	
  492.99 +				this.fillInfo(file);
 492.100 +				if(this.Current) this.Current.removeClass('selected');
 492.101 +				this.Current = el.addClass('selected');
 492.102 +				
 492.103 +				this.switchButton();
 492.104 +			}).bind(this)
 492.105 +		}).inject(this.el);
 492.106 +		
 492.107 +		
 492.108 +		if(this.options.selectable) this.addMenuButton('open');
 492.109 +		this.addMenuButton('create');
 492.110 +		
 492.111 +		this.info = new Element('div', {'class': 'filemanager-infos', opacity: 0}).inject(this.el);
 492.112 +
 492.113 +		var head = new Element('div', {'class': 'filemanager-head'}).adopt([
 492.114 +			new Element('img', {'class': 'filemanager-icon'}),
 492.115 +			new Element('h1')
 492.116 +		]);
 492.117 +
 492.118 +		this.info.adopt([head, new Element('h2', {text: this.language.information})]);
 492.119 +
 492.120 +		var list = new Element('dl').adopt([
 492.121 +			new Element('dt', {text: this.language.modified}),
 492.122 +			new Element('dd', {'class': 'filemanager-modified'}),
 492.123 +			new Element('dt', {text: this.language.type}),
 492.124 +			new Element('dd', {'class': 'filemanager-type'}),
 492.125 +			new Element('dt', {text: this.language.size}),
 492.126 +			new Element('dd', {'class': 'filemanager-size'}),
 492.127 +			new Element('dt', {text: this.language.dir}),
 492.128 +			new Element('dd', {'class': 'filemanager-dir'})
 492.129 +		]).inject(this.info);
 492.130 +
 492.131 +		this.preview = new Element('div', {'class': 'filemanager-preview'});
 492.132 +		this.info.adopt([
 492.133 +			new Element('h2', {'class': 'filemanager-headline', text: this.language.preview}),
 492.134 +			this.preview
 492.135 +		]);
 492.136 +		
 492.137 +		this.closeIcon = new Element('div', {
 492.138 +			'class': 'filemanager-close',
 492.139 +			title: this.language.close,
 492.140 +			events: {click: this.hide.bind(this)}
 492.141 +		}).adopt(new Asset.image(this.options.assetBasePath+'destroy.png')).inject(this.el);
 492.142 +		new FileManager.Tips(this.closeIcon.appearOn(this.closeIcon, [1, 0.8]).appearOn(this.el, 0.8));
 492.143 +		
 492.144 +		this.imageadd = new Asset.image(this.options.assetBasePath+'add.png', {
 492.145 +			'class': 'browser-add'
 492.146 +		}).set('opacity', 0).inject(this.container);
 492.147 +		
 492.148 +		this.container.inject(document.body);
 492.149 +		this.overlay = new Overlay(this.options.hideOnClick ? {
 492.150 +			events: {click: this.hide.bind(this)}
 492.151 +		} : null);
 492.152 +		this.bound = {
 492.153 +			keydown: (function(e){
 492.154 +				if(e.control) this.imageadd.fade(1);
 492.155 +			}).bind(this),
 492.156 +			keyup: (function(){
 492.157 +				this.imageadd.fade(0);
 492.158 +			}).bind(this),
 492.159 +			keyesc: (function(e){
 492.160 +				if(e.key=='esc') this.hide();
 492.161 +			}).bind(this),
 492.162 +			scroll: (function(){
 492.163 +				this.el.center(this.offsets);
 492.164 +				this.fireEvent('scroll');
 492.165 +			}).bind(this)
 492.166 +		};
 492.167 +	},
 492.168 +
 492.169 +	show: function(e){
 492.170 +		if(e) e.stop();
 492.171 +
 492.172 +		this.load(this.Directory);
 492.173 +		this.overlay.show();
 492.174 +
 492.175 +		this.info.set('opacity', 0);
 492.176 +
 492.177 +		(function(){
 492.178 +			this.container.setStyles({
 492.179 +				opacity: 0,
 492.180 +				display: 'block'
 492.181 +			});
 492.182 +
 492.183 +			this.el.center(this.offsets);
 492.184 +			this.fireEvent('show');
 492.185 +			this.container.set('opacity', 1);
 492.186 +			this.fireHooks('show');
 492.187 +
 492.188 +			window.addEvents({
 492.189 +				scroll: this.bound.scroll,
 492.190 +				resize: this.bound.scroll,
 492.191 +				keyup: this.bound.keyesc
 492.192 +			});
 492.193 +		}).delay(500, this);
 492.194 +	},
 492.195 +
 492.196 +	hide: function(e){
 492.197 +		if(e) e.stop();
 492.198 +
 492.199 +		this.overlay.hide();
 492.200 +		this.browser.empty();
 492.201 +		this.container.setStyle('display', 'none');
 492.202 +		
 492.203 +		this.fireHooks('cleanup').fireEvent('hide');
 492.204 +		window.removeEvent('scroll', this.bound.scroll).removeEvent('resize', this.bound.scroll).removeEvent('keyup', this.bound.keyesc);
 492.205 +	},
 492.206 +
 492.207 +	open: function(e){
 492.208 +		e.stop();
 492.209 +
 492.210 +		if(!this.Current) return false;
 492.211 +		
 492.212 +		this.fireEvent('complete', [
 492.213 +			this.normalize(this.Directory+'/'+this.Current.retrieve('file').name),
 492.214 +			this.Current.retrieve('file')
 492.215 +		]);
 492.216 +		this.hide();
 492.217 +	},
 492.218 +
 492.219 +	create: function(e){
 492.220 +		e.stop();
 492.221 +
 492.222 +		var self = this;
 492.223 +		new Dialog(this.language.createdir, {
 492.224 +			language: {
 492.225 +				confirm: this.language.create,
 492.226 +				decline: this.language.cancel
 492.227 +			},
 492.228 +			content: [
 492.229 +				new Element('input', {'class': 'createDirectory'})
 492.230 +			],
 492.231 +			onOpen: this.onDialogOpen.bind(this),
 492.232 +			onClose: this.onDialogClose.bind(this),
 492.233 +			onShow: function(){
 492.234 +				var self = this;
 492.235 +				this.el.getElement('input').addEvent('keyup', function(e){
 492.236 +					if(e.key=='enter') self.el.getElement('button-confirm').fireEvent('click');
 492.237 +				}).focus();
 492.238 +			},
 492.239 +			onConfirm: function(){
 492.240 +				new FileManager.Request({
 492.241 +					url: self.options.url+'?event=create',
 492.242 +					onSuccess: self.fill.bind(self),
 492.243 +					data: {
 492.244 +						file: this.el.getElement('input').get('value'),
 492.245 +						directory: self.Directory
 492.246 +					}
 492.247 +				}, self).post();
 492.248 +			}
 492.249 +		});
 492.250 +	},
 492.251 +
 492.252 +	deselect: function(el){
 492.253 +		if(el && this.Current!=el) return;
 492.254 +
 492.255 +		if(el) this.fillInfo();
 492.256 +		if(this.Current) this.Current.removeClass('selected');
 492.257 +		this.Current = null;
 492.258 +
 492.259 +		this.switchButton();
 492.260 +	},
 492.261 +
 492.262 +	load: function(dir, nofade){
 492.263 +		this.deselect();
 492.264 +		if(!nofade) this.info.fade(0);
 492.265 +
 492.266 +		if(this.Request) this.Request.cancel();
 492.267 +
 492.268 +		this.Request = new FileManager.Request({
 492.269 +			url: this.options.url,
 492.270 +			onSuccess: (function(j){
 492.271 +				this.fill(j, nofade);
 492.272 +			}).bind(this),
 492.273 +			data: {
 492.274 +				directory: dir
 492.275 +			}
 492.276 +		}, this).post();
 492.277 +	},
 492.278 +
 492.279 +	destroy: function(e, file){
 492.280 +		e.stop();
 492.281 +		
 492.282 +		var self = this;
 492.283 +		new Dialog(this.language.destroyfile, {
 492.284 +			language: {
 492.285 +				confirm: this.language.destroy,
 492.286 +				decline: this.language.cancel
 492.287 +			},
 492.288 +			onOpen: this.onDialogOpen.bind(this),
 492.289 +			onClose: this.onDialogClose.bind(this),
 492.290 +			onConfirm: function(){
 492.291 +				new FileManager.Request({
 492.292 +					url: self.options.url+'?event=destroy',
 492.293 +					data: {
 492.294 +						file: file.name,
 492.295 +						directory: self.Directory
 492.296 +					},
 492.297 +					onSuccess: function(j){
 492.298 +						if(!j || j.content!='destroyed'){
 492.299 +							new Dialog(self.language.nodestroy, {language: {confirm: self.language.ok}, buttons: ['confirm']});
 492.300 +							return;
 492.301 +						}
 492.302 +
 492.303 +						self.fireEvent('modify', [$unlink(file)]);
 492.304 +						file.element.getParent().fade(0).get('tween').chain(function(){
 492.305 +							self.deselect(file.element);
 492.306 +							this.element.destroy();
 492.307 +						});
 492.308 +					}
 492.309 +				}, self).post();
 492.310 +			}
 492.311 +		});
 492.312 +
 492.313 +	},
 492.314 +
 492.315 +	rename: function(e, file){
 492.316 +		e.stop();
 492.317 +
 492.318 +		var name = file.name;
 492.319 +		if(file.mime!='text/directory') name = name.replace(/\..*$/, '');
 492.320 +
 492.321 +		var self = this;
 492.322 +		new Dialog(this.language.renamefile, {
 492.323 +			language: {
 492.324 +				confirm: this.language.rename,
 492.325 +				decline: this.language.cancel
 492.326 +			},
 492.327 +			content: [
 492.328 +				new Element('input', {'class': 'rename', value: name})
 492.329 +			],
 492.330 +			onOpen: this.onDialogOpen.bind(this),
 492.331 +			onClose: this.onDialogClose.bind(this),
 492.332 +			onShow: function(){
 492.333 +				var self = this;
 492.334 +				this.el.getElement('input').addEvent('keyup', function(e){
 492.335 +					if(e.key=='enter') self.el.getElement('button-confirm').fireEvent('click');
 492.336 +				}).focus();
 492.337 +			},
 492.338 +			onConfirm: function(){
 492.339 +				new FileManager.Request({
 492.340 +					url: self.options.url+'?event=move',
 492.341 +					onSuccess: (function(j){
 492.342 +						if(!j || !j.name) return;
 492.343 +
 492.344 +						self.fireEvent('modify', [$unlink(file)]);
 492.345 +
 492.346 +						file.element.getElement('span').set('text', j.name);
 492.347 +						file.name = j.name;
 492.348 +						self.fillInfo(file);
 492.349 +					}).bind(this),
 492.350 +					data: {
 492.351 +						file: file.name,
 492.352 +						name: this.el.getElement('input').get('value'),
 492.353 +						directory: self.Directory
 492.354 +					}
 492.355 +				}, self).post();
 492.356 +			}
 492.357 +		});
 492.358 +	},
 492.359 +
 492.360 +	fill: function(j, nofade){
 492.361 +		this.Directory = j.path;
 492.362 +		this.CurrentDir = j.dir;
 492.363 +		if(!nofade) this.fillInfo(j.dir);
 492.364 +		this.browser.empty();
 492.365 +
 492.366 +		if(!j.files) return;
 492.367 +
 492.368 +		var els = [[], []];
 492.369 +		$each(j.files, function(file){
 492.370 +			file.dir = j.path;
 492.371 +			var el = file.element = new Element('span', {'class': 'fi', href: '#'}).adopt(
 492.372 +				new Asset.image(this.options.assetBasePath+'Icons/'+file.icon+'.png'),
 492.373 +				new Element('span', {text: file.name})
 492.374 +			).store('file', file);
 492.375 +
 492.376 +			var icons = [];
 492.377 +			if(file.mime!='text/directory')
 492.378 +				icons.push(new Asset.image(this.options.assetBasePath+'disk.png', {title: this.language.download}).addClass('browser-icon').addEvent('click', (function(e){
 492.379 +					e.stop();
 492.380 +					window.open(this.normalize(this.Directory+'/'+file.name));
 492.381 +				}).bind(this)).inject(el, 'top'));
 492.382 +
 492.383 +			if(file.name!='..')
 492.384 +				['rename', 'destroy'].each(function(v){
 492.385 +					icons.push(new Asset.image(this.options.assetBasePath+v+'.png', {title: this.language[v]}).addClass('browser-icon').addEvent('click', this[v].bindWithEvent(this, [file])).injectTop(el));
 492.386 +				}, this);
 492.387 +
 492.388 +			els[file.mime=='text/directory' ? 1 : 0].push(el);
 492.389 +			if(file.name=='..') el.set('opacity', 0.7);
 492.390 +			el.inject(new Element('li').inject(this.browser));
 492.391 +			icons = $$(icons.map(function(icon){ return icon.appearOn(icon, [1, 0.7]); })).appearOn(el.getParent('li'), 0.7);
 492.392 +		}, this);
 492.393 +
 492.394 +		var self = this;
 492.395 +		$$(els[0]).makeDraggable({
 492.396 +			droppables: $$(this.droppables, els[1]),
 492.397 +
 492.398 +			onDrag: function(el, e){
 492.399 +				self.imageadd.setStyles(Hash.getValues(e.page).map(function(v){ return v+15; }).associate(['left', 'top']));
 492.400 +			},
 492.401 +
 492.402 +			onBeforeStart: function(el){
 492.403 +				el.setStyles({left: '0', top: '0'});
 492.404 +			},
 492.405 +
 492.406 +			onStart: function(el){
 492.407 +				self.onDragStart(el, this);
 492.408 +
 492.409 +				el.set('opacity', 0.7);
 492.410 +				document.addEvents({
 492.411 +					keydown: self.bound.keydown,
 492.412 +					keyup: self.bound.keyup
 492.413 +				});
 492.414 +			},
 492.415 +
 492.416 +			onEnter: function(el, droppable){
 492.417 +				droppable.addClass('droppable');
 492.418 +			},
 492.419 +
 492.420 +			onLeave: function(el, droppable){
 492.421 +				droppable.removeClass('droppable');
 492.422 +			},
 492.423 +
 492.424 +			onDrop: function(el, droppable, e){
 492.425 +				document.removeEvents('keydown', self.bound.keydown).removeEvents('keyup', self.bound.keydown);
 492.426 +
 492.427 +				self.imageadd.fade(0);
 492.428 +				el.set('opacity', 1).store('block', true);
 492.429 +				if(e.control || !droppable)
 492.430 +					el.setStyles({left: '0', top: '0'});
 492.431 +
 492.432 +				if(!droppable && !e.control)
 492.433 +					return;
 492.434 +				
 492.435 +				var dir;
 492.436 +				if(droppable){
 492.437 +					droppable.addClass('selected');
 492.438 +					(function(){ droppable.removeClass('droppable').removeClass('selected'); }).delay(300);
 492.439 +					
 492.440 +					if(self.onDragComplete(el, droppable))
 492.441 +						return;
 492.442 +
 492.443 +					dir = droppable.retrieve('file');
 492.444 +				}
 492.445 +				var file = el.retrieve('file');
 492.446 +
 492.447 +				new FileManager.Request({
 492.448 +					url: self.options.url+'?event=move',
 492.449 +					data: {
 492.450 +						file: file.name,
 492.451 +						directory: self.Directory,
 492.452 +						newDirectory: dir ? dir.dir+'/'+dir.name : self.Directory,
 492.453 +						copy: e.control ? 1 : 0
 492.454 +					},
 492.455 +					onSuccess: function(){
 492.456 +						if(!dir) self.load(self.Directory);
 492.457 +					}
 492.458 +				}, self).post();
 492.459 +
 492.460 +				self.fireEvent('modify', [$unlink(file)]);
 492.461 +
 492.462 +				if(!e.control)
 492.463 +					el.fade(0).get('tween').chain(function(){
 492.464 +						self.deselect(el);
 492.465 +						el.getParent().destroy();
 492.466 +					});
 492.467 +			}
 492.468 +		});
 492.469 +		$$(els).setStyles({left: '0', top: '0'});
 492.470 +		var tips = new FileManager.Tips(this.browser.getElements('img.browser-icon'));
 492.471 +
 492.472 +		tips.tip.removeClass('tip-base');
 492.473 +	},
 492.474 +
 492.475 +	fillInfo: function(file, path){
 492.476 +		if(!file) file = this.CurrentDir;
 492.477 +		if(!path) path = this.Directory;
 492.478 +
 492.479 +		if(!file) return;
 492.480 +		var size = this.size(file.size);
 492.481 +
 492.482 +		this.info.fade(1).getElement('img').set({
 492.483 +			src: this.options.assetBasePath+'Icons/'+file.icon+'.png',
 492.484 +			alt: file.mime
 492.485 +		});
 492.486 +		
 492.487 +		this.fireHooks('cleanup');
 492.488 +		this.preview.empty();
 492.489 +
 492.490 +		this.info.getElement('h1').set('text', file.name);
 492.491 +		this.info.getElement('dd.filemanager-modified').set('text', file.date);
 492.492 +		this.info.getElement('dd.filemanager-type').set('text', file.mime);
 492.493 +		this.info.getElement('dd.filemanager-size').set('text', !size[0] && size[1]=='Bytes' ? '-' : (size.join(' ')+(size[1]!='Bytes' ? ' ('+file.size+' Bytes)' : '')));
 492.494 +		this.info.getElement('h2.filemanager-headline').setStyle('display', file.mime=='text/directory' ? 'none' : 'block');
 492.495 +
 492.496 +		var text = [], pre = [];
 492.497 +
 492.498 +		path.split('/').each(function(v){
 492.499 +			if(!v) return;
 492.500 +
 492.501 +			pre.push(v);
 492.502 +			text.push(new Element('a', {
 492.503 +					'class': 'icon',
 492.504 +					href: '#',
 492.505 +					text: v
 492.506 +				}).addEvent('click', (function(e, dir){
 492.507 +					e.stop();
 492.508 +
 492.509 +					this.load(dir);
 492.510 +				}).bindWithEvent(this, [pre.join('/')]))
 492.511 +			);
 492.512 +			text.push(new Element('span', {text: ' / '}));
 492.513 +		}, this);
 492.514 +
 492.515 +		text.pop();
 492.516 +		text[text.length-1].addClass('selected').removeEvents('click').addEvent('click', function(e){ e.stop(); });
 492.517 +
 492.518 +		this.info.getElement('dd.filemanager-dir').empty().adopt(new Element('span', {text: '/ '}), text);
 492.519 +
 492.520 +		if(file.mime=='text/directory') return;
 492.521 +
 492.522 +		if(this.Request) this.Request.cancel();
 492.523 +
 492.524 +		this.Request = new FileManager.Request({
 492.525 +			url: this.options.url+'?event=detail',
 492.526 +			onSuccess: (function(j){
 492.527 +				var prev = this.preview.removeClass('filemanager-loading').set('html', j && j.content ? j.content.substitute(this.language, /\\?\$\{([^{}]+)\}/g) : '').getElement('img.prev');
 492.528 +				if(prev) prev.addEvent('load', function(){
 492.529 +						this.setStyle('background', 'none');
 492.530 +					});
 492.531 +
 492.532 +				var els = this.preview.getElements('button');
 492.533 +				if(els) els.addEvent('click', function(e){
 492.534 +					e.stop();
 492.535 +					window.open(this.get('value'));
 492.536 +				});
 492.537 +			}).bind(this),
 492.538 +			data: {
 492.539 +				directory: this.Directory,
 492.540 +				file: file.name
 492.541 +			}
 492.542 +		}, this).post();
 492.543 +	},
 492.544 +
 492.545 +	size: function(size){
 492.546 +		var tab = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
 492.547 +		for(var i = 0; size > 1024; i++)
 492.548 +			size = size/1024;
 492.549 +
 492.550 +		return [Math.round(size), tab[i]];
 492.551 +	},
 492.552 +
 492.553 +	normalize: function(str){
 492.554 +		return str.replace(/\/+/g, '/');
 492.555 +	},
 492.556 +
 492.557 +	switchButton: function(){
 492.558 +		var chk = !!this.Current;
 492.559 +		var el = this.menu.getElement('button.filemanager-open');
 492.560 +		if(el) el.set('disabled', !chk)[(chk ? 'remove' : 'add')+'Class']('disabled');
 492.561 +	},
 492.562 +
 492.563 +	addMenuButton: function(name){
 492.564 +		var el = new Element('button', {
 492.565 +			'class': 'filemanager-'+name,
 492.566 +			text: this.language[name]
 492.567 +		}).inject(this.menu);
 492.568 +		if(this[name]) el.addEvent('click', this[name].bind(this));
 492.569 +		return el;
 492.570 +	},
 492.571 +	
 492.572 +	fireHooks: function(hook){
 492.573 +		var args = Array.slice(arguments, 1);
 492.574 +		for(var key in this.hooks[hook]) this.hooks[hook][key].apply(this, args);
 492.575 +		return this;
 492.576 +	},
 492.577 +	
 492.578 +	onRequest: function(){ this.loader.set('opacity', 1); },
 492.579 +	onComplete: function(){ this.loader.fade(0); },
 492.580 +	onDialogOpen: $empty,
 492.581 +	onDialogClose: $empty,
 492.582 +	
 492.583 +	onDragStart: $empty,
 492.584 +	onDragComplete: $lambda(false)
 492.585 +	
 492.586 +});
 492.587 +
 492.588 +FileManager.Language = {};
 492.589 \ No newline at end of file
   493.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   493.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.cs.js	Mon Feb 22 08:02:39 2010 -0500
   493.3 @@ -0,0 +1,73 @@
   493.4 +/*
   493.5 +Script: Language.cs.js
   493.6 +	MooTools FileManager - Language Strings in Czech
   493.7 +
   493.8 +Translation:
   493.9 +	[Matěj Grabovský](http://mgrabovsky.is-game.com)
  493.10 +*/
  493.11 +
  493.12 +FileManager.Language.cs = {
  493.13 +	more: 'Podrobnosti',
  493.14 +	width: 'Šířka:',
  493.15 +	height: 'Výška:',
  493.16 +	
  493.17 +	ok: 'Ok',
  493.18 +	open: 'Vybrat soubor',
  493.19 +	upload: 'Nahrát',
  493.20 +	create: 'Vytvořit složku',
  493.21 +	createdir: 'Prosím zadejte název složky:',
  493.22 +	cancel: 'Storno',
  493.23 +	
  493.24 +	information: 'Informace',
  493.25 +	type: 'Typ:',
  493.26 +	size: 'Velikost:',
  493.27 +	dir: 'Cesta:',
  493.28 +	modified: 'Naposledy změněno:',
  493.29 +	preview: 'Náhled',
  493.30 +	close: 'Zavřít',
  493.31 +	destroy: 'Smazat',
  493.32 +	destroyfile: 'UrÄitÄ› chcete smazat tento soubor?',
  493.33 +	
  493.34 +	rename: 'Přejmenovat',
  493.35 +	renamefile: 'Prosím zadejte název nového souboru:',
  493.36 +	
  493.37 +	download: 'Stáhnout',
  493.38 +	nopreview: '<i>Náhled není dostupný</i>',
  493.39 +	
  493.40 +	title: 'Název:',
  493.41 +	artist: 'Umělec:',
  493.42 +	album: 'Album:',
  493.43 +	length: 'Délka:',
  493.44 +	bitrate: 'Přenosová rychlost:',
  493.45 +	
  493.46 +	deselect: 'Odstranit z výběru',
  493.47 +	
  493.48 +	nodestroy: 'Mazání souborů je na tomto serveru zakázáno.',
  493.49 +	
  493.50 +	'upload.disabled': 'Nahrávání souborů je na tomto serveru zakázáno.',
  493.51 +	'upload.authenticated': 'Nemáte právo nahrávat soubory.',
  493.52 +	'upload.path': 'Specifikovaná složka pro nahrávání neexistuje. Prosím kontaktujte správce těchto stránek.',
  493.53 +	'upload.exists': 'Specifikovaný soubor již existuje. Prosím kontaktujte správce těchto stránek.',
  493.54 +	'upload.mime': 'Specifikovaný typ souboru není povolen.',
  493.55 +	'upload.extension': 'Nahrávaný soubor má neznámou nebo zakázanou příponu.',
  493.56 +	'upload.size': 'Velikost nahrávaného souboru je přílíš velká. Prosím nahrajte menší soubor.',
  493.57 +	'upload.partial': 'Nahrávaný soubor byl nahrán jen zÄásti. Prosím nahrajte ho znovu.',
  493.58 +	'upload.nofile': 'Nebyl vybrán žádný soubor pro nahrání.',
  493.59 +	'upload.default': 'Něco se nepovedlo při nahrávání souboru.',
  493.60 +	
  493.61 +	/* FU */
  493.62 +	uploader: {
  493.63 +		unknown: 'Neznámá chyba',
  493.64 +		duplicate: 'Nelze přidat soubor „<em>${name}</em>“ (${size}), byl již přidán!',
  493.65 +		sizeLimitMin: 'Nelze přidat soubor „<em>${name}</em>“ (${size}), minimální povolená velikost souboru je <strong>${size_min}</strong>!',
  493.66 +		sizeLimitMax: 'Nelze přidat soubor „<em>${name}</em>“ (${size}), maximální povolená velikost souboru je <strong>${size_max}</strong>!'
  493.67 +	},
  493.68 +	
  493.69 +	flash: {
  493.70 +		hidden: null,
  493.71 +		disabled: null,
  493.72 +		flash: 'Pokud chcete nahrávat soubory, musíte mít nainstalovaný <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>'
  493.73 +	},
  493.74 +	
  493.75 +	resizeImages: 'Změnšit velké obrázky při nahrávání'
  493.76 +};
  493.77 \ No newline at end of file
   494.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   494.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.da.js	Mon Feb 22 08:02:39 2010 -0500
   494.3 @@ -0,0 +1,73 @@
   494.4 +/*
   494.5 +Script: Language.da.js
   494.6 +	MooTools FileManager - Language Strings in Danish
   494.7 +
   494.8 +Translation:
   494.9 +	Jan Ebsen
  494.10 +*/
  494.11 +
  494.12 +FileManager.Language.da = {
  494.13 +	more: 'Detaljer',
  494.14 +	width: 'Bredde:',
  494.15 +	height: 'Højde:',
  494.16 +	
  494.17 +	ok: 'Ok',
  494.18 +	open: 'Vælg fil',
  494.19 +	upload: 'Upload',
  494.20 +	create: 'Opret mappe',
  494.21 +	createdir: 'Angiv venligst mappe navn:',
  494.22 +	cancel: 'Anuller',
  494.23 +	
  494.24 +	information: 'Information',
  494.25 +	type: 'Type:',
  494.26 +	size: 'Størrelse:',
  494.27 +	dir: 'Sti:',
  494.28 +	modified: 'Sidst ændret:',
  494.29 +	preview: 'Miniature',
  494.30 +	close: 'Luk',
  494.31 +	destroy: 'Slet',
  494.32 +	destroyfile: 'Er du sikker på du vil slette denne fil?',
  494.33 +	
  494.34 +	rename: 'Omdøb',
  494.35 +	renamefile: 'Skriv nyt filnavn:',
  494.36 +	
  494.37 +	download: 'Download',
  494.38 +	nopreview: '<i>Ingen miniature tilgængelig</i>',
  494.39 +	
  494.40 +	title: 'Titel:',
  494.41 +	artist: 'Kunstner:',
  494.42 +	album: 'Album:',
  494.43 +	length: 'Længde:',
  494.44 +	bitrate: 'Bitrate:',
  494.45 +	
  494.46 +	deselect: 'Fravælg',
  494.47 +	
  494.48 +	nodestroy: 'Det er ikke muligt at slette filer på serveren.',
  494.49 +	
  494.50 +	'upload.disabled': 'Det er ikke muligt at uploade filer på serveren.',
  494.51 +	'upload.authenticated': 'Du har ikke rettigheder til at uploade filer.',
  494.52 +	'upload.path': 'Upload mappen findes ikke. Kontakt venligst sidens administrator.',
  494.53 +	'upload.exists': 'Upload mappen findes allerede. Kontakt venligst sidens administrator.',
  494.54 +	'upload.mime': 'Fil-typen er ikke tilladt.',
  494.55 +	'upload.extension': 'Filen er af en ukendt, eller ulovlig type.',
  494.56 +	'upload.size': 'Filen er for stor, upload venligst en mindre fil.',
  494.57 +	'upload.partial': 'Filen blev kun delvist uploaded, prøv venligst igen.',
  494.58 +	'upload.nofile': 'Der er ikke angivet nogen fil til upload.',
  494.59 +	'upload.default': 'Noget gik galt med fil-uploaderen.',
  494.60 +	
  494.61 +	/* FU */
  494.62 +	uploader: {
  494.63 +		unknown: 'Ukendt fejl',
  494.64 +		duplicate: 'Du kan ikke tilføje "<em>${name}</em>" (${size}), den er allerede tilføjet!',
  494.65 +		sizeLimitMin: 'Du kan ikke tilføje "<em>${name}</em>" (${size}), mindst tilladte filstørrelse er <strong>${size_min}</strong>!',
  494.66 +		sizeLimitMax: 'Du kan ikke tilføje "<em>${name}</em>" (${size}), højst tilladte filstørrelse er <strong>${size_max}</strong>!'
  494.67 +	},
  494.68 +	
  494.69 +	flash: {
  494.70 +		hidden: null,
  494.71 +		disabled: null,
  494.72 +		flash: 'For at uploade filer skal du installere <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'
  494.73 +	},
  494.74 +	
  494.75 +	resizeImages: 'Scaler store billeder ved upload'
  494.76 +};
  494.77 \ No newline at end of file
   495.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   495.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.de.js	Mon Feb 22 08:02:39 2010 -0500
   495.3 @@ -0,0 +1,72 @@
   495.4 +/*
   495.5 +Script: Language.de.js
   495.6 +	MooTools FileManager - Language Strings in German
   495.7 +
   495.8 +Translation:
   495.9 +	[Christoph Pojer](http://og5.net/christoph)
  495.10 +*/
  495.11 +
  495.12 +FileManager.Language.de = {
  495.13 +	more: 'Details',
  495.14 +	width: 'Breite:',
  495.15 +	height: 'Höhe:',
  495.16 +	
  495.17 +	ok: 'Ok',
  495.18 +	open: 'Datei wählen',
  495.19 +	upload: 'Datei hochladen',
  495.20 +	create: 'Ordner erstellen',
  495.21 +	createdir: 'Bitte gib einen Ordnernamen ein:',
  495.22 +	cancel: 'Abbrechen',
  495.23 +	
  495.24 +	information: 'Information',
  495.25 +	type: 'Typ:',
  495.26 +	size: 'Größe:',
  495.27 +	dir: 'Verzeichnis:',
  495.28 +	modified: 'Zuletzt bearbeitet:',
  495.29 +	preview: 'Vorschau',
  495.30 +	close: 'Schließen',
  495.31 +	destroy: 'Löschen',
  495.32 +	destroyfile: 'Bist du sicher, dass du diese Datei löschen möchtest?',
  495.33 +	
  495.34 +	rename: 'Umbenennen',
  495.35 +	renamefile: 'Gib einen neuen Dateinamen ein:',
  495.36 +	
  495.37 +	download: 'Download',
  495.38 +	nopreview: '<i>Keine Vorschau verfügbar</i>',
  495.39 +	
  495.40 +	title: 'Titel:',
  495.41 +	artist: 'Artist:',
  495.42 +	album: 'Album:',
  495.43 +	length: 'Länge:',
  495.44 +	bitrate: 'Bitrate:',
  495.45 +	
  495.46 +	deselect: 'Entfernen',
  495.47 +	
  495.48 +	nodestroy: 'Dateien löschen wurde auf diesem Server deaktiviert.',
  495.49 +	
  495.50 +	'upload.disabled': 'Der Datei-Upload wurde auf diesem Server deaktiviert.',
  495.51 +	'upload.authenticated': 'Upload fehlgeschlagen: Du bist nicht authentifiziert.',
  495.52 +	'upload.path': 'Der angegebene Upload-Ordner existiert nicht. Bitte kontaktiere den Administrator dieser Website.',
  495.53 +	'upload.exists': 'Der angegebene Upload-Speicherort existiert bereits. Bitte kontaktiere den Administrator dieser Website.',
  495.54 +	'upload.mime': 'Der angegebene Dateityp ist nicht erlaubt.',
  495.55 +	'upload.extension': 'Die Datei hat eine unbekannte oder unerlaubte Datei-Erweiterung.',
  495.56 +	'upload.size': 'Die Datei, die du hochgeladen hast, ist zu groß um sie auf diesem Server zu verarbeiten. Bitte lade eine kleinere Datei hoch.',
  495.57 +	'upload.partial': 'Die Datei wurde nur teilweise hochgeladen. Bitte lade sie erneut hoch.',
  495.58 +	'upload.nofile': 'Es wurde keine Datei hochgeladen.',
  495.59 +	'upload.default': 'Der Datei-Upload ist fehlgeschlagen.',
  495.60 +	
  495.61 +	/* FU */
  495.62 +	uploader: {
  495.63 +		unknown: 'Unbekannter Fehler',
  495.64 +		sizeLimitMin: 'Die Datei "<em>${name}</em>" (${size}), ist zu klein. Minimaldateigröße: <strong>${size_min}</strong>!',
  495.65 +		sizeLimitMax: 'Die Datei "<em>${name}</em>" (${size}), ist zu groß. Dateigrößen-Limit: <strong>${size_max}</strong>!'
  495.66 +	},
  495.67 +	
  495.68 +	flash: {
  495.69 +		hidden: 'Um den Uploader benutzen zu können, muss er im Browser freigegeben werden und die Seite muss neu geladen werden (Adblock).',
  495.70 +		disabled: 'Um den Uploader benutzen zu können, muss die geblockte Flash Datei freigegeben werden und die Seite muss neu geladen werden (Flashblock).',
  495.71 +		flash: 'Um Dateien hochzuladen muss <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a> installiert werden.'
  495.72 +	},
  495.73 +	
  495.74 +	resizeImages: 'Große Bilder bei Upload verkleinern'
  495.75 +};
  495.76 \ No newline at end of file
   496.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   496.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.en.js	Mon Feb 22 08:02:39 2010 -0500
   496.3 @@ -0,0 +1,72 @@
   496.4 +/*
   496.5 +Script: Language.en.js
   496.6 +	MooTools FileManager - Language Strings in English
   496.7 +
   496.8 +Translation:
   496.9 +	[Christoph Pojer](http://og5.net/christoph)
  496.10 +*/
  496.11 +
  496.12 +FileManager.Language.en = {
  496.13 +	more: 'Details',
  496.14 +	width: 'Width:',
  496.15 +	height: 'Height:',
  496.16 +	
  496.17 +	ok: 'Ok',
  496.18 +	open: 'Select file',
  496.19 +	upload: 'Upload',
  496.20 +	create: 'Create folder',
  496.21 +	createdir: 'Please specify a folder name:',
  496.22 +	cancel: 'Cancel',
  496.23 +	
  496.24 +	information: 'Information',
  496.25 +	type: 'Type:',
  496.26 +	size: 'Size:',
  496.27 +	dir: 'Path:',
  496.28 +	modified: 'Last modified:',
  496.29 +	preview: 'Preview',
  496.30 +	close: 'Close',
  496.31 +	destroy: 'Delete',
  496.32 +	destroyfile: 'Are you sure to delete this file?',
  496.33 +	
  496.34 +	rename: 'Rename',
  496.35 +	renamefile: 'Please enter a new file name:',
  496.36 +	
  496.37 +	download: 'Download',
  496.38 +	nopreview: '<i>No preview available</i>',
  496.39 +	
  496.40 +	title: 'Title:',
  496.41 +	artist: 'Artist:',
  496.42 +	album: 'Album:',
  496.43 +	length: 'Length:',
  496.44 +	bitrate: 'Bitrate:',
  496.45 +	
  496.46 +	deselect: 'Deselect',
  496.47 +	
  496.48 +	nodestroy: 'Deleting files has been disabled on this Server.',
  496.49 +	
  496.50 +	'upload.disabled': 'Uploading has been disabled on this Server.',
  496.51 +	'upload.authenticated': 'You are not authenticated to upload files.',
  496.52 +	'upload.path': 'The specified Upload-Folder does not exist. Please contact the administrator of this Website.',
  496.53 +	'upload.exists': 'The specified Upload-Location does already exist. Please contact the administrator of this Website.',
  496.54 +	'upload.mime': 'The specified file-type is not allowed.',
  496.55 +	'upload.extension': 'The uploaded file has an unknown or forbidden file extension.',
  496.56 +	'upload.size': 'The size of the file you uploaded is too big to be processed on this server. Please upload a smaller file.',
  496.57 +	'upload.partial': 'The file you uploaded was only partially uploaded, please upload the file again.',
  496.58 +	'upload.nofile': 'There was no file specified to be uploaded.',
  496.59 +	'upload.default': 'Something went wrong with the File-Upload.',
  496.60 +	
  496.61 +	/* FU */
  496.62 +	uploader: {
  496.63 +		unknown: 'Unknown Error',
  496.64 +		sizeLimitMin: 'You can not attach "<em>${name}</em>" (${size}), the file size minimum is <strong>${size_min}</strong>!',
  496.65 +		sizeLimitMax: 'You can not attach "<em>${name}</em>" (${size}), the file size limit is <strong>${size_max}</strong>!'
  496.66 +	},
  496.67 +	
  496.68 +	flash: {
  496.69 +		hidden: 'To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).',
  496.70 +		disabled: 'To enable the embedded uploader, enable the blocked Flash movie  and refresh (see Flashblock).',
  496.71 +		flash: 'In order to upload files you need to install <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'
  496.72 +	},
  496.73 +	
  496.74 +	resizeImages: 'Resize big images on upload'
  496.75 +};
  496.76 \ No newline at end of file
   497.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   497.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.es.js	Mon Feb 22 08:02:39 2010 -0500
   497.3 @@ -0,0 +1,73 @@
   497.4 +/*
   497.5 +Script: Language.es.js
   497.6 +	MooTools FileManager - Language Strings in Spanish
   497.7 +
   497.8 +Translation:
   497.9 +	[Sergio Rubio](http://rubiojr.netcorex.org)
  497.10 +*/
  497.11 +
  497.12 +FileManager.Language.es = {
  497.13 +	more: 'Detalles',
  497.14 +	width: 'Anchura:',
  497.15 +	height: 'Altura:',
  497.16 +	
  497.17 +	ok: 'Ok',
  497.18 +	open: 'Seleccionar Fichero',
  497.19 +	upload: 'Subir ficheros',
  497.20 +	create: 'Crear carpeta',
  497.21 +	createdir: 'Especifica el nombre de la carpeta:',
  497.22 +	cancel: 'Cancelar',
  497.23 +	
  497.24 +	information: 'Información',
  497.25 +	type: 'Tipo:',
  497.26 +	size: 'Tamaño:',
  497.27 +	dir: 'Ruta:',
  497.28 +	modified: 'Última modificación:',
  497.29 +	preview: 'Previsualización',
  497.30 +	close: 'Cerrar',
  497.31 +	destroy: 'Borrar',
  497.32 +	destroyfile: '¿Seguro que deseas borrar el fichero?',
  497.33 +	
  497.34 +	rename: 'Renombrar',
  497.35 +	renamefile: 'Especifica un nuevo nombre para el fichero:',
  497.36 +	
  497.37 +	download: 'Descargar',
  497.38 +	nopreview: '<i>No hay previsualizacion disponible</i>',
  497.39 +	
  497.40 +	title: 'Título:',
  497.41 +	artist: 'Artista:',
  497.42 +	album: 'Album:',
  497.43 +	length: 'Duración:',
  497.44 +	bitrate: 'Bitrate:',
  497.45 +	
  497.46 +	deselect: 'Desmarcar',
  497.47 +	
  497.48 +	nodestroy: 'El borrado de ficheros ha sido deshabilitado.',
  497.49 +	
  497.50 +	'upload.disabled': 'La carga de archivos ha sido deshabilitada.',
  497.51 +	'upload.authenticated': 'Necesitas autorización para subir ficheros.',
  497.52 +	'upload.path': 'La carpeta destino especificada no existe. Contacta con el administrador del sitio web.',
  497.53 +	'upload.exists': 'El la ruta destino ya existe. Por favor, contacta con el administrador del sitio web.',
  497.54 +	'upload.mime': 'No se permite subir el tipo de fichero especificado.',
  497.55 +	'upload.extension': 'El fichero subido tienen una extensión no permitida o desconocida.',
  497.56 +	'upload.size': 'El tamaño del fichero que intentas subir es demasiado grande para ser procesado por el servidor. Por favor, sube un fichero mas pequeño.',
  497.57 +	'upload.partial': 'El fichero se ha subido parcialmente, por favor, sube el fichero de nuevo.',
  497.58 +	'upload.nofile': 'No se especificó el fichero a subir.',
  497.59 +	'upload.default': 'Algo falló durante la carga del fichero.',
  497.60 +	
  497.61 +	/* FU */
  497.62 +	uploader: {
  497.63 +		unknown: 'Error desconocido',
  497.64 +		duplicate: 'No se puede subir "<em>${name}</em>" (${size}), ya ha sido añadido!',
  497.65 +		sizeLimitMin: 'No se puede subir "<em>${name}</em>" (${size}), el tamaño mínimo de fichero es <strong>${size_min}</strong>!',
  497.66 +		sizeLimitMax: 'No se puede subir "<em>${name}</em>" (${size}), el tamaño máximo de fichero es <strong>${size_max}</strong>!'
  497.67 +	},
  497.68 +	
  497.69 +	flash: {
  497.70 +		hidden: null,
  497.71 +		disabled: null,
  497.72 +		flash: 'Para poder subir ficheros necesitas instalar <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'
  497.73 +	},
  497.74 +	
  497.75 +	resizeImages: 'Redimensionar las imágenes grandes al subirlas'
  497.76 +};
   498.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   498.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.fi.js	Mon Feb 22 08:02:39 2010 -0500
   498.3 @@ -0,0 +1,73 @@
   498.4 +/*
   498.5 +Script: Language.fi.js
   498.6 +	MooTools FileManager - Language Strings in Finnish
   498.7 +
   498.8 +Translation:
   498.9 +	[Jabis Sevón](http://pumppumedia.com)
  498.10 +*/
  498.11 +
  498.12 +FileManager.Language.fi = {
  498.13 +	more: 'Lisätiedot',
  498.14 +	width: 'Leveys:',
  498.15 +	height: 'Korkeus:',
  498.16 +	
  498.17 +	ok: 'Ok',
  498.18 +	open: 'Valitse tiedosto',
  498.19 +	upload: 'Lähetä',
  498.20 +	create: 'Luo kansio',
  498.21 +	createdir: 'Kansion nimi:',
  498.22 +	cancel: 'Peruuta',
  498.23 +	
  498.24 +	information: 'Tiedot',
  498.25 +	type: 'Tyyppi:',
  498.26 +	size: 'Koko:',
  498.27 +	dir: 'Polku:',
  498.28 +	modified: 'Viimeksi muokattu:',
  498.29 +	preview: 'Esikatselu',
  498.30 +	close: 'Sulje',
  498.31 +	destroy: 'Poista',
  498.32 +	destroyfile: 'Haluatko varmasti poistaa tiedoston?',
  498.33 +	
  498.34 +	rename: 'Nimeä uudelleen',
  498.35 +	renamefile: 'Syötä tiedoston uusi nimi:',
  498.36 +	
  498.37 +	download: 'Lataa',
  498.38 +	nopreview: '<i>Esikatselua ei voida näyttää</i>',
  498.39 +	
  498.40 +	title: 'Kappaleen nimi:',
  498.41 +	artist: 'Artisti:',
  498.42 +	album: 'Albumi:',
  498.43 +	length: 'Pituus:',
  498.44 +	bitrate: 'Bitrate:',
  498.45 +	
  498.46 +	deselect: 'Poista valinta',
  498.47 +	
  498.48 +	nodestroy: 'Tiedostojen poisto otettu käytöstä.',
  498.49 +	
  498.50 +	'upload.disabled': 'Tiedostojen lähetys otettu käytöstä.',
  498.51 +	'upload.authenticated': 'Sinulla ei ole oikeuksia tiedostojen lähettämiseen.',
  498.52 +	'upload.path': 'Määritettyä kansiota ei löydy. Ole hyvä ja ota yhteyttä sivuston ylläpitäjään.',
  498.53 +	'upload.exists': 'Tiedosto on jo olemassa - siirto peruttu. Ole hyvä ja ota yhteyttä sivuston ylläpitäjään.',
  498.54 +	'upload.mime': 'Tiedostotyyppi ei ole sallittujen listalla - siirto peruttu.',
  498.55 +	'upload.extension': 'Tiedostopääte tuntematon, tai ei sallittujen listalla - siirto peruttu.',
  498.56 +	'upload.size': 'Tiedostokoko liian suuri palvelimelle. Ole hyvä ja siirrä pienempiä tiedostoja.',
  498.57 +	'upload.partial': 'Tiedonsiirto onnistui vain osittain - siirto epäonnistui. Ole hyvä ja siirrä tiedosto uudestaan',
  498.58 +	'upload.nofile': 'Tiedostoa ei määritetty.',
  498.59 +	'upload.default': 'Tiedonsiirto epäonnistui tunnistamattomasta syystä.',
  498.60 +	
  498.61 +	/* FU */
  498.62 +	uploader: {
  498.63 +		unknown: 'Tunnistamaton virhe',
  498.64 +		duplicate: 'Et voi lisätä seuraavaa tiedostoa: "<em>${name}</em>" (${size}), koska se on jo siirtolistalla!',
  498.65 +		sizeLimitMin: 'Et voi lisätä seuraavaa tiedostoa: "<em>${name}</em>" (${size}). Tiedostojen minimikoko on <strong>${size_min}</strong>!',
  498.66 +		sizeLimitMax: 'Et voi lisätä seuraavaa tiedostoa: "<em>${name}</em>" (${size}). Tiedostojen maksimikoko on <strong>${size_max}</strong>!'
  498.67 +	},
  498.68 +	
  498.69 +	flash: {
  498.70 +		hidden: null,
  498.71 +		disabled: null,
  498.72 +		flash: 'Käyttääksesi FileManageria, tarvitset Adobe Flash Playerin. <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Lataa tästä</a>.'
  498.73 +	},
  498.74 +	
  498.75 +	resizeImages: 'Pienennä liian suuret kuvat automaattisesti siirron yhteydessä'
  498.76 +};
   499.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   499.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.fr.js	Mon Feb 22 08:02:39 2010 -0500
   499.3 @@ -0,0 +1,73 @@
   499.4 +/*
   499.5 +Script: Language.fr.js
   499.6 +	MooTools FileManager - Language Strings in French
   499.7 +
   499.8 +Translation:
   499.9 +	[Samuel Sanchez](http://www.kromack.com)
  499.10 +*/
  499.11 +
  499.12 +FileManager.Language.fr = {
  499.13 +	more: 'Détails',
  499.14 +	width: 'Largeur :',
  499.15 +	height: 'Hauteur :',
  499.16 +	
  499.17 +	ok: 'Ok',
  499.18 +	open: 'Sélectionner un fichier',
  499.19 +	upload: 'Téléverser',
  499.20 +	create: 'Créer un dossier',
  499.21 +	createdir: 'Merci de spécifier un nom de dossier :',
  499.22 +	cancel: 'Annuler',
  499.23 +	
  499.24 +	information: 'Informations',
  499.25 +	type: 'Type :',
  499.26 +	size: 'Taille :',
  499.27 +	dir: 'Chemin :',
  499.28 +	modified: 'Modifié le :',
  499.29 +	preview: 'Aperçu',
  499.30 +	close: 'Fermer',
  499.31 +	destroy: 'Supprimer',
  499.32 +	destroyfile: 'Voulez-vous vraiment supprimer ce fichier ?',
  499.33 +	
  499.34 +	rename: 'Renommer',
  499.35 +	renamefile: 'Merci de spécifier un nouveau nom de fichier :',
  499.36 +	
  499.37 +	download: 'Télécharger',
  499.38 +	nopreview: '<i>Aucun aperçu disponible</i>',
  499.39 +	
  499.40 +	title: 'Titre :',
  499.41 +	artist: 'Artiste :',
  499.42 +	album: 'Album :',
  499.43 +	length: 'Durée :',
  499.44 +	bitrate: 'Débit :',
  499.45 +	
  499.46 +	deselect: 'Désélectionner',
  499.47 +	
  499.48 +	nodestroy: 'La suppression de fichier a été désactivée sur ce serveur.',
  499.49 +	
  499.50 +	'upload.disabled': 'Le téléversement de fichier a été désactivé sur ce serveur.',
  499.51 +	'upload.authenticated': 'Vous n\'êtes pas authentifié et ne pouvez pas téléverser de fichier.',
  499.52 +	'upload.path': 'Le répertoire de téléversement spécifié n\'existe pas. Merci de contacter l\'administrateur de ce site Internet.',
  499.53 +	'upload.exists': 'Le chemin de téléversement spécifié existe déjà. Merci de contacter l\'administrateur de ce site Internet.',
  499.54 +	'upload.mime': 'Le type de fichier spécifié n\'est pas autorisé.',
  499.55 +	'upload.extension': 'Le fichier téléversé a une extension inconnue ou interdite.',
  499.56 +	'upload.size': 'La taille de votre fichier est trop grande pour être téléversée sur ce serveur. Merci de sélectionner un fichier moins lourd.',
  499.57 +	'upload.partial': 'Le fichier a été partiellement téléversé, merci de recommencer l\'opération.',
  499.58 +	'upload.nofile': 'Aucun fichier n\'a été spécifié.',
  499.59 +	'upload.default': 'Une erreur s\'est produite.',
  499.60 +	
  499.61 +	/* FU */
  499.62 +	uploader: {
  499.63 +		unknown: 'Erreur inconnue',
  499.64 +		duplicate: 'Vous ne pouvez pas ajouter "<em>${name}</em>" (${size}), car l\'élément est déjà ajoutée !',
  499.65 +		sizeLimitMin: 'Vous ne pouvez pas ajouter "<em>${name}</em>" (${size}), la taille minimale des fichiers est de <strong>${size_min}</strong>!',
  499.66 +		sizeLimitMax: 'Vous ne pouvez pas ajouter "<em>${name}</em>" (${size}), la taille maximale des fichiers est de <strong>${size_max}</strong>!'
  499.67 +	},
  499.68 +	
  499.69 +	flash: {
  499.70 +		hidden: null,
  499.71 +		disabled: null,
  499.72 +		flash: 'Dans le but de téléverser des fichiers, vous devez installer <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a>.'
  499.73 +	},
  499.74 +	
  499.75 +	resizeImages: 'Redimensionner les images pendant le téléversement'
  499.76 +};
  499.77 \ No newline at end of file
   500.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   500.2 +++ b/e2gallerypro/e2upload/Source/Language/Language.se.js	Mon Feb 22 08:02:39 2010 -0500
   500.3 @@ -0,0 +1,73 @@
   500.4 +/*
   500.5 +Script: Language.se.js
   500.6 +	MooTools FileManager - Language Strings in Swedish
   500.7 +
   500.8 +Translation:
   500.9 +	[Marcus *xintron* Carlsson](http://xintron.se)
  500.10 +*/
  500.11 +
  500.12 +FileManager.Language.se = {
  500.13 +	more: 'Detaljer',
  500.14 +	width: 'Bredd:',
  500.15 +	height: 'Höjd:',
  500.16 +	
  500.17 +	ok: 'Ok',
  500.18 +	open: 'Välj fil',
  500.19 +	upload: 'Ladda upp',
  500.20 +	create: 'Skapa mapp',
  500.21 +	createdir: 'Vänligen ange ett mapp-namn:',
  500.22 +	cancel: 'Avbryt',
  500.23 +	
  500.24 +	information: 'Information',
  500.25 +	type: 'Typ:',
  500.26 +	size: 'Storlek:',
  500.27 +	dir: 'Sökväg:',
  500.28 +	modified: 'Senast ändad:',
  500.29 +	preview: 'Förhandsgranska',
  500.30 +	close: 'Stäng',
  500.31 +	destroy: 'Ta bort',
  500.32 +	destroyfile: 'Är du säker på att du vill ta bort filen?',
  500.33 +	
  500.34 +	rename: 'Döp om',
  500.35 +	renamefile: 'Vänligen ange ett nytt filnamn:',
  500.36 +	
  500.37 +	download: 'Ladda ner',
  500.38 +	nopreview: '<i>Ingen förhandsgranskning tillgänglig</i>',
  500.39 +	
  500.40 +	title: 'Titel:',
  500.41 +	artist: 'Artist:',
  500.42 +	album: 'Album:',
  500.43 +	length: 'Längd:',
  500.44 +	bitrate: 'Bitrate:',
  500.45 +	
  500.46 +	deselect: 'Avmarkera',
  500.47 +	
  500.48 +	nodestroy: 'Funktionen ta bort filer är avstängd på denna server.',
  500.49 +	
  500.50 +	'upload.disabled': 'Uppladdning är avstängt på denna server.',
  500.51 +	'upload.authenticated': 'Du har inte behörighet att ladda upp filer.',
  500.52 +	'upload.path': 'Den angivna uppladdnings-mappen existerar inte. Vänligen kontakta serveradministratören.',
  500.53 +	'upload.exists': 'Den angivna uppladdnings-mappen existerar redan. Vänligen kontakta serveradministratören.',
  500.54 +	'upload.mime': 'Denna filtyp accepteras inte på denna server.',
  500.55 +	'upload.extension': 'Den uppladdade filen har en okänd eller förbjuden filändelse.',
  500.56 +	'upload.size': 'Filen är för stor för denna server. Vänligen ladda upp en mindre fil.',
  500.57 +	'upload.partial': 'Ett fel uppstod och hela filen kunde inte laddas upp. Vänligen försök igen.',
  500.58 +	'upload.nofile': 'Du måste välja en fil att ladda upp.',
  500.59 +	'upload.default': 'Ett fel inträffade under uppladdningen.',
  500.60 +	
  500.61 +	/* FU */
  500.62 +	uploader: {
  500.63 +		unknown: 'Okänt fel',
  500.64 +		duplicate: 'Du kan inte ladda upp "<em>${name}</em>" (${size}), filen existerar redan!',
  500.65 +		sizeLimitMin: 'Du kan inte ladda upp "<em>${name}</em>" (${size}), minsta storlek som accepteras är <strong>${size_min}</strong>!',
  500.66 +		sizeLimitMax: 'Du kan inte ladda upp "<em>${name}</em>" (${size}), filens storlek får inte överstiga <strong>${size_max}</strong>!'
  500.67 +	},
  500.68 +	
  500.69 +	flash: {
  500.70 +		hidden: null,
  500.71 +		disabled: null,
  500.72 +		flash: 'För att kunna ladda upp filer behöver du ha <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe Flash</a> installerat.'
  500.73 +	},
  500.74 +	
  500.75 +	resizeImages: 'Ändra storleken på bilden under uppladdningen'
  500.76 +};
   501.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   501.2 +++ b/e2gallerypro/e2upload/Source/Uploader.js	Mon Feb 22 08:02:39 2010 -0500
   501.3 @@ -0,0 +1,235 @@
   501.4 +/*
   501.5 +Script: Uploader.js
   501.6 +	MooTools FileManager - Implements Upload functionality into the FileManager based on [FancyUpload](http://digitarald.de)
   501.7 +
   501.8 +License:
   501.9 +	MIT-style license.
  501.10 +
  501.11 +Copyright:
  501.12 +	Copyright (c) 2009 [Christoph Pojer](http://og5.net/christoph).
  501.13 +
  501.14 +Dependencies:
  501.15 +	- FileManager.js
  501.16 +
  501.17 +Options:
  501.18 +	- upload: (boolean, defaults to *true*) 
  501.19 +	- uploadAuthData: (object) Data to be send with the GET-Request of an Upload as Flash ignores authenticated clients
  501.20 +	- resizeImages: (boolean, defaults to *true*) Whether to show the option to resize big images or not
  501.21 +*/
  501.22 +
  501.23 +FileManager.implement({
  501.24 +	
  501.25 +	options: {
  501.26 +		resizeImages: false,
  501.27 +		upload: true,
  501.28 +		uploadAuthData: {}
  501.29 +	},
  501.30 +	
  501.31 +	hooks: {
  501.32 +		show: {
  501.33 +			upload: function(){
  501.34 +				this.startUpload();
  501.35 +			}
  501.36 +		},
  501.37 +		
  501.38 +		cleanup: {
  501.39 +			upload: function(){
  501.40 +				if(!this.options.upload || !this.upload) return;
  501.41 +				
  501.42 +				if(this.upload.uploader) this.upload.uploader.set('opacity', 0).dispose();
  501.43 +			}
  501.44 +		}
  501.45 +	},
  501.46 +	
  501.47 +	onDialogOpen: function(){
  501.48 +		if(this.swf && this.swf.box) this.swf.box.setStyle('visibility', 'hidden');
  501.49 +	},
  501.50 +	
  501.51 +	onDialogClose: function(){
  501.52 +		if(this.swf && this.swf.box) this.swf.box.setStyle('visibility', 'visible');
  501.53 +	},
  501.54 +	
  501.55 +	startUpload: function(){
  501.56 +		if(!this.options.upload || this.swf) return;
  501.57 +		
  501.58 +		var self = this;
  501.59 +		this.upload = {
  501.60 +			button: this.addMenuButton('upload').addEvents({
  501.61 +				click: function(){
  501.62 +					return false;
  501.63 +				},
  501.64 +				mouseenter: function(){
  501.65 +					this.addClass('hover');
  501.66 +				},
  501.67 +				mouseleave: function(){
  501.68 +					this.removeClass('hover');
  501.69 +					this.blur();
  501.70 +				},
  501.71 +				mousedown: function(){
  501.72 +					this.focus();
  501.73 +				}
  501.74 +			}),
  501.75 +			list: new Element('ul', {'class': 'filemanager-uploader-list'}),
  501.76 +			uploader: new Element('div', {opacity: 0}).adopt(
  501.77 +				new Element('h2', {text: this.language.upload}),
  501.78 +				new Element('div', {'class': 'filemanager-uploader'})
  501.79 +			)
  501.80 +		};
  501.81 +		this.upload.uploader.getElement('div').adopt(this.upload.list);
  501.82 +		this.closeIcon.appearOn(this.upload.button, 0.8);
  501.83 +		
  501.84 +		if(this.options.resizeImages){
  501.85 +			var resizer = new Element('div', {'class': 'checkbox'}),
  501.86 +				check = (function(){ this.toggleClass('checkboxChecked'); }).bind(resizer);
  501.87 +			check();
  501.88 +			this.upload.label = new Element('label').adopt(
  501.89 +				resizer, new Element('span', {text: this.language.resizeImages})
  501.90 +			).addEvent('click', check).inject(this.menu);
  501.91 +		}
  501.92 +		
  501.93 +		var File = new Class({
  501.94 +
  501.95 +			Extends: Swiff.Uploader.File,
  501.96 +			
  501.97 +			initialize: function(base, data){
  501.98 +				this.parent(base, data);
  501.99 +				this.setOptions({
 501.100 +					url: self.options.url+'?'+Hash.toQueryString($merge({}, self.options.uploadAuthData, {
 501.101 +						event: 'upload',
 501.102 +						directory: self.normalize(self.Directory),
 501.103 +						resize: self.options.resizeImages && resizer.hasClass('checkboxChecked') ? 1 : 0
 501.104 +					}))
 501.105 +				});
 501.106 +			},
 501.107 +			
 501.108 +			render: function(){
 501.109 +				if(this.invalid){
 501.110 +					var message = self.language.uploader.unknown, sub = {
 501.111 +						name: this.name,
 501.112 +						size: Swiff.Uploader.formatUnit(this.size, 'b')
 501.113 +					};
 501.114 +					
 501.115 +					if(self.language.uploader[this.validationError])
 501.116 +						message = self.language.uploader[this.validationError];
 501.117 +					
 501.118 +					if(this.validationError=='sizeLimitMin')
 501.119 +							sub.size_min = Swiff.Uploader.formatUnit(this.base.options.fileSizeMin, 'b');
 501.120 +					else if(this.validationError=='sizeLimitMax')
 501.121 +							sub.size_max = Swiff.Uploader.formatUnit(this.base.options.fileSizeMax, 'b');
 501.122 +					
 501.123 +					new Dialog(new Element('div', {html: message.substitute(sub, /\\?\$\{([^{}]+)\}/g)}) , {language: {confirm: self.language.ok}, buttons: ['confirm']});
 501.124 +					return this;
 501.125 +				}
 501.126 +				
 501.127 +				this.addEvents({
 501.128 +					open: this.onOpen,
 501.129 +					remove: this.onRemove,
 501.130 +					requeue: this.onRequeue,
 501.131 +					progress: this.onProgress,
 501.132 +					stop: this.onStop,
 501.133 +					complete: this.onComplete
 501.134 +				});
 501.135 +				
 501.136 +				this.ui = {};
 501.137 +				this.ui.icon = new Asset.image(self.options.assetBasePath+'Icons/'+this.extension+'.png', {
 501.138 +					onerror: function(){ new Asset.image(self.options.assetBasePath+'Icons/default.png').replaces(this); }
 501.139 +				});
 501.140 +				this.ui.element = new Element('li', {'class': 'file', id: 'file-' + this.id});
 501.141 +				this.ui.title = new Element('span', {'class': 'file-title', text: this.name});
 501.142 +				this.ui.size = new Element('span', {'class': 'file-size', text: Swiff.Uploader.formatUnit(this.size, 'b')});
 501.143 +				
 501.144 +				var tips, file = this;
 501.145 +				this.ui.cancel = new Asset.image(self.options.assetBasePath+'cancel.png', {'class': 'file-cancel', title: self.language.cancel}).addEvent('click', function(){
 501.146 +					file.remove();
 501.147 +					tips.hide();
 501.148 +					tips.detach(this);
 501.149 +				});
 501.150 +				tips = new FileManager.Tips(this.ui.cancel);
 501.151 +				
 501.152 +				var progress = new Element('img', {'class': 'file-progress', src: self.options.assetBasePath+'bar.gif'});
 501.153 +
 501.154 +				this.ui.element.adopt(
 501.155 +					this.ui.cancel,
 501.156 +					progress,
 501.157 +					this.ui.icon,
 501.158 +					this.ui.title,
 501.159 +					this.ui.size
 501.160 +				).inject(self.upload.list).highlight();
 501.161 +				
 501.162 +				this.ui.progress = new Fx.ProgressBar(progress).set(0);
 501.163 +							
 501.164 +				this.base.reposition();
 501.165 +
 501.166 +				return this.parent();
 501.167 +			},
 501.168 +
 501.169 +			onOpen: function(){
 501.170 +				this.ui.element.addClass('file-running');
 501.171 +			},
 501.172 +
 501.173 +			onRemove: function(){
 501.174 +				this.ui = this.ui.element.destroy();
 501.175 +			},
 501.176 +
 501.177 +			onProgress: function(){
 501.178 +				this.ui.progress.start(this.progress.percentLoaded);
 501.179 +			},
 501.180 +
 501.181 +			onStop: function(){
 501.182 +				this.remove();
 501.183 +			},
 501.184 +
 501.185 +			onComplete: function(){
 501.186 +				this.ui.progress = this.ui.progress.cancel().element.destroy();
 501.187 +				this.ui.cancel = this.ui.cancel.destroy();
 501.188 +				
 501.189 +				var response = JSON.decode(this.response.text);
 501.190 +				if(!response.status)
 501.191 +					new Dialog((''+response.error).substitute(self.language, /\\?\$\{([^{}]+)\}/g) , {language: {confirm: self.language.ok}, buttons: ['confirm']});
 501.192 +				
 501.193 +				this.ui.element.set('tween', {duration: 2000}).highlight(response.status ? '#e6efc2' : '#f0c2c2');
 501.194 +				(function(){
 501.195 +					this.ui.element.setStyle('overflow', 'hidden').morph({
 501.196 +						opacity: 0,
 501.197 +						height: 0
 501.198 +					}).get('morph').chain(function(){
 501.199 +						this.element.destroy();
 501.200 +						if(!self.upload.list.getElements('li').length)
 501.201 +							self.upload.uploader.fade(0).get('tween').chain(function(){
 501.202 +								self.fillInfo();
 501.203 +							});
 501.204 +					});
 501.205 +				}).delay(5000, this);
 501.206 +			}
 501.207 +
 501.208 +		});
 501.209 +
 501.210 +		this.swf = new Swiff.Uploader({
 501.211 +			id: 'SwiffFileManagerUpload',
 501.212 +			path: this.options.assetBasePath+'Swiff.Uploader.swf',
 501.213 +			queued: false,
 501.214 +			target: this.upload.button,
 501.215 +			allowDuplicates: true,
 501.216 +			instantStart: true,
 501.217 +			fileClass: File,
 501.218 +			fileSizeMax: 25 * 1024 * 1024,
 501.219 +			onBrowse: function(){},
 501.220 +			onCancel: function(){},
 501.221 +			zIndex: this.SwiffZIndex || 9999,
 501.222 +			onSelectSuccess: function(){
 501.223 +				self.fillInfo();
 501.224 +				self.info.getElement('h2.filemanager-headline').setStyle('display', 'none');
 501.225 +				self.preview.adopt(self.upload.uploader);
 501.226 +				self.upload.uploader.fade(1);
 501.227 +			},
 501.228 +			onComplete: function(){
 501.229 +				self.load(self.Directory, true);
 501.230 +			},
 501.231 +			onFail: function(error){
 501.232 +				$$(self.upload.button, self.upload.label).dispose();
 501.233 +				new Dialog(new Element('div', {html: self.language.flash[error] || self.language.flash.flash}), {language: {confirm: self.language.ok}, buttons: ['confirm']});
 501.234 +			}
 501.235 +		});
 501.236 +	}
 501.237 +	
 501.238 +});
 501.239 \ No newline at end of file
   502.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   502.2 +++ b/e2gallerypro/e2upload/Source/Uploader/Fx.ProgressBar.js	Mon Feb 22 08:02:39 2010 -0500
   502.3 @@ -0,0 +1,71 @@
   502.4 +/**
   502.5 + * Fx.ProgressBar
   502.6 + *
   502.7 + * @version		1.1
   502.8 + *
   502.9 + * @license		MIT License
  502.10 + *
  502.11 + * @author		Harald Kirschner <mail [at] digitarald [dot] de>
  502.12 + * @copyright	Authors
  502.13 + */
  502.14 +
  502.15 +Fx.ProgressBar = new Class({
  502.16 +
  502.17 +	Extends: Fx,
  502.18 +
  502.19 +	options: {
  502.20 +		text: null,
  502.21 +		url: null,
  502.22 +		transition: Fx.Transitions.Circ.easeOut,
  502.23 +		fit: true,
  502.24 +		link: 'cancel'
  502.25 +	},
  502.26 +
  502.27 +	initialize: function(element, options) {
  502.28 +		this.element = $(element);
  502.29 +		this.parent(options);
  502.30 +				
  502.31 +		var url = this.options.url;
  502.32 +		if (url) {
  502.33 +			this.element.setStyles({
  502.34 +				'background-image': 'url(' + url + ')',
  502.35 +				'background-repeat': 'no-repeat'
  502.36 +			});
  502.37 +		}
  502.38 +		
  502.39 +		if (this.options.fit) {
  502.40 +			url = url || this.element.getStyle('background-image').replace(/^url\(["']?|["']?\)$/g, '');
  502.41 +			if (url) {
  502.42 +				var fill = new Image();
  502.43 +				fill.onload = function() {
  502.44 +					this.fill = fill.width;
  502.45 +					fill = fill.onload = null;
  502.46 +					this.set(this.now || 0);
  502.47 +				}.bind(this);
  502.48 +				fill.src = url;
  502.49 +				if (!this.fill && fill.width) fill.onload();
  502.50 +			}
  502.51 +		} else {
  502.52 +			this.set(0);
  502.53 +		}
  502.54 +	},
  502.55 +
  502.56 +	start: function(to, total) {
  502.57 +		return this.parent(this.now, (arguments.length == 1) ? to.limit(0, 100) : to / total * 100);
  502.58 +	},
  502.59 +
  502.60 +	set: function(to) {
  502.61 +		this.now = to;
  502.62 +		var css = (this.fill)
  502.63 +			? (((this.fill / -2) + (to / 100) * (this.element.width || 1) || 0).round() + 'px')
  502.64 +			: ((100 - to) + '%');
  502.65 +		
  502.66 +		this.element.setStyle('backgroundPosition', css + ' 0px').title = Math.round(to) + '%';
  502.67 +		
  502.68 +		var text = $(this.options.text);
  502.69 +		if (text) text.set('text', Math.round(to) + '%');
  502.70 +		
  502.71 +		return this;
  502.72 +	}
  502.73 +
  502.74 +});
  502.75 \ No newline at end of file
   503.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   503.2 +++ b/e2gallerypro/e2upload/Source/Uploader/Swiff.Uploader.js	Mon Feb 22 08:02:39 2010 -0500
   503.3 @@ -0,0 +1,476 @@
   503.4 +/**
   503.5 + * Swiff.Uploader - Flash FileReference Control
   503.6 + *
   503.7 + * @version		3.0 rc1
   503.8 + *
   503.9 + * @license		MIT License
  503.10 + *
  503.11 + * @author		Harald Kirschner <mail [at] digitarald [dot] de>
  503.12 + * @copyright	Authors
  503.13 + */
  503.14 +
  503.15 +Swiff.Uploader = new Class({
  503.16 +
  503.17 +	Extends: Swiff,
  503.18 +
  503.19 +	Implements: Events,
  503.20 +
  503.21 +	options: {
  503.22 +		path: 'Swiff.Uploader.swf',
  503.23 +		
  503.24 +		target: null,
  503.25 +		zIndex: 9999,
  503.26 +		
  503.27 +		height: 30,
  503.28 +		width: 100,
  503.29 +		callBacks: null,
  503.30 +		params: {
  503.31 +			wMode: 'opaque',
  503.32 +			menu: 'false',
  503.33 +			allowScriptAccess: 'always'
  503.34 +		},
  503.35 +
  503.36 +		typeFilter: null,
  503.37 +		multiple: true,
  503.38 +		queued: true,
  503.39 +		verbose: false,
  503.40 +
  503.41 +		url: null,
  503.42 +		method: null,
  503.43 +		data: null,
  503.44 +		mergeData: true,
  503.45 +		fieldName: null,
  503.46 +
  503.47 +		fileSizeMin: 1,
  503.48 +		fileSizeMax: null, // Official limit is 100 MB for FileReference!
  503.49 +		allowDuplicates: false,
  503.50 +
  503.51 +		buttonImage: null,
  503.52 +		
  503.53 +		fileListMax: 0,
  503.54 +		fileListSizeMax: 0,
  503.55 +
  503.56 +		instantStart: false,
  503.57 +		appendCookieData: false,
  503.58 +		
  503.59 +		fileClass: null
  503.60 +		/*
  503.61 +		onLoad: $empty,
  503.62 +		onFail: $empty,
  503.63 +		onStart: $empty,
  503.64 +		onQueue: $empty,
  503.65 +		onComplete: $empty,
  503.66 +		onBrowse: $empty,
  503.67 +		onDisabledBrowse: $empty,
  503.68 +		onCancel: $empty,
  503.69 +		onSelect: $empty,
  503.70 +		onSelectSuccess: $empty,
  503.71 +		onSelectFail: $empty,
  503.72 +		
  503.73 +		onButtonEnter: $empty,
  503.74 +		onButtonLeave: $empty,
  503.75 +		onButtonDown: $empty,
  503.76 +		onButtonDisable: $empty,
  503.77 +		
  503.78 +		onFileStart: $empty,
  503.79 +		onFileStop: $empty,
  503.80 +		onFileRequeue: $empty,
  503.81 +		onFileOpen: $empty,
  503.82 +		onFileProgress: $empty,
  503.83 +		onFileComplete: $empty,
  503.84 +		onFileRemove: $empty
  503.85 +		*/
  503.86 +	},
  503.87 +
  503.88 +	initialize: function(options) {
  503.89 +		// protected events to control the class, added
  503.90 +		// before setting options (which adds own events)
  503.91 +		this.addEvent('load', this.initializeSwiff, true)
  503.92 +			.addEvent('select', this.processFiles, true)
  503.93 +			.addEvent('complete', this.update, true)
  503.94 +			.addEvent('fileRemove', function(file) {
  503.95 +				this.fileList.erase(file);
  503.96 +			}.bind(this), true);
  503.97 +
  503.98 +		this.setOptions(options);
  503.99 +
 503.100 +		// callbacks are no longer in the options, every callback
 503.101 +		// is fired as event, this is just compat
 503.102 +		if (this.options.callBacks) {
 503.103 +			Hash.each(this.options.callBacks, function(fn, name) {
 503.104 +				this.addEvent(name, fn);
 503.105 +			}, this);
 503.106 +		}
 503.107 +
 503.108 +		this.options.callBacks = {
 503.109 +			fireCallback: this.fireCallback.bind(this)
 503.110 +		};
 503.111 +
 503.112 +		var path = this.options.path;
 503.113 +		if (!path.contains('?')) path += '?noCache=' + $time(); // cache in IE
 503.114 +
 503.115 +		// container options for Swiff class
 503.116 +		this.options.container = this.box = new Element('span', {'class': 'swiff-uploader-box'}).inject($(this.options.container) || document.body);
 503.117 +
 503.118 +		// target 
 503.119 +		this.target = $(this.options.target);
 503.120 +		if (this.target) {
 503.121 +			var scroll = window.getScroll();
 503.122 +			this.box.setStyles({
 503.123 +				position: 'absolute',
 503.124 +				visibility: 'visible',
 503.125 +				zIndex: this.options.zIndex,
 503.126 +				overflow: 'hidden',
 503.127 +				height: 1, width: 1,
 503.128 +				top: scroll.y, left: scroll.x
 503.129 +			});
 503.130 +			
 503.131 +			// we force wMode to transparent for the overlay effect
 503.132 +			this.parent(path, {
 503.133 +				params: {
 503.134 +					wMode: 'transparent'
 503.135 +				},
 503.136 +				height: '100%',
 503.137 +				width: '100%'
 503.138 +			});
 503.139 +			
 503.140 +			this.target.addEvent('mouseenter', this.reposition.bind(this, []));
 503.141 +			
 503.142 +			// button interactions, relayed to to the target
 503.143 +			this.addEvents({
 503.144 +				buttonEnter: this.targetRelay.bind(this, ['mouseenter']),
 503.145 +				buttonLeave: this.targetRelay.bind(this, ['mouseleave']),
 503.146 +				buttonDown: this.targetRelay.bind(this, ['mousedown']),
 503.147 +				buttonDisable: this.targetRelay.bind(this, ['disable'])
 503.148 +			});
 503.149 +			
 503.150 +			this.reposition();
 503.151 +			window.addEvent('resize', this.reposition.bind(this, []));
 503.152 +		} else {
 503.153 +			this.parent(path);
 503.154 +		}
 503.155 +
 503.156 +		this.inject(this.box);
 503.157 +
 503.158 +		this.fileList = [];
 503.159 +		
 503.160 +		this.size = this.uploading = this.bytesLoaded = this.percentLoaded = 0;
 503.161 +		
 503.162 +		if (Browser.Plugins.Flash.version < 9) {
 503.163 +			this.fireEvent('fail', ['flash']);
 503.164 +		} else {
 503.165 +			this.verifyLoad.delay(500, this);
 503.166 +		}
 503.167 +	},
 503.168 +	
 503.169 +	verifyLoad: function() {
 503.170 +		if (this.loaded) return;
 503.171 +		if (!this.object.parentNode) {
 503.172 +			this.fireEvent('fail', ['disabled']);
 503.173 +		} else if (this.object.style.display == 'none') {
 503.174 +			this.fireEvent('fail', ['hidden']);
 503.175 +		} else if (!this.object.offsetWidth) {
 503.176 +			this.fireEvent('fail', ['empty']);
 503.177 +		}
 503.178 +	},
 503.179 +
 503.180 +	fireCallback: function(name, args) {
 503.181 +		// file* callbacks are relayed to the specific file
 503.182 +		if (name.substr(0, 4) == 'file') {
 503.183 +			// updated queue data is the second argument
 503.184 +			if (args.length > 1) this.update(args[1]);
 503.185 +			var data = args[0];
 503.186 +			
 503.187 +			var file = this.findFile(data.id);
 503.188 +			this.fireEvent(name, file || data, 5);
 503.189 +			if (file) {
 503.190 +				var fire = name.replace(/^file([A-Z])/, function($0, $1) {
 503.191 +					return $1.toLowerCase();
 503.192 +				});
 503.193 +				file.update(data).fireEvent(fire, [data], 10);
 503.194 +			}
 503.195 +		} else {
 503.196 +			this.fireEvent(name, args, 5);
 503.197 +		}
 503.198 +	},
 503.199 +
 503.200 +	update: function(data) {
 503.201 +		// the data is saved right to the instance 
 503.202 +		$extend(this, data);
 503.203 +		this.fireEvent('queue', [this], 10);
 503.204 +		return this;
 503.205 +	},
 503.206 +
 503.207 +	findFile: function(id) {
 503.208 +		for (var i = 0; i < this.fileList.length; i++) {
 503.209 +			if (this.fileList[i].id == id) return this.fileList[i];
 503.210 +		}
 503.211 +		return null;
 503.212 +	},
 503.213 +
 503.214 +	initializeSwiff: function() {
 503.215 +		// extracted options for the swf 
 503.216 +		this.remote('initialize', {
 503.217 +			width: this.options.width,
 503.218 +			height: this.options.height,
 503.219 +			typeFilter: this.options.typeFilter,
 503.220 +			multiple: this.options.multiple,
 503.221 +			queued: this.options.queued,
 503.222 +			url: this.options.url,
 503.223 +			method: this.options.method,
 503.224 +			data: this.options.data,
 503.225 +			mergeData: this.options.mergeData,
 503.226 +			fieldName: this.options.fieldName,
 503.227 +			verbose: this.options.verbose,
 503.228 +			fileSizeMin: this.options.fileSizeMin,
 503.229 +			fileSizeMax: this.options.fileSizeMax,
 503.230 +			allowDuplicates: this.options.allowDuplicates,
 503.231 +			buttonImage: this.options.buttonImage
 503.232 +		});
 503.233 +
 503.234 +		this.loaded = true;
 503.235 +
 503.236 +		this.appendCookieData();
 503.237 +	},
 503.238 +	
 503.239 +	targetRelay: function(name) {
 503.240 +		if (this.target) this.target.fireEvent(name);
 503.241 +	},
 503.242 +
 503.243 +	reposition: function(coords) {
 503.244 +		// update coordinates, manual or automatically
 503.245 +		coords = coords || (this.target && this.target.offsetHeight)
 503.246 +			? this.target.getCoordinates(this.box.getOffsetParent())
 503.247 +			: {top: window.getScrollTop(), left: 0, width: 40, height: 40}
 503.248 +		this.box.setStyles(coords);
 503.249 +		this.fireEvent('reposition', [coords, this.box, this.target]);
 503.250 +	},
 503.251 +
 503.252 +	setOptions: function(options) {
 503.253 +		if (options) {
 503.254 +			if (options.url) options.url = Swiff.Uploader.qualifyPath(options.url);
 503.255 +			if (options.buttonImage) options.buttonImage = Swiff.Uploader.qualifyPath(options.buttonImage);
 503.256 +			this.parent(options);
 503.257 +			if (this.loaded) this.remote('setOptions', options);
 503.258 +		}
 503.259 +		return this;
 503.260 +	},
 503.261 +
 503.262 +	setEnabled: function(status) {
 503.263 +		this.remote('setEnabled', status);
 503.264 +	},
 503.265 +
 503.266 +	start: function() {
 503.267 +		this.remote('start');
 503.268 +	},
 503.269 +
 503.270 +	stop: function() {
 503.271 +		this.remote('stop');
 503.272 +	},
 503.273 +
 503.274 +	remove: function() {
 503.275 +		this.remote('remove');
 503.276 +	},
 503.277 +
 503.278 +	fileStart: function(file) {
 503.279 +		this.remote('fileStart', file.id);
 503.280 +	},
 503.281 +
 503.282 +	fileStop: function(file) {
 503.283 +		this.remote('fileStop', file.id);
 503.284 +	},
 503.285 +
 503.286 +	fileRemove: function(file) {
 503.287 +		this.remote('fileRemove', file.id);
 503.288 +	},
 503.289 +
 503.290 +	fileRequeue: function(file) {
 503.291 +		this.remote('fileRequeue', file.id);
 503.292 +	},
 503.293 +
 503.294 +	appendCookieData: function() {
 503.295 +		var append = this.options.appendCookieData;
 503.296 +		if (!append) return;
 503.297 +		
 503.298 +		var hash = {};
 503.299 +		document.cookie.split(/;\s*/).each(function(cookie) {
 503.300 +			cookie = cookie.split('=');
 503.301 +			if (cookie.length == 2) {
 503.302 +				hash[decodeURIComponent(cookie[0])] = decodeURIComponent(cookie[1]);
 503.303 +			}
 503.304 +		});
 503.305 +
 503.306 +		var data = this.options.data || {};
 503.307 +		if ($type(append) == 'string') data[append] = hash;
 503.308 +		else $extend(data, hash);
 503.309 +
 503.310 +		this.setOptions({data: data});
 503.311 +	},
 503.312 +
 503.313 +	processFiles: function(successraw, failraw, queue) {
 503.314 +		var cls = this.options.fileClass || Swiff.Uploader.File;
 503.315 +
 503.316 +		var fail = [], success = [];
 503.317 +
 503.318 +		if (successraw) {
 503.319 +			successraw.each(function(data) {
 503.320 +				var ret = new cls(this, data);
 503.321 +				if (!ret.validate()) {
 503.322 +					ret.remove.delay(10, ret);
 503.323 +					fail.push(ret);
 503.324 +				} else {
 503.325 +					this.size += data.size;
 503.326 +					this.fileList.push(ret);
 503.327 +					success.push(ret);
 503.328 +					ret.render();
 503.329 +				}
 503.330 +			}, this);
 503.331 +
 503.332 +			this.fireEvent('selectSuccess', [success], 10);
 503.333 +		}
 503.334 +
 503.335 +		if (failraw || fail.length) {
 503.336 +			fail.extend((failraw) ? failraw.map(function(data) {
 503.337 +				return new cls(this, data);
 503.338 +			}, this) : []).each(function(file) {
 503.339 +				file.invalidate().render();
 503.340 +			});
 503.341 +
 503.342 +			this.fireEvent('selectFail', [fail], 10);
 503.343 +		}
 503.344 +
 503.345 +		this.update(queue);
 503.346 +
 503.347 +		if (this.options.instantStart && success.length) this.start();
 503.348 +	}
 503.349 +
 503.350 +});
 503.351 +
 503.352 +$extend(Swiff.Uploader, {
 503.353 +
 503.354 +	STATUS_QUEUED: 0,
 503.355 +	STATUS_RUNNING: 1,
 503.356 +	STATUS_ERROR: 2,
 503.357 +	STATUS_COMPLETE: 3,
 503.358 +	STATUS_STOPPED: 4,
 503.359 +
 503.360 +	log: function() {
 503.361 +		if (window.console && console.info) console.info.apply(console, arguments);
 503.362 +	},
 503.363 +
 503.364 +	unitLabels: {
 503.365 +		b: [{min: 1, unit: 'B'}, {min: 1024, unit: 'kB'}, {min: 1048576, unit: 'MB'}, {min: 1073741824, unit: 'GB'}],
 503.366 +		s: [{min: 1, unit: 's'}, {min: 60, unit: 'm'}, {min: 3600, unit: 'h'}, {min: 86400, unit: 'd'}]
 503.367 +	},
 503.368 +
 503.369 +	formatUnit: function(base, type, join) {
 503.370 +		var labels = Swiff.Uploader.unitLabels[(type == 'bps') ? 'b' : type];
 503.371 +		var append = (type == 'bps') ? '/s' : '';
 503.372 +		var i, l = labels.length, value;
 503.373 +
 503.374 +		if (base < 1) return '0 ' + labels[0].unit + append;
 503.375 +
 503.376 +		if (type == 's') {
 503.377 +			var units = [];
 503.378 +
 503.379 +			for (i = l - 1; i >= 0; i--) {
 503.380 +				value = Math.floor(base / labels[i].min);
 503.381 +				if (value) {
 503.382 +					units.push(value + ' ' + labels[i].unit);
 503.383 +					base -= value * labels[i].min;
 503.384 +					if (!base) break;
 503.385 +				}
 503.386 +			}
 503.387 +
 503.388 +			return (join === false) ? units : units.join(join || ', ');
 503.389 +		}
 503.390 +
 503.391 +		for (i = l - 1; i >= 0; i--) {
 503.392 +			value = labels[i].min;
 503.393 +			if (base >= value) break;
 503.394 +		}
 503.395 +
 503.396 +		return (base / value).toFixed(1) + ' ' + labels[i].unit + append;
 503.397 +	}
 503.398 +
 503.399 +});
 503.400 +
 503.401 +Swiff.Uploader.qualifyPath = (function() {
 503.402 +	
 503.403 +	var anchor;
 503.404 +	
 503.405 +	return function(path) {
 503.406 +		(anchor || (anchor = new Element('a'))).href = path;
 503.407 +		return anchor.href;
 503.408 +	};
 503.409 +
 503.410 +})();
 503.411 +
 503.412 +Swiff.Uploader.File = new Class({
 503.413 +
 503.414 +	Implements: Events,
 503.415 +
 503.416 +	initialize: function(base, data) {
 503.417 +		this.base = base;
 503.418 +		this.update(data);
 503.419 +	},
 503.420 +
 503.421 +	update: function(data) {
 503.422 +		return $extend(this, data);
 503.423 +	},
 503.424 +
 503.425 +	validate: function() {
 503.426 +		var options = this.base.options;
 503.427 +		
 503.428 +		if (options.fileListMax && this.base.fileList.length >= options.fileListMax) {
 503.429 +			this.validationError = 'fileListMax';
 503.430 +			return false;
 503.431 +		}
 503.432 +		
 503.433 +		if (options.fileListSizeMax && (this.base.size + this.size) > options.fileListSizeMax) {
 503.434 +			this.validationError = 'fileListSizeMax';
 503.435 +			return false;
 503.436 +		}
 503.437 +		
 503.438 +		return true;
 503.439 +	},
 503.440 +
 503.441 +	invalidate: function() {
 503.442 +		this.invalid = true;
 503.443 +		this.base.fireEvent('fileInvalid', this, 10);
 503.444 +		return this.fireEvent('invalid', this, 10);
 503.445 +	},
 503.446 +
 503.447 +	render: function() {
 503.448 +		return this;
 503.449 +	},
 503.450 +
 503.451 +	setOptions: function(options) {
 503.452 +		if (options) {
 503.453 +			if (options.url) options.url = Swiff.Uploader.qualifyPath(options.url);
 503.454 +			this.base.remote('fileSetOptions', this.id, options);
 503.455 +			this.options = $merge(this.options, options);
 503.456 +		}
 503.457 +		return this;
 503.458 +	},
 503.459 +
 503.460 +	start: function() {
 503.461 +		this.base.fileStart(this);
 503.462 +		return this;
 503.463 +	},
 503.464 +
 503.465 +	stop: function() {
 503.466 +		this.base.fileStop(this);
 503.467 +		return this;
 503.468 +	},
 503.469 +
 503.470 +	remove: function() {
 503.471 +		this.base.fileRemove(this);
 503.472 +		return this;
 503.473 +	},
 503.474 +
 503.475 +	requeue: function() {
 503.476 +		this.base.fileRequeue(this);
 503.477 +	} 
 503.478 +
 503.479 +});
   504.1 Binary file e2gallerypro/e2upload/images/adminheader.png has changed
   505.1 Binary file e2gallerypro/e2upload/images/bodybg.png has changed
   506.1 Binary file e2gallerypro/e2upload/images/loginheader.png has changed
   507.1 Binary file e2gallerypro/e2upload/images/tab_bg.png has changed
   508.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   508.2 +++ b/e2gallerypro/e2upload/index.php	Mon Feb 22 08:02:39 2010 -0500
   508.3 @@ -0,0 +1,195 @@
   508.4 +<?php include('../e2config.php'); include ("password_protect.php"); ?>
   508.5 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   508.6 +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   508.7 +<html xmlns="http://www.w3.org/1999/xhtml">
   508.8 +<head>
   508.9 +	<title>(E)2 Gallery Pro File Manager</title>
  508.10 +	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  508.11 +	<link rel="shortcut icon" href="http://e2interactive.com/favicon.ico" />
  508.12 +	<style type="text/css">
  508.13 +	body {
  508.14 +		font-size: 11px;
  508.15 +		font-family: Tahoma, sans-serif;
  508.16 +		background: #F1F1F1 url(images/bodybg.png) repeat-x top center;
  508.17 +	}	
  508.18 +	.dsep{
  508.19 +		clear:both;
  508.20 +		border-bottom: dotted 1px #999;
  508.21 +		margin:20px 0;
  508.22 +	}
  508.23 +	#maincontent img{
  508.24 +		margin: 0 10px 10px;
  508.25 +	}
  508.26 +	#container #header {
  508.27 +	background-image: url(images/adminheader.png);
  508.28 +	background-repeat: no-repeat;
  508.29 +	background-position: center top;
  508.30 +	width:750px;
  508.31 +	text-align: center;
  508.32 +	height: 87px;
  508.33 +	}
  508.34 +	#container {
  508.35 +		text-align: center;
  508.36 +		width: 750px;
  508.37 +		margin:0 auto;
  508.38 +	}
  508.39 +	#container #maincontent {
  508.40 +		text-align: left;
  508.41 +		padding: 10px 10px;
  508.42 +		border: dotted #CCC 1px;
  508.43 +		-moz-border-radius: 10px;
  508.44 +		-khtml-border-radius: 10px;
  508.45 +		-webkit-border-radius: 10px;
  508.46 +		border-radius: 10px;
  508.47 +		margin-top: 10px;
  508.48 +		background: #E1E1E1;
  508.49 +	}
  508.50 +	#container #navigation {
  508.51 +		height: 35px;
  508.52 +		padding: 0 10px;
  508.53 +	}
  508.54 +	#navigation #manage, #navigation #managexml, #navigation #outputxml, #navigation #seegallery {
  508.55 +		background-image: url(images/tab_bg.png);
  508.56 +		background-repeat: repeat-x;
  508.57 +		background-position: center top;
  508.58 +		height: 19px;
  508.59 +		float: left;
  508.60 +		padding: 5px 6px 0;
  508.61 +		margin: 1px 5px 5px;
  508.62 +		border-left: solid 1px #CCC;
  508.63 +		border-right: solid 1px #CCC;
  508.64 +		border-bottom: solid 1px #CCC;
  508.65 +		-moz-border-radius: 0 0 5px 5px;
  508.66 +		-webkit-border-bottom-left-radius: 5px;
  508.67 +		-webkit-border-bottom-right-radius: 5px;
  508.68 +		-khtml-border-bottom-left-radius: 5px;
  508.69 +		-khtml-border-bottom-right-radius: 5px;
  508.70 +		border-bottom-left-radius: 5px;
  508.71 +		border-bottom-right-radius: 5px;
  508.72 +		cursor:pointer;
  508.73 +	}
  508.74 +	 #navigation #logout{
  508.75 +		background-image: url(images/tab_bg.png);
  508.76 +		background-repeat: repeat-x;
  508.77 +		background-position: center top;
  508.78 +		height: 19px;
  508.79 +		float: right;
  508.80 +		padding: 5px 6px 0;
  508.81 +		margin: 1px 5px 5px;
  508.82 +		border-left: solid 1px #CCC;
  508.83 +		border-right: solid 1px #CCC;
  508.84 +		border-bottom: solid 1px #CCC;
  508.85 +		-moz-border-radius: 0 0 5px 5px;
  508.86 +		-webkit-border-bottom-left-radius: 5px;
  508.87 +		-webkit-border-bottom-right-radius: 5px;
  508.88 +		-khtml-border-bottom-left-radius: 5px;
  508.89 +		-khtml-border-bottom-right-radius: 5px;
  508.90 +		border-bottom-left-radius: 5px;
  508.91 +		border-bottom-right-radius: 5px;
  508.92 +		cursor:pointer;
  508.93 +	}
  508.94 +	#navigation a{
  508.95 +		text-decoration:none;
  508.96 +		color:#333;
  508.97 +	}
  508.98 +	#navigation a:hover{
  508.99 +		text-decoration:underline;
 508.100 +		color:#333;
 508.101 +	}
 508.102 +	</style>
 508.103 +	
 508.104 +	<link rel="stylesheet" media="all" type="text/css" href="Css/FileManager.css" />
 508.105 +	<link rel="stylesheet" media="all" type="text/css" href="Css/Additions.css" />
 508.106 +
 508.107 +	<script type="text/javascript" src="js/mootools-core.js"></script>
 508.108 +	<script type="text/javascript" src="js/mootools-more.js"></script>
 508.109 +	
 508.110 +	<script type="text/javascript" src="Source/FileManager.js"></script>
 508.111 +	<script type="text/javascript" src="Source/Language/Language.en.js"></script>
 508.112 +	<script type="text/javascript" src="Source/Language/Language.de.js"></script>
 508.113 +	<script type="text/javascript" src="Source/Additions.js"></script>
 508.114 +	
 508.115 +	<script type="text/javascript" src="Source/Uploader/Fx.ProgressBar.js"></script>
 508.116 +	<script type="text/javascript" src="Source/Uploader/Swiff.Uploader.js"></script>
 508.117 +	
 508.118 +	<script type="text/javascript" src="Source/Uploader.js"></script>
 508.119 +	
 508.120 +	<script type="text/javascript">
 508.121 +		window.addEvent('domready', function(){
 508.122 +			/* Simple Example */
 508.123 +			var manager = new FileManager({
 508.124 +				url: 'manager.php',
 508.125 +				assetBasePath: 'Assets',
 508.126 +				language: 'en',
 508.127 +				uploadAuthData: {session: 'MySessionId'}
 508.128 +			});
 508.129 +			$('manage').addEvent('click', manager.show.bind(manager));
 508.130 +			
 508.131 +			/* XML upload*/
 508.132 +			var manager = new FileManager({
 508.133 +				url: 'managerxml.php',
 508.134 +				assetBasePath: 'Assets',
 508.135 +				language: 'en',
 508.136 +				uploadAuthData: {session: 'MySessionId'}
 508.137 +			});
 508.138 +			$('managexml').addEvent('click', manager.show.bind(manager));
 508.139 +
 508.140 +		});
 508.141 +	</script>
 508.142 +</head>
 508.143 +<body>
 508.144 +	<div id="container">
 508.145 +	<div id="header"></div>
 508.146 +	<div id="navigation">
 508.147 +		<div id="manage">Upload/Manage Images</div>
 508.148 +		<div id="managexml">Upload/Edit XML</div>
 508.149 +		<a href="outputxml.php"><div id="outputxml">Output XML</div></a>
 508.150 +        <a href="../"><div id="seegallery">See Gallery</div></a>
 508.151 +		<a href="?logout=1"><div id="logout">Log Out</div></a>
 508.152 +	</div>
 508.153 +	<div id="maincontent">
 508.154 +		<h2>Gallery Information</h2>
 508.155 +		<?php
 508.156 +			if($myPHPVersion=="4"){
 508.157 +				require('../php/xmlparse.v4.php');
 508.158 +			}else{
 508.159 +				require('../php/xmlparse.v5.php');
 508.160 +			}
 508.161 +			//Get the XML document loaded into a variable
 508.162 +			$xml = file_get_contents('../'.$e2xmlurl);
 508.163 +			
 508.164 +			//Set up the parser object
 508.165 +			$parser = new XMLParser($xml);
 508.166 +			
 508.167 +			//Work the magic...
 508.168 +			$parser->Parse();
 508.169 +			$i=1;
 508.170 +			$k=0;
 508.171 +			$l=0;
 508.172 +			foreach($parser->document->gallery as $gallery){
 508.173 +				if($i!=1){
 508.174 +					echo'<div class="dsep"></div>';
 508.175 +				}
 508.176 +				foreach($gallery->item as $item){
 508.177 +					$l++;
 508.178 +					$finalnum=$l-1;
 508.179 +				}
 508.180 +				echo 
 508.181 +				"<img src='".$gallery->mainthumb[0]->tagData."".$gallery->mainthumbsrc[0]->tagData."' align='left' />
 508.182 +				  <strong>Gallery ".$i.":</strong> ".$gallery->title[0]->tagData."
 508.183 +				  <br />
 508.184 +				  <strong>Description</strong>
 508.185 +				  <br />
 508.186 +				  ".$gallery->description[0]->tagData."
 508.187 +				";
 508.188 +				$i++;
 508.189 +				foreach($gallery->item as $item){
 508.190 +					$k++;
 508.191 +				}
 508.192 +			}
 508.193 +		?>
 508.194 +		<div class="dsep"></div>
 508.195 +	</div>
 508.196 +</div>
 508.197 +</body>
 508.198 +</html>
 508.199 \ No newline at end of file
   509.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   509.2 +++ b/e2gallerypro/e2upload/js/mootools-core.js	Mon Feb 22 08:02:39 2010 -0500
   509.3 @@ -0,0 +1,1 @@
   509.4 +var MooTools={version:"1.2.2",build:"f0491d62fbb7e906789aa3733d6a67d43e5af7c9"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect;var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"};if(i&&f){d.prototype=i.prototype}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e)}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o}if(h){Native.genericize(n,l,b)}g.call(n,l,o);return n};d.alias=function(n,l,o){if(typeof n=="string"){if((n=this.prototype[n])){return j(this,l,n,o)}}for(var m in n){this.alias(m,n[m],l)}return this};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o)}for(var n in m){j(this,n,m[n],l)}return this};if(c){d.implement(c)}return d};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);return b.prototype[c].apply(d.shift(),d)}}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c)}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b)}}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var h in a){new Native({name:h,initialize:a[h],protect:true})}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c)}var f={Array:["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],String:["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};for(var e in f){for(var b=f[e].length;b--;){Native.genericize(window[e],f[e][b],true)}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean())}for(var b in a){this[b]=a[b]}return this}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this)}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a]}}return b},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++}}return b}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this)}}});Array.alias("forEach","each");function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a]}return c}return Array.prototype.slice.call(b)}function $arguments(a){return function(){return arguments[a]}}function $chk(a){return !!(a||a===0)}function $clear(a){clearTimeout(a);clearInterval(a);return null}function $defined(a){return(a!=undefined)}function $each(c,b,d){var a=$type(c);((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d)}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b]}return c}function $H(a){return new Hash(a)}function $lambda(a){return(typeof a=="function")?a:function(){return a}}function $merge(){var a=Array.slice(arguments);a.unshift({});return $mixin.apply(null,a)}function $mixin(e){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue}for(var c in b){var g=b[c],f=e[c];e[c]=(f&&$type(g)=="object"&&$type(f)=="object")?$mixin(f,g):$unlink(g)}}return e}function $pick(){for(var b=0,a=arguments.length;b<a;b++){if(arguments[b]!=undefined){return arguments[b]}}return null}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b)}function $splat(b){var a=$type(b);return(a)?((a!="array"&&a!="arguments")?[b]:b):[]}var $time=Date.now||function(){return +new Date};function $try(){for(var b=0,a=arguments.length;b<a;b++){try{return arguments[b]()}catch(c){}}return null}function $type(a){if(a==undefined){return false}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace"}}else{if(typeof a.length=="number"){if(a.callee){return"arguments"}else{if(a.item){return"collection"}}}}return typeof a}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var e in c){b[e]=$unlink(c[e])}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d])}break;default:return c}return b}var Browser=$merge({Engine:{name:"unknown",version:0},Platform:{name:(window.orientation!=undefined)?"ipod":(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925))},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?5:4)},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419)},gecko:function(){return(document.getBoxObjectFor==undefined)?false:((document.getElementsByClassName)?19:18)}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;break}}return{name:b,version:a}};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP")})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0}})();function $exec(b){if(!b){return b}if(window.execScript){window.execScript(b)}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a)}return b}Native.UID=1;var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0]}:function(a){return a.uid||(a.uid=Native.UID++)};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe")}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}a.document.window=a;return $extend(a,Window.Prototype)},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true)})}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null})}return $extend(a,Document.Prototype)},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a}});Document.Prototype={$family:{name:"document"}};new Document(document);Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false}}return true},filter:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(e,this[b],b,this)){c.push(this[b])}}return c},clean:function(){return this.filter($defined)},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b}}return -1},map:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){c[b]=d.call(e,this[b],b,this)}return c},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true}}return false},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a]}return d},link:function(c){var a={};for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break}}}return a},contains:function(a,b){return this.indexOf(a,b)!=-1},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b])}return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(a){if(!this.contains(a)){this.push(a)}return this},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b])}return this},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1)}}return this},empty:function(){this.length=0;return this},flatten:function(){var d=[];for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b])}return d},hexToRgb:function(b){if(this.length!=3){return null}var a=this.map(function(c){if(c.length==1){c+=c}return c.toInt(16)});return(b)?a:"rgb("+a+")"},rgbToHex:function(d){if(this.length<3){return null}if(this.length==4&&this[3]==0&&!d){return"transparent"}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?"0"+c:c)}return(d)?b:"#"+b.join("")}});Function.implement({extend:function(a){for(var b in a){this[b]=a[b]}return this},create:function(b){var a=this;b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c)}var e=function(){return a.apply(b.bind||null,c)};if(b.delay){return setTimeout(e,b.delay)}if(b.periodical){return setInterval(e,b.periodical)}if(b.attempt){return $try(e)}return e()}},run:function(a,b){return this.apply(b,$splat(a))},pass:function(a,b){return this.create({bind:b,arguments:a})},bind:function(b,a){return this.create({bind:b,arguments:a})},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true})},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})()},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})()},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})()}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this))},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a},times:function(b,c){for(var a=0;a<this;a++){b.call(c,a,this)}},toFloat:function(){return parseFloat(this)},toInt:function(a){return parseInt(this,a||10)}});Number.alias("times","each");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)))}}});Number.implement(a)})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this)},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,"")},clean:function(){return this.replace(/\s+/g," ").trim()},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},toInt:function(a){return parseInt(this,a||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null},stripScripts:function(b){var a="";var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return""});if(b===true){$exec(a)}else{if($type(b)=="function"){b(a,c)}}return c},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1)}return(a[c]!=undefined)?a[c]:""})}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a}}return null},hasValue:function(a){return(Hash.keyOf(this,a)!==null)},extend:function(a){Hash.each(a,function(c,b){Hash.set(this,b,c)},this);return this},combine:function(a){Hash.each(a,function(c,b){Hash.include(this,b,c)},this);return this},erase:function(a){if(this.hasOwnProperty(a)){delete this[a]}return this},get:function(a){return(this.hasOwnProperty(a))?this[a]:null},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b}return this},empty:function(){Hash.each(this,function(b,a){delete this[a]},this);return this},include:function(a,b){if(this[a]==undefined){this[a]=b}return this},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this))},this);return a},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e)}},this);return a},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false}}return true},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true}}return false},getKeys:function(){var a=[];Hash.each(this,function(c,b){a.push(b)});return a},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b)});return a},toQueryString:function(a){var b=[];Hash.each(this,function(f,e){if(a){e=a+"["+e+"]"}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f)}if(f!=undefined){b.push(d)}});return b.join("&")}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a}this.$extended=true;var j=a.type;var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111;if(d>0&&d<13){m="f"+d}}m=m||String.fromCharCode(b).toLowerCase()}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body;var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY};if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement;break;case"mouseout":l=a.relatedTarget||a.toElement}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode}return true}).create({attempt:Browser.Engine.gecko})()){l=false}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey})}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation()}else{this.event.cancelBubble=true}return this},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault()}else{this.event.returnValue=false}return this}});function Class(b){if(b instanceof Function){b={initialize:b}}var a=function(){Object.reset(this);if(a._prototyping){return this}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c}.extend(this);a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a}Function.prototype.protect=function(){this._protected=true;return this};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e)}return a}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);break}return a};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a},wrap:function(a,b,c){if(c._origin){c=c._origin}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.')}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d}.extend({_owner:a,_origin:c,_name:b})}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e])}return this}var f=Class.Mutators[a];if(f){d=f.call(this,d);if(d==null){return this}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];if($type(b)=="object"){$mixin(b,d)}else{c[a]=$unlink(d)}break;case"array":c[a]=$unlink(d);break;default:c[a]=d}return this}});Class.Mutators={Extends:function(a){this.parent=a;this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.')}return c.apply(this,arguments)}.protect())},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b)}this.implement(b)},this)}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){this.$chain.empty();return this}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[];this.$events[c].include(b);if(a){b.internal=true}}return this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},fireEvent:function(c,b,a){c=Events.removeOn(c);if(!this.$events||!this.$events[c]){return this}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})()},this);return this},removeEvent:function(b,a){b=Events.removeOn(b);if(!this.$events[b]){return this}if(!a.internal){this.$events[b].erase(a)}return this},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d])}return this}if(c){c=Events.removeOn(c)}for(d in this.$events){if(c&&c!=d){continue}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a])}}return this}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue}this.addEvent(a,this.options[a]);delete this.options[a]}return this}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);if(c){return c(b)}if(typeof a=="string"){return document.newElement(a,b)}return $(a).set(b)},afterImplement:function(a,b){Element.Prototype[a]=b;if(Array[a]){return}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e<d;e++){var f=this[e][a].apply(this[e],arguments);c.push(f);if(g){g=($type(f)=="element")}}return(g)?new Elements(c):c})}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var e=Array.link(arguments,{properties:Object.type,iframe:$defined});var c=e.properties||{};var b=$(e.iframe)||false;var d=c.onload||$empty;delete c.onload;c.id=c.name=$pick(c.id,c.name,b.id,b.name,"IFrame_"+$time());b=new Element(b||"iframe",c);var a=function(){var f=$try(function(){return b.contentWindow.location.host});if(f&&f==window.location.host){var g=new Window(b.contentWindow);new Document(b.contentWindow.document);$extend(g.Element.prototype,Element.Prototype)}d.call(b.contentWindow,b.contentWindow.document)};(window.frames[c.id])?a():b.addListener("load",a);return b}});var Elements=new Native({initialize:function(f,b){b=$extend({ddup:true,cash:true},b);f=f||[];if(b.ddup||b.cash){var g={},e=[];for(var c=0,a=f.length;c<a;c++){var d=$.element(f[c],!b.cash);if(b.ddup){if(g[d.uid]){continue}g[d.uid]=true}e.push(d)}f=e}return(b.cash)?$extend(f,this):f}});Elements.implement({filter:function(a,b){if(!a){return this}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a)}:a,b))}});Document.implement({newElement:function(a,b){if(Browser.Engine.trident&&b){["name","type","checked"].each(function(c){if(!b[c]){return}a+=" "+c+'="'+b[c]+'"';if(c!="checked"){delete b[c]}});a="<"+a+">"}return $.element(this.createElement(a)).set(b)},newTextNode:function(a){return this.createTextNode(a)},getDocument:function(){return this},getWindow:function(){return this.window}});Window.implement({$:function(b,c){if(b&&b.$family&&b.uid){return b}var a=$type(b);return($[a])?$[a](b,c,this.document):null},$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a)}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var e=c[d];switch($type(e)){case"element":f.push(e);break;case"string":f.extend(this.document.getElements(e,true))}}return new Elements(f)},getDocument:function(){return this.document},getWindow:function(){return this}});$.string=function(c,b,a){c=a.getElementById(c);return(c)?$.element(c,b):null};$.element=function(a,d){$uid(a);if(!d&&!a.$family&&!(/^object|embed$/i).test(a.tagName)){var b=Element.Prototype;for(var c in b){a[c]=b[c]}}return a};$.object=function(b,c,a){if(b.toElement){return $.element(b.toElement(a),c)}return null};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(a,b){return $(this.getElements(a,true)[0]||null,b)},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f},this);return new Elements(c,{ddup:b,cash:!d})}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"};var c=function(l){return(f[l]||(f[l]={}))};var g=function(n,l){if(!n){return}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false);n.clearAttributes();if(q){n.mergeAttributes(q)}}else{if(n.removeEvents){n.removeEvents()}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty}}Element.dispose(n)}}if(!m){return}h[m]=f[m]=null};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g)}if(window.CollectGarbage){CollectGarbage()}h=f=null};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return $(o,r)}q.push(o)}o=o[l]}return(p)?new Elements(q,{ddup:false,cash:!r}):null};var e={html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"};var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"];b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l)}},after:function(m,l){if(!l.parentNode){return}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m)},bottom:function(m,l){l.appendChild(m)},top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m)}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,$(n,true));return this});Element.implement("grab"+m,function(n){l($(n,true),this);return this})});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n])}break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m)}return this},get:function(m){var l=Element.Properties.get(m);return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m)},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m);return this},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m)}if(l&&b[m]){n=!!n}(l)?this[l]=n:this.setAttribute(m,""+n);return this},setProperties:function(l){for(var m in l){this.setProperty(m,l[m])}return this},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2);return(b[m])?!!n:(l)?n:n||null},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l)},removeProperty:function(m){var l=e[m];(l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this},hasClass:function(l){return this.className.contains(l," ")},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean()}return this},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l)},adopt:function(){Array.flatten(arguments).each(function(l){l=$(l,true);if(l){this.appendChild(l)}},this);return this},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l)},grab:function(m,l){a[l||"bottom"]($(m,true),this);return this},inject:function(m,l){a[l||"bottom"](this,$(m,true));return this},replaces:function(l){l=$(l,true);l.parentNode.replaceChild(this,l);return this},wraps:function(m,l){m=$(m,true);return this.replaces(m).grab(m,l)},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m)},getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m)},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m)},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m)},getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m)},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m)},getParent:function(l,m){return j(this,"parentNode",null,l,false,m)},getParents:function(l,m){return j(this,"parentNode",null,l,true,m)},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this)},getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m)},getWindow:function(){return this.ownerDocument.window},getDocument:function(){return this.ownerDocument},getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null}}return $.element(m,n)},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected}))},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()]}var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null},toQueryString:function(){var l=[];this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled){return}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value}):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o))}})});return l.join("&")},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id")}if(Browser.Engine.trident){v.clearAttributes();v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected}}}var x=i[u.tagName.toLowerCase()];if(x&&u[x]){v[x]=u[x]}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m])}}n(r,this);return $(r)},destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l)});return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},hasChild:function(l){l=$(l,true);if(!l){return false}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l)}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16)},match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l))}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this;n=function(){m.removeListener("unload",n);l()}}else{h[this.uid]=this}if(this.addEventListener){this.addEventListener(o,n,false)}else{this.attachEvent("on"+o,n)}return this},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false)}else{this.detachEvent("on"+m,l)}return this},retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l}return $pick(n)},store:function(m,l){var n=c(this.uid);n[m]=l;return this},eliminate:function(l){var m=c(this.uid);delete m[l];return this}});window.addListener("unload",d)})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a},get:function(){return this.style.cssText},erase:function(){this.style.cssText=""}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"<table>","</table>"],select:[1,"<select>","</select>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"]};a.thead=a.tfoot=a.tbody;var b={set:function(){var e=Array.flatten(arguments).join("");var f=Browser.Engine.trident&&a[this.get("tag")];if(f){var g=c;g.innerHTML=f[1]+e+f[2];for(var d=f[0];d--;){g=g.firstChild}this.empty().adopt(g.childNodes)}else{this.innerHTML=e}}};b.erase=b.set;return b})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b}}}Element.Properties.events={set:function(a){this.addEvents(a)}};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this}h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g)}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j)}return true}}f=a.base||f}var d=function(){return g.call(i)};var b=Element.NativeEvents[f];if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow());if(c.call(i,j)===false){j.stop()}}}this.addListener(f,d)}h[e].values.push(d);return this},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this}var f=a[c].keys.indexOf(b);if(f==-1){return this}a[c].keys.splice(f,1);var e=a[c].values.splice(f,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b)}c=d.base||c}return(Element.NativeEvents[c])?this.removeListener(c,e):this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c])}return this}var b=this.retrieve("events");if(!b){return this}if(!a){for(c in b){this.removeEvents(c)}this.eliminate("events")}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0])}b[a]=null}}return this},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})()},this);return this},cloneEvents:function(d,a){d=$(d);var c=d.retrieve("events");if(!c){return this}if(!a){for(var b in c){this.cloneEvents(d,b)}}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e)},this)}}return this}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true}if(c===false){return false}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c))};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}})})();Element.Properties.styles={set:function(a){this.setStyles(a)}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"}}else{if(this.style.visibility!="visible"){this.style.visibility="visible"}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"}this.style.opacity=a;this.store("opacity",a)},get:function(){return this.retrieve("opacity",1)}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true)},getOpacity:function(){return this.get("opacity")},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return""}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e}).join(" ")}else{if(a==String(Number(a))){a=Math.round(a)}}this.style[b]=a;return this},getStyle:function(g){switch(g){case"opacity":return this.get("opacity");case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat"}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue}for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e))}return a.join(" ")}a=this.getComputedStyle(g)}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/);if(c){a=a.replace(c[0],c[0].rgbToHex())}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0;b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt()},this);return this["offset"+g.capitalize()]-d+"px"}if((Browser.Engine.presto)&&String(a).test("px")){return a}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px"}}return a},setStyles:function(b){for(var a in b){this.setStyle(a,b[a])}return this},getStyles:function(){var a={};Array.each(arguments,function(b){a[b]=this.getStyle(b)},this);return a}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(g){var f=Element.ShortStyles;var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px"});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color";f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)"});(function(){Element.implement({scrollTo:function(h,i){if(b(this)){this.getWindow().scrollTo(h,i)}else{this.scrollLeft=h;this.scrollTop=i}return this},getSize:function(){if(b(this)){return this.getWindow().getSize()}return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize()}return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(b(this)){return this.getWindow().getScroll()}return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var i=this,h={x:0,y:0};while(i&&!b(i)){h.x+=i.scrollLeft;h.y+=i.scrollTop;i=i.parentNode}return h},getOffsetParent:function(){var h=this;if(b(h)){return null}if(!Browser.Engine.trident){return h.offsetParent}while((h=h.parentNode)&&!b(h)){if(d(h,"position")!="static"){return h}}return null},getOffsets:function(){if(Browser.Engine.trident){var l=this.getBoundingClientRect(),j=this.getDocument().documentElement;var m=d(this,"position")=="fixed";return{x:l.left+((m)?0:j.scrollLeft)-j.clientLeft,y:l.top+((m)?0:j.scrollTop)-j.clientTop}}var i=this,h={x:0,y:0};if(b(this)){return h}while(i&&!b(i)){h.x+=i.offsetLeft;h.y+=i.offsetTop;if(Browser.Engine.gecko){if(!f(i)){h.x+=c(i);h.y+=g(i)}var k=i.parentNode;if(k&&d(k,"overflow")!="visible"){h.x+=c(k);h.y+=g(k)}}else{if(i!=this&&Browser.Engine.webkit){h.x+=c(i);h.y+=g(i)}}i=i.offsetParent}if(Browser.Engine.gecko&&!f(this)){h.x-=c(this);h.y-=g(this)}return h},getPosition:function(k){if(b(this)){return{x:0,y:0}}var l=this.getOffsets(),i=this.getScrolls();var h={x:l.x-i.x,y:l.y-i.y};var j=(k&&(k=$(k)))?k.getPosition():{x:0,y:0};return{x:h.x-j.x,y:h.y-j.y}},getCoordinates:function(j){if(b(this)){return this.getWindow().getCoordinates()}var h=this.getPosition(j),i=this.getSize();var k={left:h.x,top:h.y,width:i.x,height:i.y};k.right=k.left+k.width;k.bottom=k.top+k.height;return k},computePosition:function(h){return{left:h.x-e(this,"margin-left"),top:h.y-e(this,"margin-top")}},position:function(h){return this.setStyles(this.computePosition(h))}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var i=this.getWindow();return{x:i.innerWidth,y:i.innerHeight}}var h=a(this);return{x:h.clientWidth,y:h.clientHeight}},getScroll:function(){var i=this.getWindow(),h=a(this);return{x:i.pageXOffset||h.scrollLeft,y:i.pageYOffset||h.scrollTop}},getScrollSize:function(){var i=a(this),h=this.getSize();return{x:Math.max(i.scrollWidth,h.x),y:Math.max(i.scrollHeight,h.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var h=this.getSize();return{top:0,left:0,bottom:h.y,right:h.x,height:h.y,width:h.x}}});var d=Element.getComputedStyle;function e(h,i){return d(h,i).toInt()||0}function f(h){return d(h,"-moz-box-sizing")=="border-box"}function g(h){return e(h,"border-top-width")}function c(h){return e(h,"border-left-width")}function b(h){return(/^(?:body|html)$/i).test(h.tagName)}function a(h){var i=h.getDocument();return(!i.compatMode||i.compatMode=="CSS1Compat")?i.html:i.body}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});Native.implement([Document,Element],{getElements:function(h,g){h=h.split(",");var c,e={};for(var d=0,b=h.length;d<b;d++){var a=h[d],f=Selectors.Utils.search(this,a,e);if(d!=0&&f.item){f=$A(f)}c=(d==0)?f:(c.item)?$A(c).concat(f):c.concat(f)}return new Elements(c,{ddup:(h.length>1),cash:!g})}});Element.implement({match:function(b){if(!b||(b==this)){return true}var d=Selectors.Utils.parseTagAndID(b);var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(b,c){if(!c){return true}var a=$uid(b);if(!c[a]){return c[a]=true}return false},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h]}var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false}var g=parseInt(e[1],10);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3],10)||0;if(d!=0){c--;while(c<1){c+=d}while(c>=d){c-=d}}else{d=c;f="index"}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"};break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"};break;default:e={a:(d-1),special:"index"}}return Selectors.Cache.nth[h]=e},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e]}var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[5],c=d[6],j=d[7];if(i){h.classes.push(i)}else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j})}else{h.attributes.push({name:c,operator:"=",value:j})}}else{if(g){h.attributes.push({name:g,operator:f,value:b})}}}}if(!h.classes.length){delete h.classes}if(!h.attributes.length){delete h.attributes}if(!h.pseudos.length){delete h.pseudos}if(!h.classes&&!h.attributes&&!h.pseudos){h=null}return Selectors.Cache.parsed[e]=h},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]},filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false}}}if(c.attributes){for(d=c.attributes.length;d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d];if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false}}}return true},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true);return(c&&Selectors.Filters.byTag(c,a))?[c]:[]}else{return b.getElementsByTagName(a)}},search:function(o,h,t){var b=[];var c=h.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j);return":)"+i}).split(":)");var p,e,A;for(var z=0,v=c.length;z<v;z++){var y=c[z];if(z==0&&Selectors.RegExps.quick.test(y)){p=o.getElementsByTagName(y);continue}var a=b[z-1];var q=Selectors.Utils.parseTagAndID(y);var B=q[0],r=q[1];if(z==0){p=Selectors.Utils.getByTagAndID(o,B,r)}else{var d={},g=[];for(var x=0,w=p.length;x<w;x++){g=Selectors.Getters[a](g,p[x],B,r,d)}p=g}var f=Selectors.Utils.parseSelector(y);if(f){e=[];for(var u=0,s=p.length;u<s;u++){A=p[u];if(Selectors.Utils.filter(A,f,t)){e.push(A)}}p=e}}return p}};Selectors.Getters={" ":function(h,g,j,a,e){var d=Selectors.Utils.getByTagAndID(g,j,a);for(var c=0,b=d.length;c<b;c++){var f=d[c];if(Selectors.Utils.chk(f,e)){h.push(f)}}return h},">":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;e<d;e++){var b=c[e];if(b.parentNode==g&&Selectors.Utils.chk(b,f)){h.push(b)}}return h},"+":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(Selectors.Utils.chk(b,d)&&Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b)}break}}return c},"~":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(!Selectors.Utils.chk(b,d)){break}if(Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b)}}}return c}};Selectors.Filters={byTag:function(b,a){return(a=="*"||(b.tagName&&b.tagName.toLowerCase()==a))},byID:function(a,b){return(!b||(a.id&&a.id==b))},byClass:function(b,a){return(b.className&&b.className.contains(a," "))},byPseudo:function(a,d,c,b){return d.call(a,c,b)},byAttribute:function(c,d,b,e){var a=Element.prototype.getProperty.call(c,d);if(!a){return(b=="!=")}if(!b||e==undefined){return true}switch(b){case"=":return(a==e);case"*=":return(a.contains(e));case"^=":return(a.substr(0,e.length)==e);case"$=":return(a.substr(a.length-e.length)==e);case"!=":return(a!=e);case"~=":return a.contains(e," ");case"|=":return a.contains(e,"-")}return false}};Selectors.Pseudo=new Hash({checked:function(){return this.checked},empty:function(){return !(this.innerText||this.textContent||"").length},not:function(a){return !Element.match(this,a)},contains:function(a){return(this.innerText||this.textContent||"").contains(a)},"first-child":function(){return Selectors.Pseudo.index.call(this,0)},"last-child":function(){var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"only-child":function(){var b=this;while((b=b.previousSibling)){if(b.nodeType==1){return false}}var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"nth-child":function(g,e){g=(g==undefined)?"n":g;var c=Selectors.Utils.parseNthArgument(g);if(c.special!="n"){return Selectors.Pseudo[c.special].call(this,c.a,e)}var f=0;e.positions=e.positions||{};var d=$uid(this);if(!e.positions[d]){var b=this;while((b=b.previousSibling)){if(b.nodeType!=1){continue}f++;var a=e.positions[$uid(b)];if(a!=undefined){f=a+f;break}}e.positions[d]=f}return(e.positions[d]%c.a==c.b)},index:function(a){var b=this,c=0;while((b=b.previousSibling)){if(b.nodeType==1&&++c>a){return false}}return(c==a)},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a)},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a)},selected:function(){return this.selected}});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this)}}};(function(){var b=function(){if(Browser.loaded){return}Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready")};if(Browser.Engine.trident){var a=document.createElement("div");(function(){($try(function(){a.doScroll("left");return $(a).inject(document.body).set("html","temp").dispose()}))?b():arguments.callee.delay(50)})()}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50)})()}else{window.addEvent("load",b);document.addEvent("DOMContentLoaded",b)}}})();var JSON=new Hash({$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16)},encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var a=[];Hash.each(b,function(e,d){var c=JSON.encode(e);if(c){a.push(JSON.encode(d)+":"+c)}});return"{"+a+"}";case"number":case"boolean":return String(b);case false:return"null"}return null},decode:function(string,secure){if($type(string)!="string"||!string.length){return null}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null}return eval("("+string+")")}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this)}});var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object},initialize:function(l,m){this.instance="Swiff_"+$time();this.setOptions(m);m=this.options;var b=this.id=m.id||this.instance;var a=$(m.container);Swiff.CallBacks[this.instance]={};var e=m.params,g=m.vars,f=m.callBacks;var h=$extend({height:m.height,width:m.width},m.properties);var k=this;for(var d in f){Swiff.CallBacks[this.instance][d]=(function(n){return function(){return n.apply(k.object,arguments)}})(f[d]);g[d]="Swiff.CallBacks."+this.instance+"."+d}e.flashVars=Hash.toQueryString(g);if(Browser.Engine.trident){h.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";e.movie=l}else{h.type="application/x-shockwave-flash";h.data=l}var j='<object id="'+b+'"';for(var i in h){j+=" "+i+'="'+h[i]+'"'}j+=">";for(var c in e){if(e[c]){j+='<param name="'+c+'" value="'+e[c]+'" />'}}j+="</object>";this.object=((a)?a.empty():new Element("div")).set("html",j).firstChild},replaces:function(a){a=$(a,true);a.parentNode.replaceChild(this.toElement(),a);return this},inject:function(a){$(a,true).appendChild(this.toElement());return this},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments))}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs)};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this;this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2}},step:function(){var a=$time();if(a<this.time+this.options.duration){var b=this.transition((a-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,b))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(a){return a},compute:function(c,b,a){return Fx.compute(c,b,a)},check:function(){if(!this.timer){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false}return false},start:function(b,a){if(!this.check(b,a)){return this}this.from=b;this.to=a;this.time=0;this.transition=this.getTransition();this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer()){this.onComplete()}return this},cancel:function(){if(this.stopTimer()){this.onCancel()}return this},onStart:function(){this.fireEvent("start",this.subject)},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject)}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer){return false}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(c,b,a){return(b-c)*a+c};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(d,e,b){b=$splat(b);var c=b[1];if(!$chk(c)){b[1]=b[0];b[0]=d.getStyle(e)}var a=b.map(this.parse);return{from:a[0],to:a[1]}},parse:function(a){a=$lambda(a)();a=(typeof a=="string")?a.split(" "):$splat(a);return a.map(function(c){c=String(c);var b=false;Fx.CSS.Parsers.each(function(f,e){if(b){return}var d=f.parse(c);if($chk(d)){b={value:d,parser:f}}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b})},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(e){a.push({value:d[e].parser.compute(d[e].value,c[e].value,b),parser:d[e].parser})});a.$family={name:"fx:css:value"};return a},serve:function(c,b){if($type(c)!="fx:css:value"){c=this.parse(c)}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b))});return a},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b))},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a]}var b={};Array.each(document.styleSheets,function(e,d){var c=e.href;if(c&&c.contains("://")&&!c.contains(document.domain)){return}var f=e.rules||e.cssRules;Array.each(f,function(j,g){if(!j.style){return}var h=(j.selectorText)?j.selectorText.replace(/^\w+/,function(i){return i.toLowerCase()}):null;if(!h||!h.test("^"+a+"$")){return}Element.Styles.each(function(k,i){if(!j.style[i]||Element.ShortStyles[i]){return}k=String(j.style[i]);b[i]=(k.test(/^rgb/))?k.rgbToHex():k})})});return Fx.CSS.Cache[a]=b}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true)}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false},compute:function(c,b,a){return c.map(function(e,d){return Math.round(Fx.compute(c[d],b[d],a))})},serve:function(a){return a.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=$(b);this.parent(a)},set:function(b,a){if(arguments.length==1){a=b;b=this.property||this.options.property}this.render(this.element,b,a,this.options.unit);return this},start:function(c,e,d){if(!this.check(c,e,d)){return this}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to)}});Element.Properties.tween={set:function(a){var b=this.retrieve("tween");if(b){b.cancel()}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("tween")){if(a||!this.retrieve("tween:options")){this.set("tween",a)}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")))}return this.retrieve("tween")}};Element.implement({tween:function(a,c,b){this.get("tween").start(arguments);return this},fade:function(c){var e=this.get("tween"),d="opacity",a;c=$pick(c,"toggle");switch(c){case"in":e.start(d,1);break;case"out":e.start(d,0);break;case"show":e.set(d,1);break;case"hide":e.set(d,0);break;case"toggle":var b=this.retrieve("fade:flag",this.get("opacity")==1);e.start(d,(b)?0:1);this.store("fade:flag",!b);a=true;break;default:e.start(d,arguments)}if(!a){this.eliminate("fade:flag")}return this},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));a=(a=="transparent")?"#fff":a}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));b.callChain()}.bind(this));return this}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=$(b);this.parent(a)},set:function(a){if(typeof a=="string"){a=this.search(a)}for(var b in a){this.render(this.element,b,a[b],this.options.unit)}return this},compute:function(e,d,c){var a={};for(var b in e){a[b]=this.parent(e[b],d[b],c)}return a},start:function(b){if(!this.check(b)){return this}if(typeof b=="string"){b=this.search(b)}var e={},d={};for(var c in b){var a=this.prepare(this.element,c,b[c]);e[c]=a.from;d[c]=a.to}return this.parent(e,d)}});Element.Properties.morph={set:function(a){var b=this.retrieve("morph");if(b){b.cancel()}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("morph")){if(a||!this.retrieve("morph:options")){this.set("morph",a)}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")))}return this.retrieve("morph")}};Element.implement({morph:function(a){this.get("morph").start(a);return this}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a=="string"){var b=a.split(":");a=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a["ease"+b[1].capitalize()+(b[2]?b[2].capitalize():"")]}}return a}});Fx.Transition=function(b,a){a=$splat(a);return $extend(b,{easeIn:function(c){return b(c,a)},easeOut:function(c){return 1-b(1-c,a)},easeInOut:function(c){return(c<=0.5)?b(2*c,a)/2:(2-b(2*(1-c),a))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b])}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a[0]||6)},Expo:function(a){return Math.pow(2,8*(a-1))},Circ:function(a){return 1-Math.sin(Math.acos(a))},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2)},Back:function(b,a){a=a[0]||1.618;return Math.pow(b,2)*((a+1)*b-a)},Bounce:function(f){var e;for(var d=0,c=1;1;d+=c,c/=2){if(f>=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);break}}return e},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a[0]||1)/3)}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,[a+2])})});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,noCache:false},initialize:function(a){this.xhr=new Browser.Request();this.setOptions(a);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}this.xhr.onreadystatechange=$empty},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a)}return a.stripScripts(this.options.evalScripts)},success:function(b,a){this.onSuccess(this.processScripts(b),a)},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr)},setHeader:function(a,b){this.headers.set(a,b);return this},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a)}.bind(this))},check:function(){if(!this.running){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false}return false},send:function(j){if(!this.check(j)){return this}this.running=true;var h=$type(j);if(h=="string"||h=="element"){j={data:j}}var d=this.options;j=$extend({data:d.data,url:d.url,method:d.method},j);var f=j.data,b=j.url,a=j.method;switch($type(f)){case"element":f=$(f).toQueryString();break;case"object":case"hash":f=Hash.toQueryString(f)}if(this.options.format){var i="format="+this.options.format;f=(f)?i+"&"+f:i}if(this.options.emulation&&["put","delete"].contains(a)){var g="_method="+a;f=(f)?g+"&"+f:g;a="post"}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+c)}if(this.options.noCache){var e="noCache="+new Date().getTime();f=(f)?e+"&"+f:e}if(f&&a=="get"){b=b+(b.contains("?")?"&":"?")+f;f=null}this.xhr.open(a.toUpperCase(),b,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(l,k){try{this.xhr.setRequestHeader(k,l)}catch(m){this.fireEvent("exception",[k,l])}},this);this.fireEvent("request");this.xhr.send(f);if(!this.options.async){this.onStateChange()}return this},cancel:function(){if(!this.running){return this}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this}});(function(){var a={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(c,{method:b.toLowerCase()}))}});Request.implement(a)})();Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);this.headers.extend({Accept:"application/json","X-Request":"JSON"})},success:function(a){this.response.json=JSON.decode(a,this.options.secure);this.onSuccess(this.response.json,a)}});
   509.5 \ No newline at end of file
   510.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   510.2 +++ b/e2gallerypro/e2upload/js/mootools-more.js	Mon Feb 22 08:02:39 2010 -0500
   510.3 @@ -0,0 +1,1 @@
   510.4 +MooTools.More={version:"1.2.2.1"};var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});this.element=$(b.element);this.document=this.element.getDocument();this.setOptions(b.options||{});var a=$type(this.options.handle);this.handles=((a=="array"||a=="collection")?$$(this.options.handle):$(this.options.handle))||this.element;this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach()},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);return this},start:function(c){if(this.options.preventDefault){c.preventDefault()}this.mouse.start=c.page;this.fireEvent("beforeStart",this.element);var a=this.options.limit;this.limit={x:[],y:[]};for(var d in this.options.modifiers){if(!this.options.modifiers[d]){continue}if(this.options.style){this.value.now[d]=this.element.getStyle(this.options.modifiers[d]).toInt()}else{this.value.now[d]=this.element[this.options.modifiers[d]]}if(this.options.invert){this.value.now[d]*=-1}this.mouse.pos[d]=c.page[d]-this.value.now[d];if(a&&a[d]){for(var b=2;b--;b){if($chk(a[d][b])){this.limit[d][b]=$lambda(a[d][b])()}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid}}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop)},check:function(a){if(this.options.preventDefault){a.preventDefault()}var b=Math.round(Math.sqrt(Math.pow(a.page.x-this.mouse.start.x,2)+Math.pow(a.page.y-this.mouse.start.y,2)));if(b>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",[this.element,a]).fireEvent("snap",this.element)}},drag:function(a){if(this.options.preventDefault){a.preventDefault()}this.mouse.now=a.page;for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue}this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1]}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0]}}}if(this.options.grid[b]){this.value.now[b]-=((this.value.now[b]-this.limit[b][0])%this.options.grid[b])}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit)}else{this.element[this.options.modifiers[b]]=this.value.now[b]}}this.fireEvent("drag",[this.element,a])},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element)}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(a){this.fireEvent("complete",[this.element,a])}}});Element.implement({makeResizable:function(a){var b=new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a));this.store("resizer",b);return b.addEvent("drag",function(){this.fireEvent("resize",b)}.bind(this))}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false,precalculate:false,includeMargins:true,checkDroppables:true},initialize:function(c,b){this.parent(c,b);this.droppables=$$(this.options.droppables);this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body)}var a=this.element.getStyle("position");if(a=="static"){a="absolute"}if([this.element.getStyle("left"),this.element.getStyle("top")].contains("auto")){this.element.position(this.element.getPosition(this.element.offsetParent))}this.element.setStyle("position",a);this.addEvent("start",this.checkDroppables,true);this.overed=null},start:function(f){if(this.container){var b=this.container.getCoordinates(this.element.getOffsetParent()),c={},e={};["top","right","bottom","left"].each(function(g){c[g]=this.container.getStyle("border-"+g).toInt();e[g]=this.element.getStyle("margin-"+g).toInt()},this);var d=this.element.offsetWidth+e.left+e.right;var a=this.element.offsetHeight+e.top+e.bottom;if(this.options.includeMargins){$each(e,function(h,g){e[g]=0})}if(this.container==this.element.getOffsetParent()){this.options.limit={x:[0-e.left,b.right-c.left-c.right-d+e.right],y:[0-e.top,b.bottom-c.top-c.bottom-a+e.bottom]}}else{this.options.limit={x:[b.left+c.left-e.left,b.right-c.right-d+e.right],y:[b.top+c.top-e.top,b.bottom-c.bottom-a+e.bottom]}}}if(this.options.precalculate){this.positions=this.droppables.map(function(g){return g.getCoordinates()})}this.parent(f)},checkAgainst:function(c,b){c=(this.positions)?this.positions[b]:c.getCoordinates();var a=this.mouse.now;return(a.x>c.left&&a.x<c.right&&a.y<c.bottom&&a.y>c.top)},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed])}if(a){this.fireEvent("enter",[this.element,a])}this.overed=a}},drag:function(a){this.parent(a);if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables()}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);this.overed=null;return this.parent(a)}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);this.store("dragger",b);return b}});var Asset={javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);var b=new Element("script",{src:f,type:"text/javascript"});var e=d.onload.bind(b),a=d.check,g=d.document;delete d.onload;delete d.check;delete d.document;b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e()}}}).set(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return}$clear(c);e()}).periodical(50)}return b.inject(g.head)},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head)},image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=$(d)||new Element("img");["load","abort","error"].each(function(e){var f="on"+e;var g=b[f];delete b[f];d[f]=function(){if(!d){return}if(!a.parentNode){a.width=d.width;a.height=d.height}d=d.onload=d.onabort=d.onerror=null;g.delay(1,a,a);a.fireEvent(e,a,1)}});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1)}return a.set(b)},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty},c);d=$splat(d);var a=[];var b=0;return new Elements(d.map(function(e){return Asset.image(e,{onload:function(){c.onProgress.call(this,b,d.indexOf(e));b++;if(b==d.length){c.onComplete()}}})}))}};var Tips=new Class({Implements:[Events,Options],options:{onShow:function(a){a.setStyle("visibility","visible")},onHide:function(a){a.setStyle("visibility","hidden")},title:"title",text:function(a){return a.get("rel")||a.get("href")},showDelay:100,hideDelay:100,className:null,offset:{x:16,y:16},fixed:false},initialize:function(){var a=Array.link(arguments,{options:Object.type,elements:$defined});if(a.options&&a.options.offsets){a.options.offset=a.options.offsets}this.setOptions(a.options);this.container=new Element("div",{"class":"tip"});this.tip=this.getTip();if(a.elements){this.attach(a.elements)}},getTip:function(){return new Element("div",{"class":this.options.className,styles:{visibility:"hidden",display:"none",position:"absolute",top:0,left:0}}).adopt(new Element("div",{"class":"tip-top"}),this.container,new Element("div",{"class":"tip-bottom"})).inject(document.body)},attach:function(b){var a=function(d,c){if(d==null){return""}return $type(d)=="function"?d(c):c.get(d)};$$(b).each(function(d){var e=a(this.options.title,d);d.erase("title").store("tip:native",e).retrieve("tip:title",e);d.retrieve("tip:text",a(this.options.text,d));var c=["enter","leave"];if(!this.options.fixed){c.push("move")}c.each(function(f){d.addEvent("mouse"+f,d.retrieve("tip:"+f,this["element"+f.capitalize()].bindWithEvent(this,d)))},this)},this);return this},detach:function(a){$$(a).each(function(c){["enter","leave","move"].each(function(d){c.removeEvent("mouse"+d,c.retrieve("tip:"+d)||$empty)});c.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");if($type(this.options.title)=="string"&&this.options.title=="title"){var b=c.retrieve("tip:native");if(b){c.set("title",b)}}},this);return this},elementEnter:function(b,a){$A(this.container.childNodes).each(Element.dispose);["title","text"].each(function(d){var c=a.retrieve("tip:"+d);if(!c){return}this[d+"Element"]=new Element("div",{"class":"tip-"+d}).inject(this.container);this.fill(this[d+"Element"],c)},this);this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this,a);this.tip.setStyle("display","block");this.position((!this.options.fixed)?b:{page:a.getPosition()})},elementLeave:function(b,a){$clear(this.timer);this.tip.setStyle("display","none");this.timer=this.hide.delay(this.options.hideDelay,this,a)},elementMove:function(a){this.position(a)},position:function(d){var b=window.getSize(),a=window.getScroll(),e={x:this.tip.offsetWidth,y:this.tip.offsetHeight},c={x:"left",y:"top"},f={};for(var g in c){f[c[g]]=d.page[g]+this.options.offset[g];if((f[c[g]]+e[g]-a[g])>b[g]){f[c[g]]=d.page[g]-this.options.offset[g]-e[g]}}this.tip.setStyles(f)},fill:function(a,b){if(typeof b=="string"){a.set("html",b)}else{a.adopt(b)}},show:function(a){this.fireEvent("show",[this.tip,a])},hide:function(a){this.fireEvent("hide",[this.tip,a])}});
   510.5 \ No newline at end of file
   511.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   511.2 +++ b/e2gallerypro/e2upload/manager.php	Mon Feb 22 08:02:39 2010 -0500
   511.3 @@ -0,0 +1,19 @@
   511.4 +<?php
   511.5 +include('../e2config.php');
   511.6 +include('Backend/FileManager.php');
   511.7 +
   511.8 +// Please add your own authentication here
   511.9 +function UploadIsAuthenticated($get){
  511.10 +	if(!empty($get['session'])) return true;
  511.11 +	
  511.12 +	return false;
  511.13 +}
  511.14 +
  511.15 +$browser = new FileManager(array(
  511.16 +	'directory' => GALLERY_LOCATION,
  511.17 +	'assetBasePath' => 'Assets',
  511.18 +	'upload' => true,
  511.19 +	'destroy' => true,
  511.20 +));
  511.21 +
  511.22 +$browser->fireEvent(!empty($_GET['event']) ? $_GET['event'] : null);
  511.23 \ No newline at end of file
   512.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   512.2 +++ b/e2gallerypro/e2upload/managerxml.php	Mon Feb 22 08:02:39 2010 -0500
   512.3 @@ -0,0 +1,19 @@
   512.4 +<?php
   512.5 +include('../e2config.php');
   512.6 +include('Backend/FileManager.php');
   512.7 +
   512.8 +// Please add your own authentication here
   512.9 +function UploadIsAuthenticated($get){
  512.10 +	if(!empty($get['session'])) return true;
  512.11 +	
  512.12 +	return false;
  512.13 +}
  512.14 +
  512.15 +$browser = new FileManager(array(
  512.16 +	'directory' => XML_LOCATION,
  512.17 +	'assetBasePath' => 'Assets',
  512.18 +	'upload' => true,
  512.19 +	'destroy' => true,
  512.20 +));
  512.21 +
  512.22 +$browser->fireEvent(!empty($_GET['event']) ? $_GET['event'] : null);
  512.23 \ No newline at end of file
   513.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   513.2 +++ b/e2gallerypro/e2upload/outputxml.php	Mon Feb 22 08:02:39 2010 -0500
   513.3 @@ -0,0 +1,420 @@
   513.4 +<?php include('../e2config.php'); include ("password_protect.php"); ?>
   513.5 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   513.6 +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   513.7 +<html xmlns="http://www.w3.org/1999/xhtml">
   513.8 +<head>
   513.9 +	<title>(E)2 Gallery Pro File Manager</title>
  513.10 +	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  513.11 +	<link rel="shortcut icon" href="http://e2interactive.com/favicon.ico" />
  513.12 +	<style type="text/css">
  513.13 +	body {
  513.14 +		font-size: 11px;
  513.15 +		font-family: Tahoma, sans-serif;
  513.16 +		background: #F1F1F1 url(images/bodybg.png) repeat-x top center;
  513.17 +	}	
  513.18 +	.dsep{
  513.19 +		clear:both;
  513.20 +		border-bottom: dotted 1px #999;
  513.21 +		margin:20px 0;
  513.22 +	}
  513.23 +	#maincontent img{
  513.24 +		margin: 0 10px 10px;
  513.25 +	}
  513.26 +	#container #header {
  513.27 +	background-image: url(images/adminheader.png);
  513.28 +	background-repeat: no-repeat;
  513.29 +	background-position: center top;
  513.30 +	width:750px;
  513.31 +	text-align: center;
  513.32 +	height: 87px;
  513.33 +	}
  513.34 +	#container {
  513.35 +		text-align: center;
  513.36 +		width: 750px;
  513.37 +		margin:0 auto;
  513.38 +	}
  513.39 +	#container #maincontent {
  513.40 +		text-align: left;
  513.41 +		padding: 10px 10px;
  513.42 +		border: dotted #CCC 1px;
  513.43 +		-moz-border-radius: 10px;
  513.44 +		-khtml-border-radius: 10px;
  513.45 +		-webkit-border-radius: 10px;
  513.46 +		border-radius: 10px;
  513.47 +		margin-top: 10px;
  513.48 +		background: #E1E1E1;
  513.49 +	}
  513.50 +	#container #navigation {
  513.51 +		height: 35px;
  513.52 +		padding: 0 10px;
  513.53 +	}
  513.54 +	#navigation #manage, #navigation #managexml, #navigation #outputxml, #navigation #seegallery {
  513.55 +		background-image: url(images/tab_bg.png);
  513.56 +		background-repeat: repeat-x;
  513.57 +		background-position: center top;
  513.58 +		height: 19px;
  513.59 +		float: left;
  513.60 +		padding: 5px 6px 0;
  513.61 +		margin: 1px 5px 5px;
  513.62 +		border-left: solid 1px #CCC;
  513.63 +		border-right: solid 1px #CCC;
  513.64 +		border-bottom: solid 1px #CCC;
  513.65 +		-moz-border-radius: 0 0 5px 5px;
  513.66 +		-webkit-border-bottom-left-radius: 5px;
  513.67 +		-webkit-border-bottom-right-radius: 5px;
  513.68 +		-khtml-border-bottom-left-radius: 5px;
  513.69 +		-khtml-border-bottom-right-radius: 5px;
  513.70 +		border-bottom-left-radius: 5px;
  513.71 +		border-bottom-right-radius: 5px;
  513.72 +		cursor:pointer;
  513.73 +	}
  513.74 +	 #navigation #logout{
  513.75 +		background-image: url(images/tab_bg.png);
  513.76 +		background-repeat: repeat-x;
  513.77 +		background-position: center top;
  513.78 +		height: 19px;
  513.79 +		float: right;
  513.80 +		padding: 5px 6px 0;
  513.81 +		margin: 1px 5px 5px;
  513.82 +		border-left: solid 1px #CCC;
  513.83 +		border-right: solid 1px #CCC;
  513.84 +		border-bottom: solid 1px #CCC;
  513.85 +		-moz-border-radius: 0 0 5px 5px;
  513.86 +		-webkit-border-bottom-left-radius: 5px;
  513.87 +		-webkit-border-bottom-right-radius: 5px;
  513.88 +		-khtml-border-bottom-left-radius: 5px;
  513.89 +		-khtml-border-bottom-right-radius: 5px;
  513.90 +		border-bottom-left-radius: 5px;
  513.91 +		border-bottom-right-radius: 5px;
  513.92 +		cursor:pointer;
  513.93 +	}
  513.94 +	#navigation a{
  513.95 +		text-decoration:none;
  513.96 +		color:#333;
  513.97 +	}
  513.98 +	#navigation a:hover{
  513.99 +		text-decoration:underline;
 513.100 +		color:#333;
 513.101 +	}
 513.102 +	.xmloutput{
 513.103 +		padding:15px;
 513.104 +		background: #FFF;
 513.105 +		margin:10px 3px;
 513.106 +	}
 513.107 +	#maincontent .textinput{
 513.108 +		width:550px;
 513.109 +		font:16px "Trebuchet MS", Verdana, Arial, sans-serif;
 513.110 +	}
 513.111 +	#maincontent .alrignright{
 513.112 +		float:right;
 513.113 +	}
 513.114 +	.floatleft{
 513.115 +		float:left;
 513.116 +		padding:0 15px;
 513.117 +	}
 513.118 +	.clear{
 513.119 +		clear:both;
 513.120 +	}
 513.121 +	.error{
 513.122 +		color:#990000;
 513.123 +		font-size:16px;
 513.124 +	}
 513.125 +	</style>
 513.126 +	
 513.127 +	<link rel="stylesheet" media="all" type="text/css" href="Css/FileManager.css" />
 513.128 +	<link rel="stylesheet" media="all" type="text/css" href="Css/Additions.css" />
 513.129 +
 513.130 +	<script type="text/javascript" src="js/mootools-core.js"></script>
 513.131 +	<script type="text/javascript" src="js/mootools-more.js"></script>
 513.132 +	
 513.133 +	<script type="text/javascript" src="Source/FileManager.js"></script>
 513.134 +	<script type="text/javascript" src="Source/Language/Language.en.js"></script>
 513.135 +	<script type="text/javascript" src="Source/Language/Language.de.js"></script>
 513.136 +	<script type="text/javascript" src="Source/Additions.js"></script>
 513.137 +	
 513.138 +	<script type="text/javascript" src="Source/Uploader/Fx.ProgressBar.js"></script>
 513.139 +	<script type="text/javascript" src="Source/Uploader/Swiff.Uploader.js"></script>
 513.140 +	
 513.141 +	<script type="text/javascript" src="Source/Uploader.js"></script>
 513.142 +	
 513.143 +	<script type="text/javascript">
 513.144 +		window.addEvent('domready', function(){
 513.145 +			/* Simple Example */
 513.146 +			var manager = new FileManager({
 513.147 +				url: 'manager.php',
 513.148 +				assetBasePath: 'Assets',
 513.149 +				language: 'en',
 513.150 +				uploadAuthData: {session: 'MySessionId'}
 513.151 +			});
 513.152 +			$('manage').addEvent('click', manager.show.bind(manager));
 513.153 +			
 513.154 +			/* XML upload*/
 513.155 +			var manager = new FileManager({
 513.156 +				url: 'managerxml.php',
 513.157 +				assetBasePath: 'Assets',
 513.158 +				language: 'en',
 513.159 +				uploadAuthData: {session: 'MySessionId'}
 513.160 +			});
 513.161 +			$('managexml').addEvent('click', manager.show.bind(manager));
 513.162 +
 513.163 +		});
 513.164 +	</script>
 513.165 +</head>
 513.166 +<body>
 513.167 +	<div id="container">
 513.168 +	<a href="index.php"><div id="header"></div></a>
 513.169 +	<div id="navigation">
 513.170 +		<div id="manage">Upload/Manage Images</div>
 513.171 +		<div id="managexml">Upload/Edit XML</div>
 513.172 +		<a href="outputxml.php"><div id="outputxml">Output XML</div></a>
 513.173 +        <a href="../"><div id="seegallery">See Gallery</div></a>
 513.174 +		<a href="?logout=1"><div id="logout">Log Out</div></a>
 513.175 +	</div>
 513.176 +	<div id="maincontent">
 513.177 +		<a href="xml/e2galleryproXMLsample.xml" class="alrignright">Download XML Sample File</a>
 513.178 +		<h2>Output XML for Image Gallery</h2>
 513.179 +		Create the xml for the image inside which folder?  Set the folder to look at to create the XML automagically. 
 513.180 +        <br />
 513.181 +		<br />
 513.182 +		Default file paths are:<br />
 513.183 +		<?php 
 513.184 +			function rp($path) { 
 513.185 +				$out=array(); 
 513.186 +				foreach(explode('/', $path) as $i=>$fold){ 
 513.187 +					if ($fold=='' || $fold=='.') continue; 
 513.188 +					if ($fold=='..' && $i>0 && end($out)!='..') array_pop($out); 
 513.189 +				else $out[]= $fold; 
 513.190 +				} return ($path{0}=='/'?'/':'').join('/', $out); 
 513.191 +			} 
 513.192 +		?>
 513.193 +		<strong>Gallery Path:</strong> Galleries/gallery1/
 513.194 +		<br />
 513.195 +		<strong>Large Path:</strong> Galleries/gallery1/large/ 
 513.196 +		<br />
 513.197 + 		<strong>Thumbnail Path:</strong> Galleries/gallery1/thumbs/
 513.198 +		<br /><br />
 513.199 +		<?php
 513.200 +			
 513.201 +			function getImages($path, $thumbPath) {
 513.202 +			 
 513.203 +			   $files = array();
 513.204 +			   $fileNames = array();
 513.205 +			   $i = 0;
 513.206 +			   $errorMessage='';
 513.207 +			   if (is_dir($path)) {
 513.208 +				   if ($dh = opendir($path)) {
 513.209 +					   while (($file = readdir($dh)) !== false) {
 513.210 +						   if ($file == "." || $file == ".." || $file == ".DS_Store") continue;
 513.211 +						   $fullpath = $path . "/" . $file;
 513.212 +						   $fkey = strtolower($file);
 513.213 +						   while (array_key_exists($fkey,$fileNames)) $fkey .= " ";
 513.214 +						   $a = stat($fullpath);
 513.215 +						   $files[$fkey]['size'] = $a['size'];
 513.216 +						   if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
 513.217 +						   else if ($a['size'] > 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
 513.218 +						   else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
 513.219 +						   else $files[$fkey]['sizetext'] = $a['size'] . " bytes";
 513.220 +						   $files[$fkey]['name'] = $file;
 513.221 +						   $files[$fkey]['type'] = filetype($fullpath);
 513.222 +						   $fileNames[$i++] = $fkey;
 513.223 +					   }
 513.224 +					   closedir($dh);
 513.225 +				   } else {$errorMessage= true; echo "<strong class='error'>Cannot open directory:  $path | Fill out a valid Gallery Path</strong>";}
 513.226 +			   } else {$errorMessage= true; echo "<strong class='error'>Path is not a directory:  $path | Fill out a valid Gallery Path</strong>";}
 513.227 +			   sort($fileNames,SORT_STRING);
 513.228 +			   $sortedFiles = array();
 513.229 +			   $i = 0;
 513.230 +			   $photos = array();
 513.231 +			   $relativePath = rp( dirname($_SERVER['PHP_SELF']) );
 513.232 +			   if($errorMessage != true){
 513.233 +			   foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];
 513.234 +			   
 513.235 +			
 513.236 +				echo'Copy the below XML and create your XML file and upload it via the Upload XML button above:';
 513.237 +				echo'<a href="outputxml.php" class="alrignright">Reset Output</a><div class="clear"></div>';
 513.238 +				echo '<div class="xmloutput">';
 513.239 +				echo'&lt;gallery&gt;<br />';
 513.240 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;'.$_GET['gallerytitle'].'&lt;/title&gt;<br />';
 513.241 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;'.$_GET['galleryDescription'].'&lt;/description&gt;<br />';
 513.242 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;gallerypath&gt;'.$relativePath.'/'.$_GET['gallerypath'].'&lt;/gallerypath&gt; <br />';
 513.243 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;largeimgpath&gt;'.$relativePath.'/'.$_GET['largepath'].'&lt;/largeimgpath&gt;<br />';
 513.244 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;thumbpath&gt;'.$relativePath.'/'.$_GET['thumbpath'].'&lt;/thumbpath&gt;<br />';
 513.245 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;mainthumb&gt;'.$relativePath.'/'.$_GET['gallerypath'].'&lt;/mainthumb&gt;<br />';
 513.246 +				echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;mainthumbsrc&gt;mainthumb.jpg&lt;/mainthumbsrc&gt;<br />';
 513.247 +			   $j = 0;
 513.248 +			   
 513.249 +				   foreach ($sortedFiles as $file) {
 513.250 +			   
 513.251 +						if($file['type']!='dir'&& $file['name']!='mainthumb.jpg'){
 513.252 +						// get image sizes 
 513.253 +						list($width, $height, $type, $attr) = getimagesize($path."/".$file['name'], $info);
 513.254 +						$size = $file['sizetext'];
 513.255 +						if(isset($info['APP13'])){
 513.256 +							$iptc = iptcparse($info['APP13']);
 513.257 +							$title = $iptc['2#005'][0];
 513.258 +							if(isset($iptc['2#120'][0])){
 513.259 +								$description = $iptc['2#120'][0];
 513.260 +								$description = str_replace("\r", "<br/>", $description);
 513.261 +								$description = addslashes($description);
 513.262 +							}
 513.263 +							if(isset($iptc['2#025'][0])){
 513.264 +								$keywords = $iptc['2#025'][0];
 513.265 +							}
 513.266 +							$author = $iptc['2#080'][0];
 513.267 +							$copyright = $iptc['2#116'][0];
 513.268 +							
 513.269 +						}else if(isset($info['APP0']) && !isset($info['APP13'])){
 513.270 +							$iptc = iptcparse($info['APP0']);
 513.271 +							$title = $iptc['2#005'][0];
 513.272 +							$description = $iptc['2#120'][0];
 513.273 +							$description = str_replace("\r", "<br/>", $description);
 513.274 +							$description = addslashes($description);
 513.275 +							$keywords = $iptc['2#025'][0];
 513.276 +							$author = $iptc['2#080'][0];
 513.277 +							$copyright = $iptc['2#116'][0];						
 513.278 +						}else{
 513.279 +							$title = '';
 513.280 +							$description = '';
 513.281 +							$description = '';
 513.282 +							$keywords = '';
 513.283 +							$author = '';
 513.284 +							$copyright = '';
 513.285 +						}
 513.286 +						
 513.287 +							
 513.288 +							array_push($photos, $width);
 513.289 +							array_push($photos, $height);
 513.290 +							
 513.291 +							//echo'<image Thumb="galleries/'.$thumbePath.'/thumbs/'.$file[name].'"  Large="galleries/'.$path."/".$file[name].'"  Caption="'.$title.'" Colour="000000">';
 513.292 +							//'<copy><![CDATA['.$title.']]></copy>';
 513.293 +							//echo'</image>';
 513.294 +							
 513.295 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;item type="image"&gt;<br />';
 513.296 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;'.$title.'&lt;/title&gt;<br />';
 513.297 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;author&gt;'.$author.'&lt;/author&gt;<br />';
 513.298 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copyright&gt;'.$copyright.'&lt;/copyright&gt;<br />';
 513.299 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;'.$description.'&lt;/description&gt;<br />';
 513.300 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;src&gt;'.$file['name'].'&lt;/src&gt;<br />';
 513.301 +							echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;demensions width="'.$width.'" height="'.$height.'" /&gt;<br />';
 513.302 +							if(isset($_GET['largepath'])){
 513.303 +								$largePath = $_GET['largepath'];
 513.304 +								if(is_file($largePath."/".$file['name'])){
 513.305 +									list($largeWidth, $largeHeight, $largeType, $largeAttr) = getimagesize($largePath."/".$file['name'], $info);
 513.306 +									echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;large width="'.$largeWidth.'" height="'.$largeHeight.'" /&gt;<br />';
 513.307 +								}
 513.308 +							}
 513.309 +							if(isset($_GET['showforsale'])){
 513.310 +							$showforsale = $_GET['showforsale'];
 513.311 +							if($showforsale=='true'){
 513.312 +									if($_GET['currency']=="USD"){$currencySymbol='$';}else if($_GET['currency']=="EURO"){$currencySymbol='&euro;';}
 513.313 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sellprint type="'.$_GET['checkouttype'].'" currency="'.$_GET['currency'].'" currencysymbol="'.$currencySymbol.'"&gt;<br />';
 513.314 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price size="8x10"&gt;15&lt;/price&gt;<br />';
 513.315 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price size="11x14"&gt;25&lt;/price&gt;<br />';
 513.316 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price size="16x20"&gt;55&lt;/price&gt;<br />';
 513.317 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;price size="20x24"&gt;65&lt;/price&gt;<br />';
 513.318 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/sellprint&gt;<br />';
 513.319 +								}
 513.320 +								echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;<br />';
 513.321 +								
 513.322 +								$j++;
 513.323 +							}
 513.324 +						}
 513.325 +					
 513.326 +					}
 513.327 +					echo'&nbsp;&nbsp;&nbsp;&nbsp;&lt;totalitems&gt;'.$j.'&lt;/totalitems&gt;<br />';
 513.328 +					echo'&lt;/gallery&gt;<br />';
 513.329 +					echo'</div>';
 513.330 +				}
 513.331 +			}
 513.332 +			if(isset($_GET['gallerypath'])&&isset($_GET['thumbpath'])){
 513.333 +				getImages($_GET['gallerypath'], $_GET['thumbpath'] );
 513.334 +			?>
 513.335 +            <a href="outputxml.php" class="alrignright">Reset Output</a><div class="clear"></div>
 513.336 +			<h2>Create New Gallery XML:</h2><br />
 513.337 +			<br />
 513.338 +			 <form name="form1" method="get" action="<?php echo $_SERVER['PHP_SELF'] ;?>"> 
 513.339 +				<label id="gallerytitle"><strong>Gallery Title</strong></label>
 513.340 +				<br />
 513.341 +				<input type="text" class="textinput" name="gallerytitle" value="" />
 513.342 +				<br /><br />
 513.343 +				<label id="galleryDescription"><strong>Gallery Description</strong> <small>(No Special Characters)</small></label>
 513.344 +				<br />
 513.345 +				<textarea name="galleryDescription" rows="4" class="textinput"></textarea>
 513.346 +				<br /><br />
 513.347 +				<label id="gallerypath"><strong>Gallery Path</strong></label>
 513.348 +				<br />
 513.349 +				<input type="text" class="textinput" name="gallerypath" value="Galleries/gallery1/" />
 513.350 +				<br /><br />
 513.351 +				<label id="thumbpath"><strong>Thumbnail Path</strong></label>
 513.352 +				<br />
 513.353 +				<input type="text" class="textinput" name="thumbpath" value="Galleries/gallery1/thumbs/" />
 513.354 +				<br /> <br />
 513.355 +                <label id="largepath"><strong>Large Path</strong></label>
 513.356 +				<br />
 513.357 +				<input type="text" class="textinput" name="largepath" value="Galleries/gallery1/large/" /> <br />
 513.358 +				<small>(Fill out path even if you uploaded no large images it will detect that they're not there. unless there is no large folder)</small>
 513.359 +				<br /> <br />
 513.360 +				<div class="floatleft"><h3>Sell Prints?</h3>
 513.361 +				<input type="radio" name="showforsale" id="true" value="true" align="absmiddle" /><label for="true">Yes</label> <input type="radio" id="false" name="showforsale" value="false" align="absmiddle" /><label for="false">No</label>
 513.362 +                <br /> <br /></div>
 513.363 +                <div class="floatleft"><h3>Checkout Type</h3>
 513.364 +                 <input type="radio" value="google" name="checkouttype" id="google" align="absmiddle" /><label for="google">Google Checkout</label>  <input type="radio" id="paypal" value="paypal" name="checkouttype" align="absmiddle" /><label for="paypal">Paypal</label>
 513.365 +				<br /> <br /></div>
 513.366 +				
 513.367 +                <div class="floatleft"><h3>Currency:</h3>
 513.368 +				<input type="radio" value="USD" name="currency" id="USD" align="absmiddle" /><label for="USD">USD</label>  <input type="radio" id="EURO" value="EURO" name="currency" align="absmiddle" /><label for="EURO">EURO</label>
 513.369 +				<br /> <br /></div>
 513.370 +				<div class="clear"></div>
 513.371 +				<input type="submit" name="submit" value="Output XML"> 
 513.372 +			</form>		
 513.373 +			<br />
 513.374 +			<?php
 513.375 +			}else{
 513.376 +			?>
 513.377 +            <form name="form1" method="get" action="<?php echo $_SERVER['PHP_SELF'] ;?>"> 
 513.378 +				<label id="gallerytitle"><strong>Gallery Title</strong></label>
 513.379 +				<br />
 513.380 +				<input type="text" class="textinput" name="gallerytitle" value="" />
 513.381 +				<br /><br />
 513.382 +				<label id="galleryDescription"><strong>Gallery Description</strong> <small>(No Special Characters)</small></label>
 513.383 +				<br />
 513.384 +				<textarea name="galleryDescription" rows="4" class="textinput"></textarea>
 513.385 +				<br /><br />
 513.386 +				<label id="gallerypath"><strong>Gallery Path</strong></label>
 513.387 +				<br />
 513.388 +				<input type="text" class="textinput" name="gallerypath" value="Galleries/gallery1/" />
 513.389 +				<br /><br />
 513.390 +				<label id="thumbpath"><strong>Thumbnail Path</strong></label>
 513.391 +				<br />
 513.392 +				<input type="text" class="textinput" name="thumbpath" value="Galleries/gallery1/thumbs/" />
 513.393 +				<br /> <br />
 513.394 +                <label id="largepath"><strong>Large Path</strong></label>
 513.395 +				<br />
 513.396 +				<input type="text" class="textinput" name="largepath" value="Galleries/gallery1/large/" /> <br />
 513.397 +				<small>(Fill out path even if you uploaded no large images it will detect that they're not there. unless there is no large folder)</small>
 513.398 +				<br /> <br />
 513.399 +				<div class="floatleft"><h3>Sell Prints?</h3>
 513.400 +				<input type="radio" name="showforsale" id="true" value="true" align="absmiddle" /><label for="true">Yes</label> <input type="radio" id="false" name="showforsale" value="false" align="absmiddle" /><label for="false">No</label>
 513.401 +                <br /> <br /></div>
 513.402 +                <div class="floatleft"><h3>Checkout Type</h3>
 513.403 +                 <input type="radio" value="google" name="checkouttype" id="google" align="absmiddle" /><label for="google">Google Checkout</label>  <input type="radio" id="paypal" value="paypal" name="checkouttype" align="absmiddle" /><label for="paypal">Paypal</label>
 513.404 +				<br /> <br /></div>
 513.405 +				
 513.406 +                <div class="floatleft"><h3>Currency:</h3>
 513.407 +				<input type="radio" value="USD" name="currency" id="USD" align="absmiddle" /><label for="USD">USD</label>  <input type="radio" id="EURO" value="EURO" name="currency" align="absmiddle" /><label for="EURO">EURO</label>
 513.408 +				<br /> <br /></div>
 513.409 +				<div class="clear"></div>
 513.410 +				<input type="submit" name="submit" value="Output XML"> 
 513.411 +			</form>		
 513.412 +			<?php
 513.413 +			}
 513.414 +			?>
 513.415 +			
 513.416 +			
 513.417 +			
 513.418 +
 513.419 +		<div class="dsep"></div>
 513.420 +	</div>
 513.421 +</div>
 513.422 +</body>
 513.423 +</html>
 513.424 \ No newline at end of file
   514.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   514.2 +++ b/e2gallerypro/e2upload/password_protect.php	Mon Feb 22 08:02:39 2010 -0500
   514.3 @@ -0,0 +1,199 @@
   514.4 +<?php
   514.5 +
   514.6 +###############################################################
   514.7 +#
   514.8 +# Page Password Protect 2.13
   514.9 +# MODIFIED FOR INCORPORATION WITH e2 Photo Gallery
  514.10 +# Name of cookie set has been changed from original script writers default to a specific name of e2verify
  514.11 +# Some instructions and notifications on this page have been altered to make things more clear
  514.12 +# Authors original login form has been altered to match original e2 login form
  514.13 +#
  514.14 +###############################################################
  514.15 +# Visit http://www.zubrag.com/scripts/ for original unmodified script and updates
  514.16 +############################################################### 
  514.17 +# Usage:
  514.18 +# Set usernames / passwords below between SETTINGS START and SETTINGS END.
  514.19 +# Place Script inside e2 Photos gallery uploader folder
  514.20 +# Add include of this script to all files being protected on VERY FIRST LINE ON PAGE 
  514.21 +#    Example: include ('password_protect.php);
  514.22 +#
  514.23 +# Add following HTML code to your page where you want to have logout link
  514.24 +# <a href="http://www.example.com/path/to/protected/page.php?logout=1">Logout</a>
  514.25 +#
  514.26 +###############################################################
  514.27 +
  514.28 +/*
  514.29 +-------------------------------------------------------------------
  514.30 +SAMPLE if you only want to request login and password on login form.
  514.31 +Each row represents different user.
  514.32 +Each row requires a comma in the end of it execpt the last
  514.33 +
  514.34 +$LOGIN_INFORMATION = array(
  514.35 +  'zubrag' => 'root',
  514.36 +  'test' => 'testpass',
  514.37 +  'admin' => 'passwd'
  514.38 +);
  514.39 +
  514.40 +--------------------------------------------------------------------
  514.41 +SAMPLE if you only want to request only password on login form so only passwords are listed and required to login
  514.42 +Note: You will have to modify line 59 of this code to read false, and replace lines 52-56 with the sample array below 
  514.43 +
  514.44 +$LOGIN_INFORMATION = array(
  514.45 +  'root',
  514.46 +  'testpass',
  514.47 +  'passwd'
  514.48 +);
  514.49 +
  514.50 +--------------------------------------------------------------------
  514.51 +*/
  514.52 +
  514.53 +///////////////////////////////////////////////////////
  514.54 +// do not change code below
  514.55 +///////////////////////////////////////////////////////
  514.56 +
  514.57 +// show usage example
  514.58 +if(isset($_GET['help'])) {
  514.59 +  die('Include following code into every page you would like to protect, at the very beginning (first line):<br>&lt;?php include("' . str_replace('\\','\\\\',__FILE__) . '"); ?&gt;');
  514.60 +}
  514.61 +
  514.62 +// timeout in seconds
  514.63 +$timeout = (TIMEOUT_MINUTES == 0 ? 0 : time() + TIMEOUT_MINUTES * 60);
  514.64 +
  514.65 +// logout?
  514.66 +if(isset($_GET['logout'])) {
  514.67 +  setcookie("e2verify", '', $timeout, '/'); // clear password;
  514.68 +  header('Location: ' . LOGOUT_URL);
  514.69 +  exit();
  514.70 +}
  514.71 +
  514.72 +if(!function_exists('showLoginPasswordProtect')) {
  514.73 +
  514.74 +// show login form
  514.75 +function showLoginPasswordProtect($error_msg) {
  514.76 +?>
  514.77 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  514.78 +<html xmlns="http://www.w3.org/1999/xhtml">
  514.79 +
  514.80 +<head profile="http://gmpg.org/xfn/11">
  514.81 +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  514.82 +  <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
  514.83 +  <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
  514.84 +<title>(E)2 Gallery Pro Log In</title> 
  514.85 +<link href="rsrc/style.css" rel="stylesheet" type="text/css">
  514.86 +<style type="text/css">
  514.87 +<!--
  514.88 +body{
  514.89 +	font:16px "Trebuchet MS", Verdana, Arial, sans-serif;
  514.90 +	background: #F1F1F1 url(images/bodybg.png) repeat-x top center;
  514.91 +}
  514.92 +#login #header {
  514.93 +	background-image: url(images/loginheader.png);
  514.94 +	background-repeat: no-repeat;
  514.95 +	background-position: center top;
  514.96 +	height: 72px;
  514.97 +	width: 260px;
  514.98 +}
  514.99 +#login {
 514.100 +	width: 260px;
 514.101 +	margin: 25px auto;
 514.102 +}
 514.103 +#login #loginform {
 514.104 +	margin: 0px auto;
 514.105 +	padding: 9px;
 514.106 +	width: 220px;
 514.107 +	background: #E1E1E1;
 514.108 +	border-left: solid 1px #CCC;
 514.109 +	border-right: solid 1px #CCC;
 514.110 +	border-bottom: solid 1px #CCC;
 514.111 +	-moz-border-radius: 0 0 10px 10px;
 514.112 +	-webkit-border-bottom-left-radius: 10px;
 514.113 +	-webkit-border-bottom-right-radius: 10px;
 514.114 +	-khtml-border-bottom-left-radius: 10px;
 514.115 +	-khtml-border-bottom-right-radius: 10px;
 514.116 +	border-bottom-left-radius: 10px;
 514.117 +	border-bottom-right-radius: 10px;
 514.118 +}
 514.119 +input{
 514.120 +	width:98%;
 514.121 +	font:16px "Trebuchet MS", Verdana, Arial, sans-serif;
 514.122 +}
 514.123 +#login #loginform h2 {
 514.124 +	margin: 0px;
 514.125 +	padding: 0px;
 514.126 +}
 514.127 +-->
 514.128 +</style>
 514.129 +</head> 
 514.130 +<body> 
 514.131 +<div id="login">
 514.132 +	<div id="header"></div>
 514.133 +    <div id="loginform">
 514.134 +    <h2>Login</h2>
 514.135 +        <font color="red"><?php echo $error_msg; ?></font><br />
 514.136 +            <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ;?>"> 
 514.137 +        	<?php if (USE_USERNAME) echo '<label id="username"><strong>Username</strong></label><br /><input type="text" name="access_login"><br /><br />'; ?> 
 514.138 +              <label id="password"><strong>Password</strong></label><br />
 514.139 +                <input type="password" name="access_password"><br /><br /> 
 514.140 +                <input type="submit" name="submit" value="Login"> 
 514.141 +            </form>
 514.142 +     </div>
 514.143 +</div>
 514.144 +</body> 
 514.145 +</html> 
 514.146 +
 514.147 +<?php
 514.148 +  // stop at this point
 514.149 +  die();
 514.150 +}
 514.151 +}
 514.152 +
 514.153 +// user provided password
 514.154 +if (isset($_POST['access_password'])) {
 514.155 +
 514.156 +  $login = isset($_POST['access_login']) ? $_POST['access_login'] : '';
 514.157 +  $pass = $_POST['access_password'];
 514.158 +  if (!USE_USERNAME && !in_array($pass, $LOGIN_INFORMATION)
 514.159 +  || (USE_USERNAME && ( !array_key_exists($login, $LOGIN_INFORMATION) || $LOGIN_INFORMATION[$login] != $pass ) ) 
 514.160 +  ) {
 514.161 +    showLoginPasswordProtect("Incorrect login information.");
 514.162 +  }
 514.163 +  else {
 514.164 +    // set cookie if password was validated
 514.165 +    setcookie("e2verify", md5($login.'%'.$pass), $timeout, '/');
 514.166 +    
 514.167 +    // Some programs (like Form1 Bilder) check $_POST array to see if parameters passed
 514.168 +    // So need to clear password protector variables
 514.169 +    unset($_POST['access_login']);
 514.170 +    unset($_POST['access_password']);
 514.171 +    unset($_POST['Submit']);
 514.172 +  }
 514.173 +
 514.174 +}
 514.175 +
 514.176 +else {
 514.177 +
 514.178 +  // check if password cookie is set
 514.179 +  if (!isset($_COOKIE['e2verify'])) {
 514.180 +    showLoginPasswordProtect("");
 514.181 +  }
 514.182 +
 514.183 +  // check if cookie is good
 514.184 +  $found = false;
 514.185 +  foreach($LOGIN_INFORMATION as $key=>$val) {
 514.186 +    $lp = (USE_USERNAME ? $key : '') .'%'.$val;
 514.187 +    if ($_COOKIE['e2verify'] == md5($lp)) {
 514.188 +      $found = true;
 514.189 +      // prolong timeout
 514.190 +      if (TIMEOUT_CHECK_ACTIVITY) {
 514.191 +        setcookie("e2verify", md5($lp), $timeout, '/');
 514.192 +      }
 514.193 +      break;
 514.194 +    }
 514.195 +  }
 514.196 +  if (!$found) {
 514.197 +    showLoginPasswordProtect("");
 514.198 +  }
 514.199 +
 514.200 +}
 514.201 +
 514.202 +?>
   515.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   515.2 +++ b/e2gallerypro/e2upload/xml/e2gallery.xml	Mon Feb 22 08:02:39 2010 -0500
   515.3 @@ -0,0 +1,1 @@
   515.4 +<?xml version='1.0' encoding='utf-8'?>
   515.5 <galleries>
   515.6 	<!--Gallery 1-->
   515.7 	<gallery>
   515.8 		<title>(E)2 Gallery Demo</title>
   515.9 		<description>(E)2 Gallery Demo Gallery Description </description>
  515.10 		<gallerypath>/e2gallerypro/e2upload/Galleries/gallery1/</gallerypath> 
  515.11 		<largeimgpath>/e2gallerypro/e2upload/Galleries/gallery1/large/</largeimgpath>
  515.12 		<thumbpath>/e2gallerypro/e2upload/Galleries/gallery1/thumbs/</thumbpath>
  515.13 		<mainthumb>/e2gallerypro/e2upload/Galleries/gallery1/</mainthumb>
  515.14 		<mainthumbsrc>mainthumb.jpg</mainthumbsrc>
  515.15 		<item type="image">
  515.16 			<title>Cloud Rays</title>
  515.17 			<author>E2interactive</author>
  515.18 			<copyright>Copyright E2interactive</copyright>
  515.19 			<description>Looking up to the sky while the clouds pass on a summer day</description>
  515.20 			<src>DSC_0670.jpg</src>
  515.21 			<demensions width="760" height="509" />
  515.22 			<large width="1200" height="803" />
  515.23 			<sellprint type="paypal" currency="USD" currencysymbol="$">
  515.24 				<price size="8x10 Print">35</price>
  515.25 				<price size="11x14 Print">45</price>
  515.26 				<price size="16x20 Print">65</price>
  515.27 			</sellprint>
  515.28 		</item>
  515.29 		<item type="image">
  515.30 			<title>Down the Tracks</title>
  515.31 			<author>E2interactive</author>
  515.32 			<copyright>Copyright E2interactive 2007</copyright>
  515.33 			<description>Looking across the bridge over the Crocked River in Crocked River Ranch Oregon</description>
  515.34 			<src>DSC_2051.jpg</src>
  515.35 			<demensions width="335" height="500" />
  515.36 			<large width="536" height="800" />
  515.37 			<sellprint type="google" currency="USD" currencysymbol="$">
  515.38 				<price size="8x10">15</price>
  515.39 				<price size="11x14">25</price>
  515.40 				<price size="16x20">55</price>
  515.41 				<price size="20x24">65</price>
  515.42 			</sellprint>
  515.43 		</item>
  515.44 		<item type="image">
  515.45 			<title>Sit Down</title>
  515.46 			<author>E2interactive</author>
  515.47 			<copyright>Copyright E2interactive</copyright>
  515.48 			<description></description>
  515.49 			<src>DSC_2343.jpg</src>
  515.50 			<demensions width="760" height="505" />
  515.51 			<large width="1200" height="798" />
  515.52 			<sellprint type="google" currency="USD" currencysymbol="$">
  515.53 				<price size="8x10">15</price>
  515.54 				<price size="11x14">25</price>
  515.55 				<price size="16x20">55</price>
  515.56 				<price size="20x24">65</price>
  515.57 			</sellprint>
  515.58 		</item>
  515.59 		<item type="image">
  515.60 			<title>Sky High</title>
  515.61 			<author>E2interactive</author>
  515.62 			<copyright>Copyright E2interactive</copyright>
  515.63 			<description>Went to the local race track to watch riders on the Motocross track. There was this kid on a small 125cc just screaming around the track showing all the older kids how to ride.</description>
  515.64 			<src>DSC_7850.jpg</src>
  515.65 			<demensions width="760" height="509" />
  515.66 			<large width="1200" height="803" />
  515.67 			<sellprint type="google" currency="USD" currencysymbol="$">
  515.68 				<price size="8x10">15</price>
  515.69 				<price size="11x14">25</price>
  515.70 				<price size="16x20">55</price>
  515.71 				<price size="20x24">65</price>
  515.72 			</sellprint>
  515.73 		</item>
  515.74 		<item type="image">
  515.75 			<title>Untitled Ceiling</title>
  515.76 			<author>E2interactive</author>
  515.77 			<copyright>Copyright E2interactive</copyright>
  515.78 			<description>I liked the lines of this ceiling so I took an image of it.</description>
  515.79 			<src>E29_2000.jpg</src>
  515.80 			<demensions width="760" height="509" />
  515.81 			<large width="1200" height="803" />
  515.82 			<sellprint type="google" currency="USD" currencysymbol="$">
  515.83 				<price size="8x10">15</price>
  515.84 				<price size="11x14">25</price>
  515.85 				<price size="16x20">55</price>
  515.86 				<price size="20x24">65</price>
  515.87 			</sellprint>
  515.88 		</item>
  515.89 		<totalitems>5</totalitems>
  515.90 	</gallery>
  515.91 	<gallery>
  515.92 	<!--Gallery Settings-->
  515.93 		<totalitems>4</totalitems>
  515.94 		<title>Gallery Title</title>
  515.95 		<description>Gallery Description</description>
  515.96 		<gallerypath>/e2gallerypro/e2upload/Galleries/gallery2/</gallerypath> 
  515.97 		<largeimgpath>/e2gallerypro/e2upload/Galleries/gallery2/large/</largeimgpath>
  515.98 		<thumbpath>/e2gallerypro/e2upload/Galleries/gallery2/thumbs/</thumbpath>
  515.99 		<mainthumb>/e2gallerypro/e2upload/Galleries/gallery2/</mainthumb>
 515.100 		<mainthumbsrc>mainthumb.jpg</mainthumbsrc> <!--Main Thumb Size: 195x128-->
 515.101 	<!--Gallery Settings End-->
 515.102 			<!--Gallery Items (Media Files Format, Everything but images)-->
 515.103 			<item type="youtube">
 515.104 			<!--Supported types [flv, mp4, mov, swf, blip, dailymotion, flickr, googlevideo, metacafe, myspace, revver, rutube, seesmicm, tudou, youku, youtube, veoh, viddler, vimeo, 12seconds]-->
 515.105 				<mediaURL>http://www.youtube.com/watch?v=CQE5OQiLFPo</mediaURL>
 515.106 				<title>E2 Gallery Pro Intro</title>
 515.107 				<author>(E)2Interactive</author>
 515.108 				<copyright>(E)2Interactive</copyright>
 515.109 				<description>View the intro to (E)2 Gallery Pro</description>
 515.110 				<src>/e2gallerypro/e2upload/Galleries/gallery2/mainthumb.jpg</src>
 515.111 				<demensions width="640" height="400" />
 515.112 			</item>
 515.113 			<item type="vimeo">
 515.114 			<!--Supported types [flv, mp4, mov, swf, blip, dailymotion, flickr, googlevideo, metacafe, myspace, revver, rutube, seesmicm, tudou, youku, youtube, veoh, viddler, vimeo, 12seconds]-->
 515.115 				<mediaURL>http://vimeo.com/5263580</mediaURL>
 515.116 				<title>Moab 2009</title>
 515.117 				<author>(E)2Interactive</author>
 515.118 				<copyright>(E)2Interactive</copyright>
 515.119 				<description>Went on a trip to Moab to ride the trails and Take some timelapse imagery, we hit the Moab Porcupine Rim Trail. The ride wiped me out and I didn\'t get to take any timelapse, but I got some photos I\'m happy with. Here is a video I put together about the trip.</description>
 515.120 				<src>http://static.flickr.com/3416/3589545487_067b0e33ff.jpg</src>
 515.121 				<demensions width="670" height="377" />
 515.122 			</item>
 515.123 		<!--Gallery ItemsEnd-->
 515.124 	</gallery>
 515.125 </galleries>
 515.126 \ No newline at end of file
   516.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   516.2 +++ b/e2gallerypro/e2upload/xml/e2galleryproXMLsample.xml	Mon Feb 22 08:02:39 2010 -0500
   516.3 @@ -0,0 +1,51 @@
   516.4 +<?xml version="1.0" encoding="UTF-8"?>
   516.5 +<galleries>
   516.6 +	<!--Gallery 1-->
   516.7 +	<gallery>
   516.8 +	
   516.9 +	<!--Gallery Settings-->
  516.10 +		<totalitems>Total Item Count</totalitems>
  516.11 +		<title>Gallery Title</title>
  516.12 +		<description>Gallery Description</description>
  516.13 +		<gallerypath>/main/gallery/path/</gallerypath> 
  516.14 +		<largeimgpath>/large/image/gallery/path/</largeimgpath>
  516.15 +		<thumbpath>/thumbnail/path/</thumbpath>
  516.16 +		<mainthumb>/mainthumb/path/</mainthumb>
  516.17 +		<mainthumbsrc>main thumb image name</mainthumbsrc>
  516.18 +	<!--Gallery Settings End-->
  516.19 +			
  516.20 +		<!--Gallery Items-->
  516.21 +			<item type="image"> 
  516.22 +			<!--Supported types [image]-->
  516.23 +			  <title>Image Title</title>
  516.24 +			  <author>Image Author Name</author>
  516.25 +			  <copyright>Copyright Name (No Special Characters)</copyright>
  516.26 +			  <description>Image Description</description>
  516.27 +			  <src>item name</src>
  516.28 +			  <demensions width="762" height="510" />
  516.29 +			  <large width="1000" height="670" /><!--Optional to show Large Image-->
  516.30 +			  <!--Two Selling Options(Optional): [google, paypal]-->
  516.31 +			  <sellprint type="google" currency="USD" currencysymbol="$"><!--Supported Currency Symbols [$ | &euro; | &pound;]-->
  516.32 +				<price size="8x10">15</price>
  516.33 +				<price size="11x14">25</price>
  516.34 +				<price size="16x20">55</price>
  516.35 +				<price size="20x24">65</price>
  516.36 +			  </sellprint>
  516.37 +			  
  516.38 +			</item>
  516.39 +		<!--Gallery ItemsEnd-->
  516.40 +		
  516.41 +		<!--Gallery Items (Media Files Format, Everything but images)-->
  516.42 +			<item type="mov">
  516.43 +			<!--Supported types [flv, mp4, mov, swf, blip, dailymotion, flickr, googlevideo, metacafe, myspace, revver, rutube, seesmicm, tudou, youku, youtube, veoh, viddler, vimeo, 12seconds]-->
  516.44 +				<mediaURL>Locations/of/media/file.mov</mediaURL>
  516.45 +				<title>Timelapse Video 1</title>
  516.46 +				<author>E2interactive</author>
  516.47 +				<copyright>2009 E2interactive</copyright>
  516.48 +				<description>Taken in Alberta Canada. 68 Photos 10 second exposures every 30 seconds</description>
  516.49 +				<src>/gallerypro/Gallery4/thumb/canadarim.jpg</src>
  516.50 +				<demensions width="640" height="375" />
  516.51 +			</item>
  516.52 +		<!--Gallery ItemsEnd-->
  516.53 +	</gallery>
  516.54 +</galleries>
  516.55 \ No newline at end of file
   517.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   517.2 +++ b/e2gallerypro/e2upload/xml/judyYates.xml	Mon Feb 22 08:02:39 2010 -0500
   517.3 @@ -0,0 +1,66 @@
   517.4 +<?xml version="1.0" encoding="UTF-8"?>
   517.5 +<galleries>
   517.6 +	
   517.7 +	<gallery>
   517.8 +    <title>Judy Yates Prints</title>
   517.9 +    <description>Prints Directly From the Artist.</description>
  517.10 +    <gallerypath>/e2gallerypro/e2upload/Galleries/prints/</gallerypath>
  517.11 +    <largeimgpath>/e2gallerypro/e2upload/Galleries/prints/large/</largeimgpath>
  517.12 +    <thumbpath>/e2gallerypro/e2upload/Galleries/prints/thumbs/</thumbpath>
  517.13 +    <mainthumb>/e2gallerypro/e2upload/Galleries/prints/</mainthumb>
  517.14 +    <mainthumbsrc>mainthumb.jpg</mainthumbsrc>
  517.15 +    <item type="image">
  517.16 +        <title>Buffalo Verde</title>
  517.17 +        <author>Judy Yates</author>
  517.18 +        <copyright>Copyright Judy Yates Artist</copyright>
  517.19 +        <description>Buffalo Verde
  517.20 +</description>
  517.21 +        <src>Judy_Yates_Buffalo_Verde.jpg</src>
  517.22 +        <demensions width="720" height="584" />
  517.23 +        <large width="720" height="584" />
  517.24 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  517.25 +            <price size="16inx20in">265</price>
  517.26 +        </sellprint>
  517.27 +    </item>
  517.28 +    <item type="image">
  517.29 +        <title>Longhorn Sunset</title>
  517.30 +        <author>Judy Yates</author>
  517.31 +        <copyright>Copyright Judy Yates Artist</copyright>
  517.32 +        <description>Longhorn Sunset
  517.33 +</description>
  517.34 +        <src>Judy_Yates_Longhorn_Sunset.jpg</src>
  517.35 +        <demensions width="720" height="569" />
  517.36 +        <large width="720" height="569" />
  517.37 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  517.38 +   <price size="16inx20in">265</price>
  517.39 +        </sellprint>
  517.40 +    </item>
  517.41 +    <item type="image">
  517.42 +        <title>Turquoise Sky</title>
  517.43 +        <author>Judy Yates</author>
  517.44 +        <copyright>Copyright Judy Yates Artist</copyright>
  517.45 +        <description>Winner of the Mass. Primitive Arms Stamp Contest
  517.46 +</description>
  517.47 +        <src>Judy_Yates_Turquoise_Sky.jpg</src>
  517.48 +        <demensions width="720" height="558" />
  517.49 +        <large width="720" height="558" />
  517.50 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  517.51 +<price size="16inx22in">265</price>
  517.52 +        </sellprint>
  517.53 +    </item>
  517.54 +    <item type="image">
  517.55 +        <title>Wood Duck Pair</title>
  517.56 +        <author>Judy Yates</author>
  517.57 +        <copyright>Copyright Judy Yates Artist</copyright>
  517.58 +        <description>Wood Duck Pair
  517.59 +</description>
  517.60 +        <src>Judy_Yates_Wood_Duck_Pair.jpg</src>
  517.61 +        <demensions width="720" height="537" />
  517.62 +        <large width="720" height="537" />
  517.63 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  517.64 +<price size="16inx20in">265</price>
  517.65 +        </sellprint>
  517.66 +    </item>
  517.67 +    <totalitems>4</totalitems>
  517.68 +</gallery>
  517.69 +</galleries>
   518.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   518.2 +++ b/e2gallerypro/index.php	Mon Feb 22 08:02:39 2010 -0500
   518.3 @@ -0,0 +1,98 @@
   518.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   518.5 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   518.6 +<head>
   518.7 +	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   518.8 +	<title>(E)2 Gallery Pro</title>
   518.9 +	<!--(E)2 Gallery Pro <head> Files-->
  518.10 +		<!--(E)2 Gallery Config FIle-->
  518.11 +            <?php require('e2config.php');?>
  518.12 +        <!--End (E)2 Gallery Config FIle-->
  518.13 +        <!--(E)2 Gallery Style Sheet Link-->
  518.14 +    		<link href="<? echo $galleryDesign?>/design.css" rel="stylesheet" type="text/css" />
  518.15 +            <script type="text/javascript">
  518.16 +			//modify this path if needed ^ Correlates with Style Sheet Path above
  518.17 +            var designPath="<? echo $galleryDesign?>/";
  518.18 +            </script>
  518.19 +        <!--End (E)2 Gallery Style Sheet Link-->
  518.20 +        
  518.21 +        <!--Mootools-->
  518.22 +            <script type="text/javascript" src="js/mootools-1.2-core.js"></script>
  518.23 +            <script type="text/javascript" src="js/mootools-1.2-more.js"></script>
  518.24 +        <!--End Mootools-->
  518.25 +        <!--(E)2 Gallery Javascript-->
  518.26 +			<script type="text/javascript" src="js/setupvars.js"></script>
  518.27 +			<?php require('php/parsexml.php');?>
  518.28 +			<script type="text/javascript" src="js/e2gallerypro.js"></script>
  518.29 +			<script type="text/javascript">
  518.30 +				window.addEvent('domready', function() {
  518.31 +				<?php if($autoStartSlideshow=="true"){ ?>
  518.32 +					(function(){ slideshow(); }).delay(slideshowtime);
  518.33 +				<?php } ?>
  518.34 +				<?php if($showGalleriesAtStart=="true"){ ?>
  518.35 +					galleries();
  518.36 +				<?php } ?>
  518.37 +				<?php if($showThumbsAtStart=="false"){ ?>
  518.38 +					showthumbbox();
  518.39 +				<?php } ?>
  518.40 +				<?php if($showInfoAtStart=="true"){ ?>
  518.41 +					showInfo(135);
  518.42 +				<?php } ?>
  518.43 +				});
  518.44 +            </script>
  518.45 +        <!--End (E)2 Gallery Javascript-->
  518.46 +	<!--End (E)2 Gallery Pro </head> Files-->
  518.47 +</head>
  518.48 +<body>
  518.49 +<!--(E)2 Gallery Pro HTML-->
  518.50 +<div id="gallerywrapper">
  518.51 +	<div id="gallery">
  518.52 +	  <!--Loading Bar-->
  518.53 +	  <div id="loading">
  518.54 +		<div id="loadingbar"><img src="<? echo $galleryDesign?>/loading_hill.gif" width="50" height="50" alt="" id="bar" /></div>
  518.55 +	  </div>
  518.56 +	  <!--End Loading Bar-->
  518.57 +	  <!--Previous Button Div-->
  518.58 +	  <div id="previous"></div>
  518.59 +	  <!--End Previous Button Div-->
  518.60 +	  <!--Next Button Div-->
  518.61 +	  <div id="next"></div>
  518.62 +	  <!--End Next Button Div-->
  518.63 +	  <!--Main Image Holder Div-->
  518.64 +	  <div id="images">
  518.65 +		<div id="imagewrap">
  518.66 +		  <div id="imgloader"></div>
  518.67 +		</div>
  518.68 +		<div id="imageinfo">
  518.69 +		  <div id="infoloader"></div>
  518.70 +		</div>
  518.71 +		<div id="smallmessage"></div>
  518.72 +	  </div>
  518.73 +	  <!--End Main Image Holder Div-->
  518.74 +	  <!--Thumb Box Div-->
  518.75 +	  <div id="thumbbox">
  518.76 +		<div id="thumbleft"></div>
  518.77 +		<div id="thumbright"></div>
  518.78 +		<div id="thumbnails">
  518.79 +		  <div id="thumbnailwrap"></div>
  518.80 +		</div>
  518.81 +	  </div>
  518.82 +	  <!--End Thumb Box Div-->
  518.83 +	  <!--For Sale Box Div-->
  518.84 +	  <div id="fsbox"></div>
  518.85 +	  <!--End For Sale Box Div-->
  518.86 +	  <!--Galleries Holder Div-->
  518.87 +	  <div id="galleries">
  518.88 +		<div id="controls">
  518.89 +		  <div class="right"><img src="<? echo $galleryDesign?>/gallery_view.png"  class="controls" rel=" " id="opengallery" title="<?php echo GALLERIESTEXT;?>" border="0" /> <img src="<? echo $galleryDesign?>/infobox.png" id="showinfo" rel=" " class="controls" title="<?php echo INFOTEXT;?>" border="0" /> <img src="<? echo $galleryDesign?>/thumbbox.png" id="showthumbbox" title="<?php echo THUMBSTEXT;?>" class="controls" rel=" " border="0" /></div>
  518.90 +		  <span id="slideshow"><img src="<? echo $galleryDesign?>/play.png" title="<?php echo PLAYTEXT;?>" border="0" align="absmiddle" class="controls" rel=" " /></span> | <span id="photoNum"></span><span id="flashNum"></span><span id="qtNum"></span></div>
  518.91 +		<div id="galleryset"> </div>
  518.92 +	  </div>
  518.93 +	  <!--End Galleries Holder Div-->
  518.94 +	  <!--Thumbnail Pop Up Holder-->
  518.95 +	  <div id="thumbnailPopUp"></div>
  518.96 +	  <!--End Thumbnail Pop Up Holder-->
  518.97 +	</div>
  518.98 +</div>
  518.99 +<!--End (E)2 Gallery Pro HTML-->
 518.100 +</body>
 518.101 +</html>
   519.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   519.2 +++ b/e2gallerypro/js/e2gallerypro.js	Mon Feb 22 08:02:39 2010 -0500
   519.3 @@ -0,0 +1,1 @@
   519.4 +var E2GalleryPro={version:"1.2"};var openclose=true;var slidesHidden=false;var imagecontainer=$("images");var busy=false;var previousid="0";var currentthumbpos=0;var showInfoType="show";var movedamount=0;var imagenumber=Number(1);var thumbnailNumberPos;var thumbSizing;var totalthumbsvisible=0;var currentThumbSpot=1;var thumbWidth=setThumbWidth;var largeHtmlIsCreated;var galleryHeight;var showThumbs="hide";var fsisopen="closed";var animatingPop=false;var moving=false;var timer;var playing=false;var prevHidden=false;var nextHidden=false;var totalNumImages;var totalNumQuicktime;var totalNumMedia;var closinggalleries=false;var currentGallery=maingalleries[0]["gallerynum"];var currentimage=0;var lastimage=maingalleries[0]["end"];var startImage=maingalleries[0]["start"];var largeIsOpen=false;function openforsale(){if(fsisopen=="open"){fsisopen="closed";var b=new Fx.Morph("fsbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({bottom:-277});var a=new Fx.Morph("fsclose",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0})}else{fsisopen="open";var b=new Fx.Morph("fsbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({bottom:-100});var a=new Fx.Morph("fsclose",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:1})}}function addImage(e){currentimage=galleryimages[e]["imgid"];filetype=galleryimages[e]["filetype"];$("imgloader").empty();$("infoloader").empty();var f="";if(galleryimages[e]["title"]){f+="<h2>"+galleryimages[e]["title"]+"</h2>";if(galleryimages[e]["forsale"]==true){f+='<div id="purchasebtn">'+purchaseprinttxt+"</div>"}}if(galleryimages[e]["description"]){f+='<span class="description">'+galleryimages[e]["description"]+"</span>";if(galleryimages[e]["forsale"]==true){f+='<div id="purchasebtn">'+purchaseprinttxt+"</div>"}}if(galleryimages[e]["copyright"]){f+='<div class="copyright"><strong>Copyright:</strong> '+galleryimages[e]["copyright"]+"</div>";if(galleryimages[e]["forsale"]==true){f+='<div id="purchasebtn">'+purchaseprinttxt+"</div>"}}if(galleryimages[e]["author"]){f+='<div class="author"><strong>Author:</strong> '+galleryimages[e]["author"]+"</div>";if(galleryimages[e]["forsale"]==true){f+='<div id="purchasebtn">'+purchaseprinttxt+"</div>"}}if(f==""){f+="<h2>No Image Information Available</h2>";if(galleryimages[e]["forsale"]==true){f+='<div id="purchasebtn">'+purchaseprinttxt+"</div>"}}$("infoloader").set("html",f);var d=new Fx.Morph("infoloader",{duration:transitionspeed});var b=new Fx.Morph("imgloader",{duration:transitionspeed,onComplete:function(){busy=false}});var g=new Fx.Morph("imgloader",{duration:transitionspeed,onComplete:function(){if(filetype=="image"){var o="<img src='"+galleryimages[e]["path"]+galleryimages[e]["src"]+"' id='imgsrc' title='"+galleryimages[e]["title"]+"' />";$("imgloader").set("html",o);b.start({opacity:1})}if(filetype=="flv"||filetype=="mp4"){fileWidth=galleryimages[e]["width"]||flashdefaultWidth;fileHeight=galleryimages[e]["height"]||flashdefaultHeight;media=new Swiff(""+NBpath+"?videoURL="+galleryimages[e]["mediaURL"]+"&allowSmoothing=true&autoPlay="+autoplay+"&buffer=6&showTimecode="+showTimecode+"&loop=true&controlColour="+controllerColor+"&scaleIfFullScreen=true&showScalingButton=false",{id:"MediaboxSWF",width:mediaWidth,height:mediaHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="mov"){var n='<object width="'+galleryimages[e]["width"]+'" height="'+galleryimages[e]["height"]+'" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"> <param name="src" value="'+galleryimages[e]["mediaURL"]+'"><param name="autoplay" value="'+autoplay+'"><param name="controller" value="true"><embed src="'+galleryimages[e]["mediaURL"]+'" width="'+galleryimages[e]["width"]+'" height="'+galleryimages[e]["height"]+'" autoplay="'+autoplay+'" controller="true" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>';$("imgloader").set("html",n);b.start({opacity:1})}else{if(filetype=="swf"){fileWidth=galleryimages[e]["width"]||flashdefaultWidth;fileHeight=galleryimages[e]["height"]||flashdefaultHeight;media=new Swiff(galleryimages[e]["mediaURL"],{id:"e2gallerySWF",width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="blip.tv"){fileWidth=galleryimages[e]["width"]||"640px";fileHeight=galleryimages[e]["height"]||"390px";media=new Swiff(galleryimages[e]["mediaURL"],{src:galleryimages[e]["mediaURL"],width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="dailymotion"){fileWidth=galleryimages[e]["width"]||"480px";fileHeight=galleryimages[e]["height"]||"381px";media=new Swiff(galleryimages[e]["mediaURL"],{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="flickr"){fileWidth=galleryimages[e]["width"]||"500px";fileHeight=galleryimages[e]["height"]||"375px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[5];media=new Swiff("http://www.flickr.com/apps/video/stewart.swf",{id:mediaId,classid:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",width:fileWidth,height:fileHeight,params:{flashvars:"photo_id="+mediaId+"&amp;show_info_box="+flInfo,wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="google"){fileWidth=galleryimages[e]["width"]||"400px";fileHeight=galleryimages[e]["height"]||"326px";mediaSplit=galleryimages[e]["mediaURL"].split("=");mediaId=mediaSplit[1];media=new Swiff("http://video.google.com/googleplayer.swf?docId="+mediaId+"&autoplay="+autoplayNum,{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="metacafe"){fileWidth=galleryimages[e]["width"]||"400px";fileHeight=galleryimages[e]["height"]||"345px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[4];media=new Swiff("http://www.metacafe.com/fplayer/"+mediaId+"/.swf",{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="myspace"){fileWidth=galleryimages[e]["width"]||"425px";fileHeight=galleryimages[e]["height"]||"360px";mediaSplit=galleryimages[e]["mediaURL"].split("=");mediaId=mediaSplit[2];media=new Swiff("http://lads.myspace.com/videos/vplayer.swf?m="+mediaId+"&v=2&type=video",{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="revver"){fileWidth=galleryimages[e]["width"];fileHeight=galleryimages[e]["height"];mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[4];media=new Swiff("http://flash.revver.com/player/1.0/player.swf?mediaId="+mediaId+"&affiliateId="+revverID+"&allowFullScreen="+revverFullscreen+"&backColor=#"+revverBack+"&frontColor=#"+revverFront+"&gradColor=#"+revverGrad+"&shareUrl=revver",{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="rutube"){fileWidth=galleryimages[e]["width"]||"470px";fileHeight=galleryimages[e]["height"]||"353px";mediaSplit=galleryimages[e]["mediaURL"].split("=");mediaId=mediaSplit[1];media=new Swiff("http://video.rutube.ru/"+mediaId,{movie:"http://video.rutube.ru/"+mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="seesmicm"){fileWidth=galleryimages[e]["width"]||"435px";fileHeight=galleryimages[e]["height"]||"355px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[5];media=new Swiff("http://seesmic.com/Standalone.swf?video="+mediaId,{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="tudou"){fileWidth=galleryimages[e]["width"]||"400px";fileHeight=galleryimages[e]["height"]||"340px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[5];media=new Swiff("http://www.tudou.com/v/"+mediaId,{width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="youku"){fileWidth=galleryimages[e]["width"]||"480px";fileHeight=galleryimages[e]["height"]||"400px";mediaSplit=galleryimages[e]["mediaURL"].split("id_");mediaId=mediaSplit[1];media=new Swiff("http://player.youku.com/player.php/sid/"+mediaId+"=/v.swf",{width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="youtube"){mediaSplit=galleryimages[e]["mediaURL"].split("v=");mediaId=mediaSplit[1];if(mediaId.match(/fmt=18/i)){mediaFmt="&ap=%2526fmt%3D18";mediaWidth=galleryimages[e]["width"]||"560px";mediaHeight=galleryimages[e]["height"]||"345px"}else{if(mediaId.match(/fmt=22/i)){mediaFmt="&ap=%2526fmt%3D22";mediaWidth=galleryimages[e]["width"]||"640px";mediaHeight=galleryimages[e]["height"]||"385px"}else{mediaFmt=ytQuality;mediaWidth=galleryimages[e]["width"]||"480px";mediaHeight=galleryimages[e]["height"]||"295px"}}media=new Swiff("http://www.youtube.com/v/"+mediaId+"&autoplay="+autoplayNum+"&fs="+fullscreenNum+mediaFmt+"&color1=0x"+ytColor1+"&color2=0x"+ytColor2,{id:mediaId,width:mediaWidth,height:mediaHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="veoh"){fileWidth=galleryimages[e]["width"]||"410px";fileHeight=galleryimages[e]["height"]||"341px";mediaSplit=galleryimages[e]["mediaURL"].split("videos/");mediaId=mediaSplit[1];media=new Swiff("http://www.veoh.com/videodetails2.swf?permalinkId="+mediaId+"&player=videodetailsembedded&videoAutoPlay="+AutoplayNum,{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="viddler"){fileWidth=galleryimages[e]["width"]||"437px";fileHeight=galleryimages[e]["height"]||"370px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[4];media=new Swiff(galleryimages[e]["mediaURL"],{id:"viddler_"+mediaId,movie:galleryimages[e]["mediaURL"],classid:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen,id:"viddler_"+mediaId,movie:galleryimages[e]["mediaURL"]}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="vimeo"){fileWidth=galleryimages[e]["width"]||"400px";fileHeight=galleryimages[e]["height"]||"225px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[3];media=new Swiff("http://www.vimeo.com/moogaloop.swf?clip_id="+mediaId+"&amp;server=www.vimeo.com&amp;fullscreen="+fullscreenNum+"&amp;show_title="+vmTitle+"&amp;show_byline="+vmByline+"&amp;show_portrait="+vmPortrait+"&amp;color="+vmColor,{id:mediaId,width:fileWidth,height:fileHeight,params:{wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}else{if(filetype=="12seconds"){fileWidth=galleryimages[e]["width"]||"430px";fileHeight=galleryimages[e]["height"]||"360px";mediaSplit=galleryimages[e]["mediaURL"].split("/");mediaId=mediaSplit[5];media=new Swiff("http://embed.12seconds.tv/players/remotePlayer.swf",{id:mediaId,width:fileWidth,height:fileHeight,params:{flashvars:"vid="+mediaId+"",wmode:"opaque",bgcolor:bgcolor,allowscriptaccess:scriptaccess,allowfullscreen:fullscreen}});media.inject("imgloader");b.start({opacity:1})}}}}}}}}}}}}}}}}}}}if(galleryimages[e]["forsale"]==true){$("fsbox").empty();var m=new Element("div",{id:"fsbutton"}).inject($("fsbox"),"top");var h=new Element("div",{id:"fstop"}).inject($("fsbox"));var k=new Element("div",{id:"forsale"}).inject($("fsbox"));$("fsbutton").set("html",orderText+"<div id='fsclose'></div>");if(galleryimages[e]["title"]==""||galleryimages[e]["title"]==null){placeTitle=galleryimages[e]["src"]}else{placeTitle=galleryimages[e]["title"]}var j=new Fx.Morph("fsbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){var p=galleryimages[e]["paytype"];if(p=="paypal"){numOfPrices=galleryimages[e]["numOfPrices"];paypalform="";paypalform+='<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">';paypalform+='	<input type="hidden" name="cmd" value="_s-xclick">';paypalform+='	<input type="hidden" name="hosted_button_id" value="'+paypalButtonId+'">';paypalform+='	<img src="'+thumbPath+galleryimages[e]["src"]+'" border="0"  class="forsalethumb" align="left" />';paypalform+="	<strong>Buy: "+placeTitle+"</strong><br />";paypalform+="	"+purchaseOf+placeTitle+shipinginfoshort+"<br />";paypalform+="	<table>";paypalform+='	<tr><td><input type="hidden" name="on0" value="'+galleryimages[e]["src"]+" - "+paypalSelectText+'">'+galleryimages[e]["src"]+" -"+paypalSelectText+'</td></tr><tr><td><select name="os0">';for(i=1;i<=numOfPrices;i++){if(galleryimages[e]["pricecurrency"+i+""]=="&euro;"){pricingFormat=+""+galleryimages[e]["price"+i+""]+""+galleryimages[e]["pricecurrencysymbol"+i+""]}else{pricingFormat=galleryimages[e]["pricecurrencysymbol"+i+""]+""+galleryimages[e]["price"+i+""]}paypalform+='<option value="'+galleryimages[e]["pricesize"+i+""]+'">'+galleryimages[e]["pricesize"+i+""]+" "+pricingFormat+""}paypalform+="	</select> </td></tr>";paypalform+="	</table>";paypalform+='	<input type="hidden" name="currency_code" value="'+galleryimages[e]["pricecurrency"+i+""]+'">';paypalform+='	<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_cart_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">';paypalform+='	<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">';paypalform+="</form>";$("forsale").set("html",paypalform)}if(p=="google"){numOfPrices=galleryimages[e]["numOfPrices"];googleform="";googleform+='<form action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/'+merchantId+'" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm">';googleform+='<img src="'+thumbPath+galleryimages[e]["src"]+'" border="0"  class="forsalethumb" align="left" />';googleform+="<strong>Buy: "+placeTitle+"</strong>";googleform+="<br />";googleform+=purchaseOf+placeTitle+shipinginfoshort+"<br />";googleform+=selectSizes+": ";googleform+='<select name="item_selection_1">';for(i=1;i<=numOfPrices;i++){if(galleryimages[e]["pricecurrency"+i+""]=="&euro;"){pricingFormat=galleryimages[e]["price"+i+""]+" "+galleryimages[e]["pricecurrencysymbol"+i+""]}else{pricingFormat=galleryimages[e]["pricecurrencysymbol"+i+""]+""+galleryimages[e]["price"+i+""]}googleform+=' 	<option value="'+i+'">'+galleryimages[e]["pricesize"+i+""]+" - "+pricingFormat+"</option>"}googleform+="</select><br />";for(i=1;i<=numOfPrices;i++){googleform+='<input name="item_option_name_'+i+'" type="hidden" value="'+galleryimages[e]["pricesize"+i+""]+' Print"/>';googleform+='<input name="item_option_price_'+i+'" type="hidden" value="'+galleryimages[e]["price"+i+""]+'"/>';googleform+='<input name="item_option_description_'+i+'" type="hidden" value="'+galleryimages[e]["pricesize"+i+""]+" "+placeTitle+'"/>';googleform+='<input name="item_option_quantity_'+i+'" type="hidden" value="1"/>';googleform+='<input name="item_option_currency_'+i+'" type="hidden" value="'+galleryimages[e]["pricecurrency"+i+""]+'"/>'}googleform+='<input alt="" src="https://checkout.google.com/buttons/buy.gif?merchant_id='+merchantId+'&amp;w=121&amp;h=44&amp;style=trans&amp;variant=text&amp;loc=en_US" type="image"/>';googleform+="</form><hr /><br />";$("forsale").set("html",googleform)}$("fsbutton").addEvent("click",function(){openforsale();var q=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});q.start({opacity:0})})}});j.start({opacity:1,bottom:-277});var l=new Fx.Morph("fsclose",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});l.start({opacity:0})}}});var c=new Fx.Morph(""+e+"",{duration:100,transition:Fx.Transitions.linear});c.start({"border-color":"#FFF","background-color":"#FFF",opacity:1});d.start({opacity:1});g.start({opacity:0});var a=new Fx.Morph("loading",{duration:200,onComplete:function(){}});a.start({opacity:0})}function setThumbClick(a){thumbPath=maingalleries[a]["thumbpath"];imagenumber=Number(1);$$(".thumbnail").addEvent("click",function(f){if(playing==true){slideshow()}if(!busy){if(filetype!="image"){$("imgloader").empty()}busy=true;var g=this.id;imagenumber=this.get("rel");imagenumber=Number(imagenumber);$("numOf").set("text",imagenumber+" of ").inject("photoNum","top");var b=Number(galleryimages[g]["imgid"]);loadimage(Number(g),Number(imagenumber));var d=new Fx.Morph(""+previousid+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});d.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});var c=new Fx.Morph(g,{duration:500,transition:Fx.Transitions.linear});c.start({"border-color":"#FFF","background-color":"#FFF",opacity:1});previousid=b}});$("next").addEvent("click",function(c){if(playing==true){slideshow()}if(!busy){busy=true;nextnum=Number(currentimage+1);imagenumber=Number(imagenumber+1);realNum=$(""+nextnum+"").get("rel");$("numOf").set("text",realNum+" of ").inject("photoNum","top");loadimage(nextnum,imagenumber);var b=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=imagenumber%maxThumbsVisible;if(imagenumber>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("more")}currentimage=Number(galleryimages[nextnum]["imgid"]);previousid=currentimage}});$("previous").addEvent("click",function(c){if(playing==true){slideshow()}if(!busy){thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=(imagenumber)%maxThumbsVisible;if(imagenumber>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("back")}previousnum=Number(currentimage-1);busy=true;imagenumber=Number(imagenumber-1);realNum=$(""+previousnum+"").get("rel");$("numOf").set("text",realNum+" of ").inject("photoNum","top");loadimage(""+previousnum+"",imagenumber);var b=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});currentimage=Number(galleryimages[previousnum]["imgid"]);previousid=currentimage}});$(window.document).addEvent("keydown",function(c){if(c.key=="right"&&currentimage!=lastimage){if(playing==true){slideshow()}if(!busy){busy=true;nextnum=Number(currentimage+1);imagenumber=Number(imagenumber+1);realNum=$(""+nextnum+"").get("rel");$("numOf").set("text",realNum+" of ").inject("photoNum","top");loadimage(nextnum,imagenumber);var b=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=imagenumber%maxThumbsVisible;if(imagenumber>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("more")}currentimage=Number(galleryimages[nextnum]["imgid"]);previousid=currentimage}}if(c.key=="left"&&currentimage!=0){if(playing==true){slideshow()}if(!busy){thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=(imagenumber)%maxThumbsVisible;if(imagenumber>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("back")}previousnum=Number(currentimage-1);busy=true;imagenumber=Number(imagenumber-1);realNum=$(""+previousnum+"").get("rel");$("numOf").set("text",realNum+" of ").inject("photoNum","top");loadimage(""+previousnum+"",imagenumber);var b=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});currentimage=Number(galleryimages[previousnum]["imgid"]);previousid=currentimage}}});$$(".thumbnail").addEvent("mouseenter",function(){myid=this.id;var d=galleryimages[myid]["filetype"];var c=new Fx.Morph("thumbnailPopUp",{duration:25,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("thumbnailPopUp").empty();if(d=="image"){var f=new Element("img",{src:thumbPath+galleryimages[myid]["src"],id:"thumbPop"}).inject($("thumbnailPopUp"))}else{var f=new Element("img",{src:galleryimages[myid]["src"],id:"thumbPop"}).inject($("thumbnailPopUp"))}myX=$("gallery").getCoordinates().width;myY=$("images").getCoordinates().height;myImgWidth=$("thumbPop").getCoordinates().width;myImgHeight=$("thumbPop").getCoordinates().height;myNewX=((myX/2)-(myImgWidth/2));myNewY=(myY-(myImgHeight/2))-(($("thumbnailPopUp").getCoordinates().height/2)+6);if(animatingPop!=true){animatingPop=true;var e=function(){$("thumbnailPopUp").setStyles({position:"absolute",top:(myNewY),left:myNewX,visibility:"hidden"});var g=new Fx.Morph("thumbnailPopUp",{duration:200,transition:Fx.Transitions.Expo.easeOut,onComplete:function(){animatingPop=false}});g.start({top:myNewY,left:myNewX,opacity:1})};e.delay(250)}}});c.start({opacity:0});if(myid!=currentimage){var b=new Fx.Morph(myid,{duration:100,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:1})}});$$(".thumbnail").addEvent("mouseleave",function(){myid=this.id;var c=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});c.start({opacity:0});if(myid!=currentimage){var b=new Fx.Morph(myid,{duration:50,transition:Fx.Transitions.Expo.easeInOut});b.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5})}})}function loadThumbs(l,b){var e=$("thumbnailwrap");thumbnailNumberPos=1;totalNumImages=0;totalNumMedia=0;totalNumQuicktime=0;$("thumbnailwrap").empty();startImage=maingalleries[l]["start"];endImage=maingalleries[l]["end"];thumbPath=maingalleries[l]["thumbpath"];lastimage=maingalleries[l]["end"];currentGallery=maingalleries[l]["gallerynum"];currentimage=Number(galleryimages[startImage]["imgid"]);previousid=Number(startImage);busy=false;for(i=startImage;i<=endImage;i++){filetype=galleryimages[i]["filetype"];if(totalthumbsvisible<$("thumbnails").getCoordinates().width-setThumbWidth){totalthumbsvisible+=setThumbWidth}thumbWidth+=setThumbWidth;e.setStyles({width:thumbWidth});var a=i;if(filetype=="image"){var c=new Element("div",{"class":"thumbnail",id:galleryimages[i]["imgid"],rel:thumbnailNumberPos});var f=new Element("img",{src:thumbPath+galleryimages[i]["src"],rel:" ","class":" controls",title:galleryimages[i]["title"]}).injectInside(c);totalNumImages++}if(filetype=="flv "||filetype=="mov"||filetype=="mp4"||filetype=="mp3 "||filetype=="aac"||filetype=="swf"||filetype=="blip"||filetype=="dailymotion"||filetype=="flickr"||filetype=="googlevideo"||filetype=="metacafe"||filetype=="myspacetv"||filetype=="revver"||filetype=="rutube"||filetype=="seesmic"||filetype=="tudou"||filetype=="youku"||filetype=="youtube"||filetype=="Veoh"||filetype=="viddler"||filetype=="vimeo"||filetype=="12seconds"){var c=new Element("div",{"class":"thumbnail",id:galleryimages[i]["imgid"],rel:thumbnailNumberPos});var f=new Element("img",{src:galleryimages[i]["src"],"class":" controls",title:galleryimages[i]["title"]}).injectInside(c);totalNumMedia++}if(totalNumMedia>1){flashCount=totalNumMedia+" Media Files | "}else{if(totalNumMedia==1){flashCount=totalNumMedia+" Media File | "}else{flashCount=""}}$("flashNum").set("html",flashCount);if(totalNumImages>1){imagecountHTML=totalNumImages+" Photos | "}else{if(totalNumImages==1){imagecountHTML=totalNumImages+" Photo | "}else{imagecountHTML=""}}$("photoNum").set("html",'<span id="numOf">1 of </span>'+imagecountHTML);c.injectInside($("thumbnailwrap"));thumbnailNumberPos++;$(""+i+"").setStyles({opacity:0});var g=new Fx.Morph(""+i+"",{duration:100,transition:Fx.Transitions.Expo.easeInOut,wait:true});if(i==0){g.start({opacity:1})}else{g.start({opacity:0.5})}if(i==endImage){thumbnailsviewable=Math.floor($("thumbnails").getCoordinates().width);if(thumbWidth>thumbnailsviewable){var d=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0,left:-40});var h=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});h.start({opacity:0.75,right:0})}else{var d=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0,left:-40});var h=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});h.start({opacity:0,right:-40})}if(b=="loadNew"){e.setStyles({left:0});currentthumbpos=0;loadimage(Number(startImage))}setThumbClick(l)}var j=$$(".controls");var k=new Tips(j,{showDelay:100,hideDelay:100,offsets:{x:8,y:8},title:"title",text:null,className:"minitooltips",fixed:false,onShow:function(m){m.fade(1)},onHide:function(m){m.fade(0)}})}}function galleries(){var c=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});c.start({opacity:0});if(playing==true){slideshow()}var b=new Fx.Morph("galleries",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});var a=new Fx.Morph("fsbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});filetype=galleryimages[currentimage]["filetype"];galleryheight=$("gallery").getCoordinates().height;hiddenGalpas=(galleryheight-$("controls").getCoordinates().height);controlHeight=$("controls").getCoordinates().height;if(openclose==true){if(filetype!="image"){$("imgloader").setStyle("visibility","hidden")}b.start({bottom:[-galleryheight,controlHeight]});if(slidesHidden==true){showthumbbox()}openclose=false;a.start({opacity:0})}else{closinggalleries=true;b.start({bottom:-(hiddenGalpas-1)}).addEvent("onComplete",function(){if(closinggalleries==true){if(filetype!="image"){$("imgloader").setStyle("visibility","visible");closinggalleries=false}}});a.start({opacity:1});openclose=true}}function loadimage(f,d){fsisopen="closed";var h=new Fx.Morph("fsbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});h.start({opacity:0,bottom:-305});if(f==startImage){$("previous").setStyles({visibility:"hidden"});prevHidden=true}else{$("previous").setStyles({visibility:"visible"});prevHidden=false}if(f==lastimage){$("next").setStyles({visibility:"hidden"});nextHidden=true}else{$("next").setStyles({visibility:"visible"});nextHidden=false}var g=$("images");var j=$("loading");var k=$("gallery");$("loading").setStyles({position:"absolute",opacity:0,left:(k.getCoordinates().width/2)-(j.getCoordinates().width/2),top:(g.getCoordinates().height/2)-(j.getCoordinates().height/2)});if(imagesloaded[f]!=f){imagesloaded[f]=f;var a=new Fx.Morph("infoloader",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});var b=new Fx.Morph("imgloader",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("imgloader").empty();filetype=galleryimages[f]["filetype"];if(filetype=="image"){new Asset.image(galleryimages[f]["path"]+galleryimages[f]["src"],{onload:function(){var l=new Fx.Morph("imagewrap",{duration:500,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){addImage(f)}});l.start({height:galleryimages[f]["height"],width:galleryimages[f]["width"],opacity:1,top:(((g.getCoordinates().height/2)-(galleryimages[f]["height"]/2))),left:(((g.getCoordinates().width/2)-(galleryimages[f]["width"]/2)))})}})}if(filetype=="flv "||filetype=="mov"||filetype=="mp4"||filetype=="mp3 "||filetype=="aac"||filetype=="swf"||filetype=="blip"||filetype=="dailymotion"||filetype=="flickr"||filetype=="googlevideo"||filetype=="metacafe"||filetype=="myspacetv"||filetype=="revver"||filetype=="rutube"||filetype=="seesmic"||filetype=="tudou"||filetype=="youku"||filetype=="youtube"||filetype=="Veoh"||filetype=="viddler"||filetype=="vimeo"||filetype=="12seconds"){if(playing==true){slideshow()}var e=new Fx.Morph("imagewrap",{duration:500,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){addImage(f)}});e.start({height:galleryimages[f]["height"],width:galleryimages[f]["width"],opacity:1,top:(((g.getCoordinates().height/2)-(galleryimages[f]["height"]/2))),left:(((g.getCoordinates().width/2)-(galleryimages[f]["width"]/2)))})}}});var c=new Fx.Morph("loading",{duration:200,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0});b.start({opacity:0});c.start({opacity:1})}else{var b=new Fx.Morph("imgloader",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("imgloader").empty();filetype=galleryimages[f]["filetype"];if(filetype=="image"){var e=new Fx.Morph("imagewrap",{duration:300,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){addImage(f)}});e.start({height:galleryimages[f]["height"],width:galleryimages[f]["width"],opacity:1,top:(((g.getCoordinates().height/2)-(galleryimages[f]["height"]/2))),left:(((g.getCoordinates().width/2)-(galleryimages[f]["width"]/2)))})}if(filetype=="flv "||filetype=="mov"||filetype=="mp4"||filetype=="mp3 "||filetype=="aac"||filetype=="swf"||filetype=="blip"||filetype=="dailymotion"||filetype=="flickr"||filetype=="googlevideo"||filetype=="metacafe"||filetype=="myspacetv"||filetype=="revver"||filetype=="rutube"||filetype=="seesmic"||filetype=="tudou"||filetype=="youku"||filetype=="youtube"||filetype=="Veoh"||filetype=="viddler"||filetype=="vimeo"||filetype=="12seconds"){if(playing==true){slideshow()}var e=new Fx.Morph("imagewrap",{duration:300,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){addImage(f)}});e.start({height:galleryimages[f]["height"],width:galleryimages[f]["width"],opacity:1,top:(((g.getCoordinates().height/2)-(galleryimages[f]["height"]/2))),left:(((g.getCoordinates().width/2)-(galleryimages[f]["width"]/2)))})}}});b.start({opacity:0})}}function nextprev(d,c){if(d=="previous"){var b=new Fx.Morph("previous",{duration:200,transition:Fx.Transitions.Expo.easeInOut});if(currentimage!=startImage){if(c=="enter"){b.start({opacity:1})}}if(c=="exit"&&currentimage!=startImage){b.start({opacity:0.5})}}if(d=="next"){var a=new Fx.Morph("next",{duration:200,transition:Fx.Transitions.Expo.easeInOut});if(currentimage!=lastimage){if(c=="enter"){a.start({opacity:1})}}if(c=="exit"&&currentimage!=lastimage){a.start({opacity:0.5})}}}function creategalleries(){var c=maingalleries.length-1;var b=function(d,j){var k=new Element("div",{"class":"gallery",id:"gallery"+d.gallerynum});var h=new Element("h3").set("html",d.name).injectInside(k);var e=new Element("img",{src:d.mainthumb+d.src,"class":"galleryimg",title:d.name,rel:d.description}).injectAfter(h);k.injectInside($("galleryset"));if(c==j){var g=$$(".galleryimg");var f=new Tips(g,{showDelay:100,hideDelay:100,offsets:{x:0,y:125},className:"tooltips",fixed:true,onShow:function(l){l.fade(1)},onHide:function(l){l.fade(0)}});$$(".gallery").addEvent("click",function(l){if(playing==true){slideshow()}var m=this.id;galleryID=""+m+"";galleries();galleryNum=Number(galleryID.slice(7));loadThumbs(galleryNum,"loadNew");movedamount=0})}};maingalleries.each(function(d,e){b(d,e)});var a=new Element("div",{"class":"clear"});a.inject($("galleryset"),"bottom")}function movethumbs(f){var e=$("thumbnails").getCoordinates().width-2;var g=setThumbWidth*(totalNumImages);var d=new Fx.Morph("thumbnailwrap",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});thisminusthat=g-e;if(f=="back"){if(!moving){moving=true;if(currentthumbpos!=0){move=(currentthumbpos+e);d.start({left:[currentthumbpos,move]}).addEvent("onComplete",function(){moving=false});currentthumbpos+=e;movedamount-=e}}}if(f=="more"){if(!moving){moving=true;move=(currentthumbpos-e);var c=new Fx.Morph("thumbgall",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});d.start({left:[currentthumbpos,move]}).addEvent("onComplete",function(){moving=false});currentthumbpos-=e;movedamount+=e}}thumbnailsviewable=$("thumbnails").getCoordinates().width;if(currentthumbpos==0){var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0,left:-40});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0.75,right:0})}else{if(movedamount<g-e){var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0.75,left:0});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0.75,right:0})}else{var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0.75,left:0});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0,right:-40})}}}function smallMessage(b,c,a){var d=new Fx.Morph("smallmessage",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});if(b=="show"){$("smallmessage").setStyles({opacity:0,bottom:-80,left:(($("images").getCoordinates().width/2)-(($("smallmessage").getCoordinates().width/2)))});$("smallmessage").set("text",c);d.start({bottom:(-80)+a,opacity:1})}if(b=="hide"){d.start({bottom:-80,opacity:0})}}function showInfo(a){var b=new Fx.Morph("imageinfo",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});if(showInfoType=="show"){showInfoType="hide";$("imageinfo").setStyles({"background-color":"#000",bottom:-300,width:"100%",opacity:0});b.start({bottom:(-300)+a,opacity:0.9})}else{if(showInfoType=="hide"){showInfoType="show";b.start({bottom:-300,opacity:0})}}}function loadLarge(){largeId=galleryimages[currentimage]["imgid"];var a=new Fx.Morph("lrgloader",{duration:transitionspeed});var c="<img src='"+galleryimages[largeId]["lrgpath"]+galleryimages[largeId]["src"]+"' id='imgsrc' title='"+galleryimages[largeId]["title"]+"' />";$("lrgloader").set("html",c);a.start({opacity:0.99999});var b=new Fx.Morph("closebtn",{duration:500,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:1})}function slideshow(){if(playing==false){$("slideshow").set("html",'<img src="'+designPath+'pause.png" alt="'+pauseText+'" title="'+pauseText+'" class="controls" border="0" align="absmiddle" />');playing=true;pp="play";var f=$$(".controls");var d=new Tips(f,{showDelay:100,hideDelay:100,offsets:{x:8,y:8},title:"title",text:null,className:"minitooltips",fixed:false,onShow:function(h){h.fade(1)},onHide:function(h){h.fade(0)}});var g=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});g.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});if(currentimage!=lastimage){nextImage=currentimage+1;thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=(nextImage+1)%maxThumbsVisible;if((nextImage+1)>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("more")}}else{var e=new Fx.Morph("thumbnailwrap",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({left:[currentthumbpos,0]}).addEvent("onComplete",function(){moving=false});currentthumbpos=0;nextImage=startImage;if(currentthumbpos==0){var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0,left:-40});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0.75,right:0})}else{if(movedamount<thumbBoxWidth-moveamount){var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0.75,left:0});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0.75,right:0})}else{var b=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});b.start({opacity:0.75,left:0});var a=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:0,right:-40})}}}imagenumber=$(""+nextImage+"").get("rel");$("numOf").set("text",imagenumber+" of ").inject("photoNum","top");loadimage(nextImage)}else{c=$clear(timer);$("slideshow").set("html",'<img src="'+designPath+'play.png" alt="'+playText+'" title="'+playText+'" class="controls" border="0" align="absmiddle" />');playing=false;pp="pause";var f=$$(".controls");var d=new Tips(f,{showDelay:100,hideDelay:100,offsets:{x:8,y:8},title:"title",text:null,className:"minitooltips",fixed:false,onShow:function(h){h.fade(1)},onHide:function(h){h.fade(0)}})}var c=function(){if(currentimage!=lastimage){nextImage=currentimage+1;thumbinview=$("thumbnails").getCoordinates().width;maxThumbsVisible=Math.floor(thumbinview/setThumbWidth);thumbsMod=(nextImage+1)%maxThumbsVisible;if((nextImage+1)>=maxThumbsVisible&&thumbsMod==1||maxThumbsVisible==1){movethumbs("more")}}if(currentimage!=lastimage&&pp=="play"){var k=new Fx.Morph(""+currentimage+"",{duration:500,transition:Fx.Transitions.Expo.easeInOut});k.start({"border-color":"#FFF","background-color":"#FFF",opacity:0.5});imagenumber=$(""+nextImage+"").get("rel");$("numOf").set("text",imagenumber+" of ").inject("photoNum","top");loadimage(nextImage)}else{c=$clear(timer);$("slideshow").set("html",'<img src="'+designPath+'play.png" alt="'+playText+'" title="'+playText+'" class="controls" border="0" align="absmiddle" />');playing=false;pp="pause";var j=$$(".controls");var h=new Tips(j,{showDelay:100,hideDelay:100,offsets:{x:8,y:8},title:"title",text:null,className:"minitooltips",fixed:false,onShow:function(l){l.fade(1)},onHide:function(l){l.fade(0)}})}};timer=c.periodical(slideshowtime)}function showthumbbox(){if(openclose!=false){minusThumb=$("thumbbox").getCoordinates().height;minusControls=$("controls").getCoordinates().height;var b=new Fx.Morph("gallery",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});var a=new Fx.Morph("thumbbox",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});if(showThumbs=="show"){showThumbs="hide";a.start({opacity:1});b.start({height:galleryHeight});slidesHidden=false}else{if(showThumbs=="hide"){showThumbs="show";a.start({opacity:0});b.start({height:(galleryHeight)-(minusThumb)});slidesHidden=true}}}}var resizeTimeout;prepareResize=function(){$clear(resizeTimeout);resizeTimeout=realResize.delay(300)};function createBackDrop(){if(largeHtmlIsCreated==null||largeHtmlIsCreated==""){var d=new Element("div",{id:"largeimage"}).injectInside(document.body);var b=new Element("div",{id:"lrgwrap","class":"close"}).injectInside("largeimage");var f=new Element("div",{id:"closebtn","class":"close"}).injectInside("largeimage");var c=new Element("div",{id:"lrgloader"}).injectInside("lrgwrap");var d=new Element("div",{id:"backdrop","class":"close"}).injectInside(document.body);$("largeimage").set("opacity",0);$("closebtn").set("opacity",0);$("largeimage").setStyles({height:0,width:0,opacity:0,top:($("gallery").getCoordinates().height)-50,left:(window.getWidth()/2)});$("backdrop").set("opacity",0);$("backdrop").setStyles({height:0,width:0,opacity:0,top:($("gallery").getCoordinates().height/2)-50,left:(window.getWidth()/2)});$$(".close").addEvent("click",function(){largeIsOpen=false;$clear(resizeTimeout);var g=new Fx.Morph("closebtn",{duration:500,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("lrgloader").empty();var j=new Fx.Morph("lrgwrap",{duration:500,transition:Fx.Transitions.Expo.easeInOut});var h=new Fx.Morph("largeimage",{duration:500,transition:Fx.Transitions.Expo.easeInOut});var k=new Fx.Morph("backdrop",{duration:1000,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("backdrop").setStyles({height:0,width:0,opacity:0,top:($("imagewrap").getCoordinates().height/2)+50,left:(window.getWidth()/2)})}});j.start({height:0,width:0,opacity:0});h.start({height:0,width:0,opacity:0,top:($("imagewrap").getCoordinates().height/2)+50,left:(window.getWidth()/2)});k.start({opacity:0})}});g.start({opacity:0})});largeHtmlIsCreated=true}if(galleryimages[currentimage]["lrgheight"]&&galleryimages[currentimage]["lrgwidth"]){var a=new Fx.Morph("loading",{duration:200,transition:Fx.Transitions.Expo.easeInOut});a.start({opacity:1});$("backdrop").setStyles({opacity:0,height:window.getScrollHeight(),width:"100%",top:0,left:0});var e=new Fx.Morph("backdrop",{duration:500,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){largeIsOpen=true;new Asset.image(galleryimages[currentimage]["lrgpath"]+galleryimages[currentimage]["src"],{onload:function(){var j=new Fx.Morph("loading",{duration:200,transition:Fx.Transitions.Expo.easeInOut});var h=new Fx.Morph("lrgwrap",{duration:500,transition:Fx.Transitions.Expo.easeInOut});var g=new Fx.Morph("largeimage",{duration:500,transition:Fx.Transitions.Expo.easeInOut});j.start({opacity:0});h.start({width:galleryimages[currentimage]["lrgwidth"],height:galleryimages[currentimage]["lrgheight"],opacity:1});g.start({width:galleryimages[currentimage]["lrgwidth"],height:galleryimages[currentimage]["lrgheight"],opacity:1,top:window.getScroll().y+20,left:((window.getWidth()/2)-(galleryimages[currentimage]["lrgwidth"]/2))}).addEvent("onComplete",function(){$("lrgloader").empty();var k=new Fx.Morph("lrgloader",{duration:500,transition:Fx.Transitions.Expo.easeInOut});k.start({opacity:0,width:galleryimages[currentimage]["lrgwidth"],height:galleryimages[currentimage]["lrgheight"],top:((($("largeimage").getCoordinates().height/2)-(galleryimages[currentimage]["lrgheight"]/2))),left:((($("largeimage").getCoordinates().width/2)-(galleryimages[currentimage]["lrgwidth"]/2)))}).addEvent("onComplete",function(){loadLarge()})})}})}});e.start({opacity:0.5});window.addEvent("resize",prepareResize);realResize=function(){var h=new Fx.Morph("backdrop",{duration:100,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){}});var g=new Fx.Morph("largeimage",{duration:100,transition:Fx.Transitions.Expo.easeInOut});h.start({opacity:0.5,height:window.getScrollHeight()});g.start({top:window.getScroll().y+20,left:((window.getWidth()/2)-(galleryimages[currentimage]["lrgwidth"]/2))})};$(window.document).addEvent("keydown",function(h){if(h.key=="esc"&&largeIsOpen==true){largeIsOpen=false;$clear(resizeTimeout);var g=new Fx.Morph("closebtn",{duration:500,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("lrgloader").empty();var k=new Fx.Morph("lrgwrap",{duration:500,transition:Fx.Transitions.Expo.easeInOut});var j=new Fx.Morph("largeimage",{duration:500,transition:Fx.Transitions.Expo.easeInOut});var l=new Fx.Morph("backdrop",{duration:1000,transition:Fx.Transitions.Expo.easeInOut,onComplete:function(){$("backdrop").setStyles({height:0,width:0,opacity:0,top:($("imagewrap").getCoordinates().height/2)+50,left:(window.getWidth()/2)})}});k.start({height:0,width:0,opacity:0});j.start({height:0,width:0,opacity:0,top:($("imagewrap").getCoordinates().height/2)+50,left:(window.getWidth()/2)});l.start({opacity:0})}});g.start({opacity:0})}})}}window.addEvent("domready",function(){$("slideshow").addEvent("click",function(){slideshow()});$("showthumbbox").addEvent("click",function(){showthumbbox()});$("showinfo").addEvent("click",function(){showInfo(135)});$("opengallery").addEvent("click",function(){galleries()});$("previous").addEvent("mouseenter",function(){nextprev("previous","enter");var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0})});$("images").addEvent("mouseenter",function(){nextprev("previous","exit");nextprev("next","exit");var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0});var f=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});f.start({opacity:0.75});var e=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75})});$("controls").addEvent("mouseenter",function(){nextprev("previous","exit");nextprev("next","exit");var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0})});$("previous").addEvent("mouseleave",function(){nextprev("previous","exit");nextprev("next","exit")});$("next").addEvent("mouseenter",function(){nextprev("next","enter");nextprev("previous","exit");var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0})});$("next").addEvent("mouseleave",function(){nextprev("next","exit");nextprev("previous","exit")});$("thumbleft").addEvent("mouseleave",function(){var e=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75});var d=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0.75})});$("thumbleft").addEvent("mouseenter",function(){var f=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});f.start({opacity:1});var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0});var e=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75})});$("thumbright").addEvent("mouseleave",function(){var d=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0.75})});$("thumbright").addEvent("mouseenter",function(){var f=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});f.start({opacity:1});var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0});var e=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75})});$("thumbleft").addEvent("click",function(){movethumbs("back")});$("thumbright").addEvent("click",function(){movethumbs("more")});$("thumbnailwrap").addEvent("mouseleave",function(){var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0})});var a=new Asset.image(designPath+"pause.png");galleryHeight=$("gallery").getCoordinates().height;$("imgloader").addEvent("click",function(){createBackDrop()});$("imgloader").addEvent("mouseenter",function(){if(galleryimages[currentimage]["lrgheight"]&&galleryimages[currentimage]["lrgwidth"]){smallMessage("show","Click Image to Enlarge",25)}});$("imgloader").addEvent("mouseleave",function(){if(galleryimages[currentimage]["lrgheight"]&&galleryimages[currentimage]["lrgwidth"]){smallMessage("hide")}if(currentimage!=0){var f=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});f.start({opacity:0.75});var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0});var e=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75})}if(currentimage!=lastimage){var e=new Fx.Morph("thumbleft",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});e.start({opacity:0.75});var d=new Fx.Morph("thumbnailPopUp",{duration:50,transition:Fx.Transitions.Expo.easeInOut});d.start({opacity:0});var f=new Fx.Morph("thumbright",{duration:transitionspeed,transition:Fx.Transitions.Expo.easeInOut});f.start({opacity:0.75})}});$("fsbox").setStyles({left:($("gallery").getCoordinates().width/2)-($("fsbox").getCoordinates().width/2)});$("previous").set("opacity",0.5);$("next").set("opacity",0.5);creategalleries();loadThumbs(0,"loadNew");$("imagewrap").set("opacity",0);thumbSizing=$("1").getCoordinates().width;thumbRightMargin=$("1").getStyle("margin-right").toInt();thumbLeftMargin=$("1").getStyle("margin-left").toInt();setThumbWidth=Number(thumbSizing+thumbRightMargin+thumbLeftMargin);thumbWidth=Number(setThumbWidth);var c=$$(".controls");var b=new Tips(c,{showDelay:100,hideDelay:100,offsets:{x:8,y:8},title:"title",text:null,className:"minitooltips",fixed:false,onShow:function(d){d.fade(1)},onHide:function(d){d.fade(0)}});$(window.document).addEvent("keydown",function(d){if(d.key=="space"&&playing==true){slideshow()}if(d.key=="esc"&&playing==true){slideshow()}if(d.key=="esc"&&openclose==false){galleries()}})});
   519.5 \ No newline at end of file
   520.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   520.2 +++ b/e2gallerypro/js/mootools-1.2-core.js	Mon Feb 22 08:02:39 2010 -0500
   520.3 @@ -0,0 +1,1 @@
   520.4 +var MooTools={version:"1.2.0",build:""};var Native=function(j){j=j||{};var f=j.afterImplement||function(){};var g=j.generics;g=(g!==false);var h=j.legacy;var e=j.initialize;var b=j.protect;var a=j.name;var c=e||h;c.constructor=Native;c.$family={name:"native"};if(h&&e){c.prototype=h.prototype}c.prototype.constructor=c;if(a){var d=a.toLowerCase();c.prototype.$family={name:d};Native.typize(c,d)}var i=function(m,k,n,l){if(!b||l||!m.prototype[k]){m.prototype[k]=n}if(g){Native.genericize(m,k,b)}f.call(m,k,n);return m};c.implement=function(l,k,n){if(typeof l=="string"){return i(this,l,k,n)}for(var m in l){i(this,m,l[m],k)}return this};c.alias=function(m,k,n){if(typeof m=="string"){m=this.prototype[m];if(m){i(this,k,m,n)}}else{for(var l in m){this.alias(l,m[l],k)}}return this};return c};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c)}};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);return b.prototype[c].apply(d.shift(),d)}}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b)}}};Native.alias=function(e,b,a,f){for(var d=0,c=e.length;d<c;d++){e[d].alias(b,a,f)}};(function(b){for(var a in b){Native.typize(b[a],a)}})({"boolean":Boolean,"native":Native,object:Object});(function(b){for(var a in b){new Native({name:a,initialize:b[a],protect:true})}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(b,a){for(var c=a.length;c--;c){Native.genericize(b,a[c],true)}return arguments.callee})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);function $chk(a){return !!(a||a===0)}function $clear(a){clearTimeout(a);clearInterval(a);return null}function $defined(a){return(a!=undefined)}function $empty(){}function $arguments(a){return function(){return arguments[a]}}function $lambda(a){return(typeof a=="function")?a:function(){return a}}function $extend(c,a){for(var b in (a||{})){c[b]=a[b]}return c}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var e in c){b[e]=$unlink(c[e])}break;case"hash":b=$unlink(c.getClean());break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d])}break;default:return c}return b}function $merge(){var e={};for(var d=0,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue}for(var c in b){var g=b[c],f=e[c];e[c]=(f&&$type(g)=="object"&&$type(f)=="object")?$merge(f,g):$unlink(g)}}return e}function $pick(){for(var b=0,a=arguments.length;b<a;b++){if(arguments[b]!=undefined){return arguments[b]}}return null}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b)}function $splat(b){var a=$type(b);return(a)?((a!="array"&&a!="arguments")?[b]:b):[]}var $time=Date.now||function(){return new Date().getTime()};function $try(){for(var b=0,a=arguments.length;b<a;b++){try{return arguments[b]()}catch(c){}}return null}function $type(a){if(a==undefined){return false}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace"}}else{if(typeof a.length=="number"){if(a.callee){return"arguments"}else{if(a.item){return"collection"}}}}return typeof a}var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean())}for(var b in a){this[b]=a[b]}return this}});Hash.implement({getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++}}return b},forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this)}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a]}}return b}});Hash.alias("forEach","each");function $H(a){return new Hash(a)}Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this)}}});Array.alias("forEach","each");function $A(c){if(c.item){var d=[];for(var b=0,a=c.length;b<a;b++){d[b]=c[b]}return d}return Array.prototype.slice.call(c)}function $each(c,b,d){var a=$type(c);((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d)}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925}}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4}}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419}}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18}}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod"}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP")})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1]||0),build:parseInt(a[2]||0)}})();function $exec(b){if(!b){return b}if(window.execScript){window.execScript(b)}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");a.text=b;document.head.appendChild(a);document.head.removeChild(a)}return b}Native.UID=1;var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0]}:function(a){return a.uid||(a.uid=Native.UID++)};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe")}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}return $extend(a,Window.Prototype)},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];a.html=a.getElementsByTagName("html")[0];a.window=a.defaultView||a.parentWindow;if(Browser.Engine.trident4){$try(function(){a.execCommand("BackgroundImageCache",false,true)})}return $extend(a,Document.Prototype)},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a}});Document.Prototype={$family:{name:"document"}};new Document(document);Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false}}return true},filter:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(e,this[b],b,this)){c.push(this[b])}}return c},clean:function(){return this.filter($defined)},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b}}return -1},map:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){c[b]=d.call(e,this[b],b,this)}return c},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true}}return false},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a]}return d},link:function(c){var a={};for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break}}}return a},contains:function(a,b){return this.indexOf(a,b)!=-1},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b])}return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(a){if(!this.contains(a)){this.push(a)}return this},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b])}return this},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1)}}return this},empty:function(){this.length=0;return this},flatten:function(){var d=[];for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b])}return d},hexToRgb:function(b){if(this.length!=3){return null}var a=this.map(function(c){if(c.length==1){c+=c}return c.toInt(16)});return(b)?a:"rgb("+a+")"},rgbToHex:function(d){if(this.length<3){return null}if(this.length==4&&this[3]==0&&!d){return"transparent"}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?"0"+c:c)}return(d)?b:"#"+b.join("")}});Function.implement({extend:function(a){for(var b in a){this[b]=a[b]}return this},create:function(b){var a=this;b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c)}var e=function(){return a.apply(b.bind||null,c)};if(b.delay){return setTimeout(e,b.delay)}if(b.periodical){return setInterval(e,b.periodical)}if(b.attempt){return $try(e)}return e()}},pass:function(a,b){return this.create({arguments:a,bind:b})},attempt:function(a,b){return this.create({arguments:a,bind:b,attempt:true})()},bind:function(b,a){return this.create({bind:b,arguments:a})},bindWithEvent:function(b,a){return this.create({bind:b,event:true,arguments:a})},delay:function(b,c,a){return this.create({delay:b,bind:c,arguments:a})()},periodical:function(a,c,b){return this.create({periodical:a,bind:c,arguments:b})()},run:function(a,b){return this.apply(b,$splat(a))}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this))},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a},times:function(b,c){for(var a=0;a<this;a++){b.call(c,a,this)}},toFloat:function(){return parseFloat(this)},toInt:function(a){return parseInt(this,a||10)}});Number.alias("times","each");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)))}}});Number.implement(a)})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this)},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,"")},clean:function(){return this.replace(/\s+/g," ").trim()},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},toInt:function(a){return parseInt(this,a||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null},stripScripts:function(b){var a="";var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return""});if(b===true){$exec(a)}else{if($type(b)=="function"){b(a,c)}}return c},substitute:function(a,b){return this.replace(b||(/\\?\{([^}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1)}return(a[c]!=undefined)?a[c]:""})}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a}}return null},hasValue:function(a){return(Hash.keyOf(this,a)!==null)},extend:function(a){Hash.each(a,function(c,b){Hash.set(this,b,c)},this);return this},combine:function(a){Hash.each(a,function(c,b){Hash.include(this,b,c)},this);return this},erase:function(a){if(this.hasOwnProperty(a)){delete this[a]}return this},get:function(a){return(this.hasOwnProperty(a))?this[a]:null},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b}return this},empty:function(){Hash.each(this,function(b,a){delete this[a]},this);return this},include:function(b,c){var a=this[b];if(a==undefined){this[b]=c}return this},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this))},this);return a},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e)}},this);return a},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false}}return true},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true}}return false},getKeys:function(){var a=[];Hash.each(this,function(c,b){a.push(b)});return a},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b)});return a},toQueryString:function(a){var b=[];Hash.each(this,function(f,e){if(a){e=a+"["+e+"]"}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f)}if(f!=undefined){b.push(d)}});return b.join("&")}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a}this.$extended=true;var j=a.type;var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111;if(d>0&&d<13){m="f"+d}}m=m||String.fromCharCode(b).toLowerCase()}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body;var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY};if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement;break;case"mouseout":l=a.relatedTarget||a.toElement}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode}return true}).create({attempt:Browser.Engine.gecko})()){l=false}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey})}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation()}else{this.event.cancelBubble=true}return this},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault()}else{this.event.returnValue=false}return this}});var Class=new Native({name:"Class",initialize:function(b){b=b||{};var a=function(e){for(var d in this){this[d]=$unlink(this[d])}for(var f in Class.Mutators){if(!this[f]){continue}Class.Mutators[f](this,this[f]);delete this[f]}this.constructor=a;if(e===$empty){return this}var c=(this.initialize)?this.initialize.apply(this,arguments):this;if(this.options&&this.options.initialize){this.options.initialize.call(this)}return c};$extend(a,this);a.constructor=Class;a.prototype=b;return a}});Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this}});Class.Mutators={Implements:function(a,b){$splat(b).each(function(c){$extend(a,($type(c)=="class")?new c($empty):c)})},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];if(current==undefined){self[key]=previous;continue}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ")})+")")}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current)}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments)};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1))}}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);return this},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){if(this.$chain){this.$chain.empty()}return this}});var Events=new Class({addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events=this.$events||{};this.$events[c]=this.$events[c]||[];this.$events[c].include(b);if(a){b.internal=true}}return this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},fireEvent:function(c,b,a){c=Events.removeOn(c);if(!this.$events||!this.$events[c]){return this}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})()},this);return this},removeEvent:function(b,a){b=Events.removeOn(b);if(!this.$events||!this.$events[b]){return this}if(!a.internal){this.$events[b].erase(a)}return this},removeEvents:function(c){for(var d in this.$events){if(c&&c!=d){continue}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a])}}return this}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue}this.addEvent(a,this.options[a]);delete this.options[a]}return this}});Document.implement({newElement:function(a,b){if(Browser.Engine.trident&&b){["name","type","checked"].each(function(c){if(!b[c]){return}a+=" "+c+'="'+b[c]+'"';if(c!="checked"){delete b[c]}});a="<"+a+">"}return $.element(this.createElement(a)).set(b)},newTextNode:function(a){return this.createTextNode(a)},getDocument:function(){return this},getWindow:function(){return this.defaultView||this.parentWindow},purge:function(){var c=this.getElementsByTagName("*");for(var b=0,a=c.length;b<a;b++){Browser.freeMem(c[b])}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);if(c){return c(b)}if(typeof a=="string"){return document.newElement(a,b)}return $(a).set(b)},afterImplement:function(a,b){if(!Array[a]){Elements.implement(a,Elements.multi(a))}Element.Prototype[a]=b}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var e=Array.link(arguments,{properties:Object.type,iframe:$defined});var c=e.properties||{};var b=$(e.iframe)||false;var d=c.onload||$empty;delete c.onload;c.id=c.name=$pick(c.id,c.name,b.id,b.name,"IFrame_"+$time());b=new Element(b||"iframe",c);var a=function(){var f=$try(function(){return b.contentWindow.location.host});if(f&&f==window.location.host){var h=new Window(b.contentWindow);var g=new Document(b.contentWindow.document);$extend(h.Element.prototype,Element.Prototype)}d.call(b.contentWindow,b.contentWindow.document)};(!window.frames[c.id])?b.addListener("load",a):a();return b}});var Elements=new Native({initialize:function(f,b){b=$extend({ddup:true,cash:true},b);f=f||[];if(b.ddup||b.cash){var g={},e=[];for(var c=0,a=f.length;c<a;c++){var d=$.element(f[c],!b.cash);if(b.ddup){if(g[d.uid]){continue}g[d.uid]=true}e.push(d)}f=e}return(b.cash)?$extend(f,this):f}});Elements.implement({filter:function(a,b){if(!a){return this}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a)}:a,b))}});Elements.multi=function(a){return function(){var b=[];var f=true;for(var d=0,c=this.length;d<c;d++){var e=this[d][a].apply(this[d],arguments);b.push(e);if(f){f=($type(e)=="element")}}return(f)?new Elements(b):b}};Window.implement({$:function(b,c){if(b&&b.$family&&b.uid){return b}var a=$type(b);return($[a])?$[a](b,c,this.document):null},$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a)}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var e=c[d];switch($type(e)){case"element":e=[e];break;case"string":e=this.document.getElements(e,true);break;default:e=false}if(e){f.extend(e)}}return new Elements(f)},getDocument:function(){return this.document},getWindow:function(){return this}});$.string=function(c,b,a){c=a.getElementById(c);return(c)?$.element(c,b):null};$.element=function(a,d){$uid(a);if(!d&&!a.$family&&!(/^object|embed$/i).test(a.tagName)){var b=Element.Prototype;for(var c in b){a[c]=b[c]}}return a};$.object=function(b,c,a){if(b.toElement){return $.element(b.toElement(a),c)}return null};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(a,b){return $(this.getElements(a,true)[0]||null,b)},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f},this);return new Elements(c,{ddup:b,cash:!d})}});Element.Storage={get:function(a){return(this[a]||(this[a]={}))}};Element.Inserters=new Hash({before:function(b,a){if(a.parentNode){a.parentNode.insertBefore(b,a)}},after:function(b,a){if(!a.parentNode){return}var c=a.nextSibling;(c)?a.parentNode.insertBefore(b,c):a.parentNode.appendChild(b)},bottom:function(b,a){a.appendChild(b)},top:function(b,a){var c=a.firstChild;(c)?a.insertBefore(b,c):a.appendChild(b)}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(c,b){var a=b.capitalize();Element.implement("inject"+a,function(d){c(this,$(d,true));return this});Element.implement("grab"+a,function(d){c($(d,true),this);return this})});Element.implement({getDocument:function(){return this.ownerDocument},getWindow:function(){return this.ownerDocument.getWindow()},getElementById:function(d,c){var b=this.ownerDocument.getElementById(d);if(!b){return null}for(var a=b.parentNode;a!=this;a=a.parentNode){if(!a){return null}}return $.element(b,c)},set:function(d,b){switch($type(d)){case"object":for(var c in d){this.set(c,d[c])}break;case"string":var a=Element.Properties.get(d);(a&&a.set)?a.set.apply(this,Array.slice(arguments,1)):this.setProperty(d,b)}return this},get:function(b){var a=Element.Properties.get(b);return(a&&a.get)?a.get.apply(this,Array.slice(arguments,1)):this.getProperty(b)},erase:function(b){var a=Element.Properties.get(b);(a&&a.erase)?a.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(b);return this},match:function(a){return(!a||Element.get(this,"tag")==a)},inject:function(b,a){Element.Inserters.get(a||"bottom")(this,$(b,true));return this},wraps:function(b,a){b=$(b,true);return this.replaces(b).grab(b,a)},grab:function(b,a){Element.Inserters.get(a||"bottom")($(b,true),this);return this},appendText:function(b,a){return this.grab(this.getDocument().newTextNode(b),a)},adopt:function(){Array.flatten(arguments).each(function(a){a=$(a,true);if(a){this.appendChild(a)}},this);return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},clone:function(d,c){switch($type(this)){case"element":var h={};for(var g=0,e=this.attributes.length;g<e;g++){var b=this.attributes[g],p=b.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(p)){continue}var o=(p=="style"&&this.style)?this.style.cssText:b.nodeValue;if(!$chk(o)||p=="uid"||(p=="id"&&!c)){continue}if(o!="inherit"&&["string","number"].contains($type(o))){h[p]=o}}var n=new Element(this.nodeName.toLowerCase(),h);if(d!==false){for(var m=0,f=this.childNodes.length;m<f;m++){var a=Element.clone(this.childNodes[m],true,c);if(a){n.grab(a)}}}return n;case"textnode":return document.newTextNode(this.nodeValue)}return null},replaces:function(a){a=$(a,true);a.parentNode.replaceChild(this,a);return this},hasClass:function(a){return this.className.contains(a," ")},addClass:function(a){if(!this.hasClass(a)){this.className=(this.className+" "+a).clean()}return this},removeClass:function(a){this.className=this.className.replace(new RegExp("(^|\\s)"+a+"(?:\\s|$)"),"$1").clean();return this},toggleClass:function(a){return this.hasClass(a)?this.removeClass(a):this.addClass(a)},getComputedStyle:function(b){if(this.currentStyle){return this.currentStyle[b.camelCase()]}var a=this.getWindow().getComputedStyle(this,null);return(a)?a.getPropertyValue([b.hyphenate()]):null},empty:function(){$A(this.childNodes).each(function(a){Browser.freeMem(a);Element.empty(a);Element.dispose(a)},this);return this},destroy:function(){Browser.freeMem(this.empty().dispose());return null},getSelected:function(){return new Elements($A(this.options).filter(function(a){return a.selected}))},toQueryString:function(){var a=[];this.getElements("input, select, textarea").each(function(b){if(!b.name||b.disabled){return}var c=(b.tagName.toLowerCase()=="select")?Element.getSelected(b).map(function(d){return d.value}):((b.type=="radio"||b.type=="checkbox")&&!b.checked)?null:b.value;$splat(c).each(function(d){if(d){a.push(b.name+"="+encodeURIComponent(d))}})});return a.join("&")},getProperty:function(c){var b=Element.Attributes,a=b.Props[c];var d=(a)?this[a]:this.getAttribute(c,2);return(b.Bools[c])?!!d:(a)?d:d||null},getProperties:function(){var a=$A(arguments);return a.map(function(b){return this.getProperty(b)},this).associate(a)},setProperty:function(d,e){var c=Element.Attributes,b=c.Props[d],a=$defined(e);if(b&&c.Bools[d]){e=(e||!a)?true:false}else{if(!a){return this.removeProperty(d)}}(b)?this[b]=e:this.setAttribute(d,e);return this},setProperties:function(a){for(var b in a){this.setProperty(b,a[b])}return this},removeProperty:function(d){var c=Element.Attributes,b=c.Props[d],a=(b&&c.Bools[d]);(b)?this[b]=(a)?false:"":this.removeAttribute(d);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this}});(function(){var a=function(d,b,i,c,f,h){var e=d[i||b];var g=[];while(e){if(e.nodeType==1&&(!c||Element.match(e,c))){g.push(e);if(!f){break}}e=e[b]}return(f)?new Elements(g,{ddup:false,cash:!h}):$(g[0],h)};Element.implement({getPrevious:function(b,c){return a(this,"previousSibling",null,b,false,c)},getAllPrevious:function(b,c){return a(this,"previousSibling",null,b,true,c)},getNext:function(b,c){return a(this,"nextSibling",null,b,false,c)},getAllNext:function(b,c){return a(this,"nextSibling",null,b,true,c)},getFirst:function(b,c){return a(this,"nextSibling","firstChild",b,false,c)},getLast:function(b,c){return a(this,"previousSibling","lastChild",b,false,c)},getParent:function(b,c){return a(this,"parentNode",null,b,false,c)},getParents:function(b,c){return a(this,"parentNode",null,b,true,c)},getChildren:function(b,c){return a(this,"nextSibling","firstChild",b,true,c)},hasChild:function(b){b=$(b,true);return(!!b&&$A(this.getElementsByTagName(b.tagName)).contains(b))}})})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a},get:function(){return this.style.cssText},erase:function(){this.style.cssText=""}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"")}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("")}};Native.implement([Element,Window,Document],{addListener:function(b,a){if(this.addEventListener){this.addEventListener(b,a,false)}else{this.attachEvent("on"+b,a)}return this},removeListener:function(b,a){if(this.removeEventListener){this.removeEventListener(b,a,false)}else{this.detachEvent("on"+b,a)}return this},retrieve:function(b,a){var d=Element.Storage.get(this.uid);var c=d[b];if($defined(a)&&!$defined(c)){c=d[b]=a}return $pick(c)},store:function(b,a){var c=Element.Storage.get(this.uid);c[b]=a;return this},eliminate:function(a){var b=Element.Storage.get(this.uid);delete b[a];return this}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});Browser.freeMem=function(a){if(!a){return}if(Browser.Engine.trident&&(/object/i).test(a.tagName)){for(var b in a){if(typeof a[b]=="function"){a[b]=$empty}}Element.dispose(a)}if(a.uid&&a.removeEvents){a.removeEvents()}};(function(b){var c=b.Bools,a=b.Camels;b.Bools=c=c.associate(c);Hash.extend(Hash.combine(b.Props,c),a.associate(a.map(function(d){return d.toLowerCase()})));b.erase("Camels")})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();if(Browser.Engine.trident){CollectGarbage()}});Element.Properties.events={set:function(a){this.addEvents(a)}};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this}h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g)}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j)}return false}}f=a.base||f}var d=function(){return g.call(i)};var b=Element.NativeEvents[f]||0;if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow());if(c.call(i,j)===false){j.stop()}}}this.addListener(f,d)}h[e].values.push(d);return this},removeEvent:function(d,c){var b=this.retrieve("events");if(!b||!b[d]){return this}var g=b[d].keys.indexOf(c);if(g==-1){return this}var a=b[d].keys.splice(g,1)[0];var f=b[d].values.splice(g,1)[0];var e=Element.Events.get(d);if(e){if(e.onRemove){e.onRemove.call(this,c)}d=e.base||d}return(Element.NativeEvents[d])?this.removeListener(d,f):this},addEvents:function(a){for(var b in a){this.addEvent(b,a[b])}return this},removeEvents:function(b){var a=this.retrieve("events");if(!a){return this}if(!b){for(var c in a){this.removeEvents(c)}a=null}else{if(a[b]){while(a[b].keys[0]){this.removeEvent(b,a[b].keys[0])}a[b]=null}}return this},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})()},this);return this},cloneEvents:function(d,a){d=$(d);var c=d.retrieve("events");if(!c){return this}if(!a){for(var b in c){this.cloneEvents(d,b)}}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e)},this)}}return this}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true}if(c===false){return false}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c))};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}})})();Element.Properties.styles={set:function(a){this.setStyles(a)}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"}}else{if(this.style.visibility!="visible"){this.style.visibility="visible"}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"}this.style.opacity=a;this.store("opacity",a)},get:function(){return this.retrieve("opacity",1)}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true)},getOpacity:function(){return this.get("opacity")},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return""}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e}).join(" ")}else{if(a==String(Number(a))){a=Math.round(a)}}this.style[b]=a;return this},getStyle:function(g){switch(g){case"opacity":return this.get("opacity");case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat"}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue}for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e))}return a.join(" ")}a=this.getComputedStyle(g)}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/);if(c){a=a.replace(c[0],c[0].rgbToHex())}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0;b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt()},this);return this["offset"+g.capitalize()]-d+"px"}if(Browser.Engine.presto&&String(a).test("px")){return a}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px"}}return a},setStyles:function(b){for(var a in b){this.setStyle(a,b[a])}return this},getStyles:function(){var a={};Array.each(arguments,function(b){a[b]=this.getStyle(b)},this);return a}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(g){var f=Element.ShortStyles;var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px"});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color";f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)"});(function(){Element.implement({scrollTo:function(h,i){if(b(this)){this.getWindow().scrollTo(h,i)}else{this.scrollLeft=h;this.scrollTop=i}return this},getSize:function(){if(b(this)){return this.getWindow().getSize()}return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize()}return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(b(this)){return this.getWindow().getScroll()}return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var i=this,h={x:0,y:0};while(i&&!b(i)){h.x+=i.scrollLeft;h.y+=i.scrollTop;i=i.parentNode}return h},getOffsetParent:function(){var h=this;if(b(h)){return null}if(!Browser.Engine.trident){return h.offsetParent}while((h=h.parentNode)&&!b(h)){if(d(h,"position")!="static"){return h}}return null},getOffsets:function(){var i=this,h={x:0,y:0};if(b(this)){return h}while(i&&!b(i)){h.x+=i.offsetLeft;h.y+=i.offsetTop;if(Browser.Engine.gecko){if(!f(i)){h.x+=c(i);h.y+=g(i)}var j=i.parentNode;if(j&&d(j,"overflow")!="visible"){h.x+=c(j);h.y+=g(j)}}else{if(i!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){h.x+=c(i);h.y+=g(i)}}i=i.offsetParent;if(Browser.Engine.trident){while(i&&!i.currentStyle.hasLayout){i=i.offsetParent}}}if(Browser.Engine.gecko&&!f(this)){h.x-=c(this);h.y-=g(this)}return h},getPosition:function(k){if(b(this)){return{x:0,y:0}}var l=this.getOffsets(),i=this.getScrolls();var h={x:l.x-i.x,y:l.y-i.y};var j=(k&&(k=$(k)))?k.getPosition():{x:0,y:0};return{x:h.x-j.x,y:h.y-j.y}},getCoordinates:function(j){if(b(this)){return this.getWindow().getCoordinates()}var h=this.getPosition(j),i=this.getSize();var k={left:h.x,top:h.y,width:i.x,height:i.y};k.right=k.left+k.width;k.bottom=k.top+k.height;return k},computePosition:function(h){return{left:h.x-e(this,"margin-left"),top:h.y-e(this,"margin-top")}},position:function(h){return this.setStyles(this.computePosition(h))}});Native.implement([Document,Window],{getSize:function(){var i=this.getWindow();if(Browser.Engine.presto||Browser.Engine.webkit){return{x:i.innerWidth,y:i.innerHeight}}var h=a(this);return{x:h.clientWidth,y:h.clientHeight}},getScroll:function(){var i=this.getWindow();var h=a(this);return{x:i.pageXOffset||h.scrollLeft,y:i.pageYOffset||h.scrollTop}},getScrollSize:function(){var i=a(this);var h=this.getSize();return{x:Math.max(i.scrollWidth,h.x),y:Math.max(i.scrollHeight,h.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var h=this.getSize();return{top:0,left:0,bottom:h.y,right:h.x,height:h.y,width:h.x}}});var d=Element.getComputedStyle;function e(h,i){return d(h,i).toInt()||0}function f(h){return d(h,"-moz-box-sizing")=="border-box"}function g(h){return e(h,"border-top-width")}function c(h){return e(h,"border-left-width")}function b(h){return(/^(?:body|html)$/i).test(h.tagName)}function a(h){var i=h.getDocument();return(!i.compatMode||i.compatMode=="CSS1Compat")?i.html:i.body}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});Native.implement([Document,Element],{getElements:function(h,g){h=h.split(",");var c,e={};for(var d=0,b=h.length;d<b;d++){var a=h[d],f=Selectors.Utils.search(this,a,e);if(d!=0&&f.item){f=$A(f)}c=(d==0)?f:(c.item)?$A(c).concat(f):c.concat(f)}return new Elements(c,{ddup:(h.length>1),cash:!g})}});Element.implement({match:function(b){if(!b){return true}var d=Selectors.Utils.parseTagAndID(b);var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(b,c){if(!c){return true}var a=$uid(b);if(!c[a]){return c[a]=true}return false},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h]}var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false}var g=parseInt(e[1]);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3])||0;if(d!=0){c--;while(c<1){c+=d}while(c>=d){c-=d}}else{d=c;f="index"}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"};break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"};break;default:e={a:(d-1),special:"index"}}return Selectors.Cache.nth[h]=e},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e]}var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[4],c=d[5],j=d[6];if(i){h.classes.push(i)}else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j})}else{h.attributes.push({name:c,operator:"=",value:j})}}else{if(g){h.attributes.push({name:g,operator:f,value:b})}}}}if(!h.classes.length){delete h.classes}if(!h.attributes.length){delete h.attributes}if(!h.pseudos.length){delete h.pseudos}if(!h.classes&&!h.attributes&&!h.pseudos){h=null}return Selectors.Cache.parsed[e]=h},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]},filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false}}}if(c.attributes){for(d=c.attributes.length;d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d];if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false}}}return true},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true);return(c&&Selectors.Filters.byTag(c,a))?[c]:[]}else{return b.getElementsByTagName(a)}},search:function(p,o,u){var b=[];var c=o.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j);return":)"+i}).split(":)");var q,f,e,B;for(var A=0,w=c.length;A<w;A++){var z=c[A];if(A==0&&Selectors.RegExps.quick.test(z)){q=p.getElementsByTagName(z);continue}var a=b[A-1];var r=Selectors.Utils.parseTagAndID(z);var C=r[0],s=r[1];if(A==0){q=Selectors.Utils.getByTagAndID(p,C,s)}else{var d={},h=[];for(var y=0,x=q.length;y<x;y++){h=Selectors.Getters[a](h,q[y],C,s,d)}q=h}var g=Selectors.Utils.parseSelector(z);if(g){e=[];for(var v=0,t=q.length;v<t;v++){B=q[v];if(Selectors.Utils.filter(B,g,u)){e.push(B)}}q=e}}return q}};Selectors.Getters={" ":function(h,g,j,a,e){var d=Selectors.Utils.getByTagAndID(g,j,a);for(var c=0,b=d.length;c<b;c++){var f=d[c];if(Selectors.Utils.chk(f,e)){h.push(f)}}return h},">":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;e<d;e++){var b=c[e];if(b.parentNode==g&&Selectors.Utils.chk(b,f)){h.push(b)}}return h},"+":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(Selectors.Utils.chk(b,d)&&Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b)}break}}return c},"~":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(!Selectors.Utils.chk(b,d)){break}if(Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b)}}}return c}};Selectors.Filters={byTag:function(b,a){return(a=="*"||(b.tagName&&b.tagName.toLowerCase()==a))},byID:function(a,b){return(!b||(a.id&&a.id==b))},byClass:function(b,a){return(b.className&&b.className.contains(a," "))},byPseudo:function(a,d,c,b){return d.call(a,c,b)},byAttribute:function(c,d,b,e){var a=Element.prototype.getProperty.call(c,d);if(!a){return false}if(!b||e==undefined){return true}switch(b){case"=":return(a==e);case"*=":return(a.contains(e));case"^=":return(a.substr(0,e.length)==e);case"$=":return(a.substr(a.length-e.length)==e);case"!=":return(a!=e);case"~=":return a.contains(e," ");case"|=":return a.contains(e,"-")}return false}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length},not:function(a){return !Element.match(this,a)},contains:function(a){return(this.innerText||this.textContent||"").contains(a)},"first-child":function(){return Selectors.Pseudo.index.call(this,0)},"last-child":function(){var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"only-child":function(){var b=this;while((b=b.previousSibling)){if(b.nodeType==1){return false}}var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false}}return true},"nth-child":function(g,e){g=(g==undefined)?"n":g;var c=Selectors.Utils.parseNthArgument(g);if(c.special!="n"){return Selectors.Pseudo[c.special].call(this,c.a,e)}var f=0;e.positions=e.positions||{};var d=$uid(this);if(!e.positions[d]){var b=this;while((b=b.previousSibling)){if(b.nodeType!=1){continue}f++;var a=e.positions[$uid(b)];if(a!=undefined){f=a+f;break}}e.positions[d]=f}return(e.positions[d]%c.a==c.b)},index:function(a){var b=this,c=0;while((b=b.previousSibling)){if(b.nodeType==1&&++c>a){return false}}return(c==a)},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a)},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a)}});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this)}}};(function(){var b=function(){if(Browser.loaded){return}Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready")};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50)})();break;case"trident":var a=document.createElement("div");(function(){($try(function(){a.doScroll("left");return $(a).inject(document.body).set("html","temp").dispose()}))?b():arguments.callee.delay(50)})();break;default:window.addEvent("load",b);document.addEvent("DOMContentLoaded",b)}})();var JSON=new Hash({encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var a=[];Hash.each(b,function(e,d){var c=JSON.encode(e);if(c){a.push(JSON.encode(d)+":"+c)}});return"{"+a+"}";case"number":case"boolean":return String(b);case false:return"null"}return null},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16)},decode:function(string,secure){if($type(string)!="string"||!string.length){return null}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null}return eval("("+string+")")}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this)}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(b,a){this.key=b;this.setOptions(a)},write:function(b){b=encodeURIComponent(b);if(this.options.domain){b+="; domain="+this.options.domain}if(this.options.path){b+="; path="+this.options.path}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString()}if(this.options.secure){b+="; secure"}this.options.document.cookie=this.key+"="+b;return this},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");return(a)?decodeURIComponent(a[1]):null},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this}});Cookie.write=function(b,c,a){return new Cookie(b,a).write(c)};Cookie.read=function(a){return new Cookie(a).read()};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose()};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object},initialize:function(l,m){this.instance="Swiff_"+$time();this.setOptions(m);m=this.options;var b=this.id=m.id||this.instance;var a=$(m.container);Swiff.CallBacks[this.instance]={};var e=m.params,g=m.vars,f=m.callBacks;var h=$extend({height:m.height,width:m.width},m.properties);var k=this;for(var d in f){Swiff.CallBacks[this.instance][d]=(function(n){return function(){return n.apply(k.object,arguments)}})(f[d]);g[d]="Swiff.CallBacks."+this.instance+"."+d}e.flashVars=Hash.toQueryString(g);if(Browser.Engine.trident){h.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";e.movie=l}else{h.type="application/x-shockwave-flash";h.data=l}var j='<object id="'+b+'"';for(var i in h){j+=" "+i+'="'+h[i]+'"'}j+=">";for(var c in e){if(e[c]){j+='<param name="'+c+'" value="'+e[c]+'" />'}}j+="</object>";this.object=((a)?a.empty():new Element("div")).set("html",j).firstChild},replaces:function(a){a=$(a,true);a.parentNode.replaceChild(this.toElement(),a);return this},inject:function(a){$(a,true).appendChild(this.toElement());return this},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments))}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs)};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(a){return -(Math.cos(Math.PI*a)-1)/2}},initialize:function(a){this.subject=this.subject||this;this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"}},step:function(){var a=$time();if(a<this.time+this.options.duration){var b=this.options.transition((a-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,b))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(a){return a},compute:function(c,b,a){return Fx.compute(c,b,a)},check:function(a){if(!this.timer){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(a.bind(this,Array.slice(arguments,1)));return false}return false},start:function(b,a){if(!this.check(arguments.callee,b,a)){return this}this.from=b;this.to=a;this.time=0;this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer()){this.onComplete()}return this},cancel:function(){if(this.stopTimer()){this.onCancel()}return this},onStart:function(){this.fireEvent("start",this.subject)},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject)}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer){return false}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(c,b,a){return(b-c)*a+c};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(d,e,b){b=$splat(b);var c=b[1];if(!$chk(c)){b[1]=b[0];b[0]=d.getStyle(e)}var a=b.map(this.parse);return{from:a[0],to:a[1]}},parse:function(a){a=$lambda(a)();a=(typeof a=="string")?a.split(" "):$splat(a);return a.map(function(c){c=String(c);var b=false;Fx.CSS.Parsers.each(function(f,e){if(b){return}var d=f.parse(c);if($chk(d)){b={value:d,parser:f}}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b})},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(e){a.push({value:d[e].parser.compute(d[e].value,c[e].value,b),parser:d[e].parser})});a.$family={name:"fx:css:value"};return a},serve:function(c,b){if($type(c)!="fx:css:value"){c=this.parse(c)}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b))});return a},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b))},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a]}var b={};Array.each(document.styleSheets,function(e,d){var c=e.href;if(c&&c.contains("://")&&!c.contains(document.domain)){return}var f=e.rules||e.cssRules;Array.each(f,function(j,g){if(!j.style){return}var h=(j.selectorText)?j.selectorText.replace(/^\w+/,function(i){return i.toLowerCase()}):null;if(!h||!h.test("^"+a+"$")){return}Element.Styles.each(function(k,i){if(!j.style[i]||Element.ShortStyles[i]){return}k=String(j.style[i]);b[i]=(k.test(/^rgb/))?k.rgbToHex():k})})});return Fx.CSS.Cache[a]=b}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true)}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false},compute:function(c,b,a){return c.map(function(e,d){return Math.round(Fx.compute(c[d],b[d],a))})},serve:function(a){return a.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=$(b);this.parent(a)},set:function(b,a){if(arguments.length==1){a=b;b=this.property||this.options.property}this.render(this.element,b,a,this.options.unit);return this},start:function(c,e,d){if(!this.check(arguments.callee,c,e,d)){return this}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to)}});Element.Properties.tween={set:function(a){var b=this.retrieve("tween");if(b){b.cancel()}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("tween")){if(a||!this.retrieve("tween:options")){this.set("tween",a)}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")))}return this.retrieve("tween")}};Element.implement({tween:function(a,c,b){this.get("tween").start(arguments);return this},fade:function(c){var e=this.get("tween"),d="opacity",a;c=$pick(c,"toggle");switch(c){case"in":e.start(d,1);break;case"out":e.start(d,0);break;case"show":e.set(d,1);break;case"hide":e.set(d,0);break;case"toggle":var b=this.retrieve("fade:flag",this.get("opacity")==1);e.start(d,(b)?0:1);this.store("fade:flag",!b);a=true;break;default:e.start(d,arguments)}if(!a){this.eliminate("fade:flag")}return this},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));a=(a=="transparent")?"#fff":a}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));b.callChain()}.bind(this));return this}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=$(b);this.parent(a)},set:function(a){if(typeof a=="string"){a=this.search(a)}for(var b in a){this.render(this.element,b,a[b],this.options.unit)}return this},compute:function(e,d,c){var a={};for(var b in e){a[b]=this.parent(e[b],d[b],c)}return a},start:function(b){if(!this.check(arguments.callee,b)){return this}if(typeof b=="string"){b=this.search(b)}var e={},d={};for(var c in b){var a=this.prepare(this.element,c,b[c]);e[c]=a.from;d[c]=a.to}return this.parent(e,d)}});Element.Properties.morph={set:function(a){var b=this.retrieve("morph");if(b){b.cancel()}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},a))},get:function(a){if(a||!this.retrieve("morph")){if(a||!this.retrieve("morph:options")){this.set("morph",a)}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")))}return this.retrieve("morph")}};Element.implement({morph:function(a){this.get("morph").start(a);return this}});(function(){var a=Fx.prototype.initialize;Fx.prototype.initialize=function(b){a.call(this,b);var c=this.options.transition;if(typeof c=="string"&&(c=c.split(":"))){var d=Fx.Transitions;d=d[c[0]]||d[c[0].capitalize()];if(c[1]){d=d["ease"+c[1].capitalize()+(c[2]?c[2].capitalize():"")]}this.options.transition=d}}})();Fx.Transition=function(b,a){a=$splat(a);return $extend(b,{easeIn:function(c){return b(c,a)},easeOut:function(c){return 1-b(1-c,a)},easeInOut:function(c){return(c<=0.5)?b(2*c,a)/2:(2-b(2*(1-c),a))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b])}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a[0]||6)},Expo:function(a){return Math.pow(2,8*(a-1))},Circ:function(a){return 1-Math.sin(Math.acos(a))},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2)},Back:function(b,a){a=a[0]||1.618;return Math.pow(b,2)*((a+1)*b-a)},Bounce:function(f){var e;for(var d=0,c=1;1;d+=c,c/=2){if(f>=(7-4*d)/11){e=-Math.pow((11-6*d-11*f)/4,2)+c*c;break}}return e},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a[0]||1)/3)}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,[a+2])})});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(a){this.xhr=new Browser.Request();this.setOptions(a);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}this.xhr.onreadystatechange=$empty},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a)}return a.stripScripts(this.options.evalScripts)},success:function(b,a){this.onSuccess(this.processScripts(b),a)},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr)},setHeader:function(a,b){this.headers.set(a,b);return this},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a)}.bind(this))},check:function(a){if(!this.running){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(a.bind(this,Array.slice(arguments,1)));return false}return false},send:function(i){if(!this.check(arguments.callee,i)){return this}this.running=true;var g=$type(i);if(g=="string"||g=="element"){i={data:i}}var d=this.options;i=$extend({data:d.data,url:d.url,method:d.method},i);var e=i.data,b=i.url,a=i.method;switch($type(e)){case"element":e=$(e).toQueryString();break;case"object":case"hash":e=Hash.toQueryString(e)}if(this.options.format){var h="format="+this.options.format;e=(e)?h+"&"+e:h}if(this.options.emulation&&["put","delete"].contains(a)){var f="_method="+a;e=(e)?f+"&"+e:f;a="post"}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+c)}if(e&&a=="get"){b=b+(b.contains("?")?"&":"?")+e;e=null}this.xhr.open(a.toUpperCase(),b,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(k,j){if(!$try(function(){this.xhr.setRequestHeader(j,k);return true}.bind(this))){this.fireEvent("exception",[j,k])}},this);this.fireEvent("request");this.xhr.send(e);if(!this.options.async){this.onStateChange()}return this},cancel:function(){if(!this.running){return this}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this}});(function(){var a={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(c,{method:b.toLowerCase()}))}});Request.implement(a)})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel()}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a))},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a)}this.store("send",new Request(this.retrieve("send:options")))}return this.retrieve("send")}};Element.implement({send:function(a){var b=this.get("send");b.send({data:this,url:a||b.options.url});return this}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(c){var b=c.match(/<body[^>]*>([\s\S]*?)<\/body>/i);c=(b)?b[1]:c;var a=new Element("div");return $try(function(){var d="<root>"+c+"</root>",g;if(Browser.Engine.trident){g=new ActiveXObject("Microsoft.XMLDOM");g.async=false;g.loadXML(d)}else{g=new DOMParser().parseFromString(d,"text/xml")}d=g.getElementsByTagName("root")[0];for(var f=0,e=d.childNodes.length;f<e;f++){var h=Element.clone(d.childNodes[f],true,true);if(h){a.grab(h)}}return a})||a.set("html",c)},success:function(d){var c=this.options,b=this.response;b.html=d.stripScripts(function(e){b.javascript=e});var a=this.processHTML(b.html);b.tree=a.childNodes;b.elements=a.getElements("*");if(c.filter){b.tree=b.elements.filter(c.filter)}if(c.update){$(c.update).empty().adopt(b.tree)}if(c.evalScripts){$exec(b.javascript)}this.onSuccess(b.tree,b.elements,b.html,b.javascript)}});Element.Properties.load={set:function(a){var b=this.retrieve("load");if(b){send.cancel()}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},a))},get:function(a){if(a||!this.retrieve("load")){if(a||!this.retrieve("load:options")){this.set("load",a)}this.store("load",new Request.HTML(this.retrieve("load:options")))}return this.retrieve("load")}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);this.headers.extend({Accept:"application/json","X-Request":"JSON"})},success:function(a){this.response.json=JSON.decode(a,this.options.secure);this.onSuccess(this.response.json,a)}});
   520.5 \ No newline at end of file
   521.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   521.2 +++ b/e2gallerypro/js/mootools-1.2-more.js	Mon Feb 22 08:02:39 2010 -0500
   521.3 @@ -0,0 +1,1 @@
   521.4 +Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper)}},true);this.element=this.subject=$(b);this.parent(a);var c=this.element.retrieve("wrapper");this.wrapper=c||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth},set:function(a){this.element.setStyle(this.margin,a[0]);this.wrapper.setStyle(this.layout,a[1]);return this},compute:function(e,d,c){var b=[];var a=2;a.times(function(f){b[f]=Fx.compute(e[f],d[f],c)});return b},start:function(b,e){if(!this.check(arguments.callee,b,e)){return this}this[e||this.options.mode]();var d=this.element.getStyle(this.margin).toInt();var c=this.wrapper.getStyle(this.layout).toInt();var a=[[d,c],[0,this.offset]];var g=[[d,c],[-this.offset,0]];var f;switch(b){case"in":f=a;break;case"out":f=g;break;case"toggle":f=(this.wrapper["offset"+this.layout.capitalize()]==0)?a:g}return this.parent(f[0],f[1])},slideIn:function(a){return this.start("in",a)},slideOut:function(a){return this.start("out",a)},hide:function(a){this[a||this.options.mode]();this.open=false;return this.set([-this.offset,0])},show:function(a){this[a||this.options.mode]();this.open=true;return this.set([0,this.offset])},toggle:function(a){return this.start("toggle",a)}});Element.Properties.slide={set:function(b){var a=this.retrieve("slide");if(a){a.cancel()}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},b))},get:function(a){if(a||!this.retrieve("slide")){if(a||!this.retrieve("slide:options")){this.set("slide",a)}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")))}return this.retrieve("slide")}};Element.implement({slide:function(d,e){d=d||"toggle";var b=this.get("slide"),a;switch(d){case"hide":b.hide(e);break;case"show":b.show(e);break;case"toggle":var c=this.retrieve("slide:flag",b.open);b[(c)?"slideOut":"slideIn"](e);this.store("slide:flag",!c);a=true;break;default:b.start(d,e)}if(!a){this.eliminate("slide:flag")}return this}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(b,a){this.element=this.subject=$(b);this.parent(a);var d=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body)}var c=this.element;if(this.options.wheelStops){this.addEvent("start",function(){c.addEvent("mousewheel",d)},true);this.addEvent("complete",function(){c.removeEvent("mousewheel",d)},true)}},set:function(){var a=Array.flatten(arguments);this.element.scrollTo(a[0],a[1])},compute:function(e,d,c){var b=[];var a=2;a.times(function(f){b.push(Fx.compute(e[f],d[f],c))});return b},start:function(c,h){if(!this.check(arguments.callee,c,h)){return this}var e=this.element.getSize(),f=this.element.getScrollSize();var b=this.element.getScroll(),d={x:c,y:h};for(var g in d){var a=f[g]-e[g];if($chk(d[g])){d[g]=($type(d[g])=="number")?d[g].limit(0,a):a}else{d[g]=b[g]}d[g]+=this.options.offset[g]}return this.parent([b.x,b.y],[d.x,d.y])},toTop:function(){return this.start(false,0)},toLeft:function(){return this.start(0,false)},toRight:function(){return this.start("right",false)},toBottom:function(){return this.start(false,"bottom")},toElement:function(b){var a=$(b).getPosition(this.element);return this.start(a.x,a.y)}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);this.parent(a)},compute:function(g,h,j){var c={};for(var d in g){var a=g[d],e=h[d],f=c[d]={};for(var b in a){f[b]=this.parent(a[b],e[b],j)}}return c},set:function(b){for(var c in b){var a=b[c];for(var d in a){this.render(this.elements[c],d,a[d],this.options.unit)}}return this},start:function(c){if(!this.check(arguments.callee,c)){return this}var h={},j={};for(var d in c){var f=c[d],a=h[d]={},g=j[d]={};for(var b in f){var e=this.prepare(this.elements[d],b,f[b]);a[b]=e.from;g[b]=e.to}}return this.parent(h,j)}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});this.element=$(b.element);this.document=this.element.getDocument();this.setOptions(b.options||{});var a=$type(this.options.handle);this.handles=(a=="array"||a=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach()},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);return this},start:function(c){if(this.options.preventDefault){c.preventDefault()}this.fireEvent("beforeStart",this.element);this.mouse.start=c.page;var a=this.options.limit;this.limit={x:[],y:[]};for(var d in this.options.modifiers){if(!this.options.modifiers[d]){continue}if(this.options.style){this.value.now[d]=this.element.getStyle(this.options.modifiers[d]).toInt()}else{this.value.now[d]=this.element[this.options.modifiers[d]]}if(this.options.invert){this.value.now[d]*=-1}this.mouse.pos[d]=c.page[d]-this.value.now[d];if(a&&a[d]){for(var b=2;b--;b){if($chk(a[d][b])){this.limit[d][b]=$lambda(a[d][b])()}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid}}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop)},check:function(a){if(this.options.preventDefault){a.preventDefault()}var b=Math.round(Math.sqrt(Math.pow(a.page.x-this.mouse.start.x,2)+Math.pow(a.page.y-this.mouse.start.y,2)));if(b>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",this.element).fireEvent("snap",this.element)}},drag:function(a){if(this.options.preventDefault){a.preventDefault()}this.mouse.now=a.page;for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue}this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1]}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0]}}}if(this.options.grid[b]){this.value.now[b]-=(this.value.now[b]%this.options.grid[b])}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit)}else{this.element[this.options.modifiers[b]]=this.value.now[b]}}this.fireEvent("drag",this.element)},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element)}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(a){this.fireEvent("complete",this.element)}}});Element.implement({makeResizable:function(a){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a))}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(c,b){this.parent(c,b);this.droppables=$$(this.options.droppables);this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body)}c=this.element;var d=c.getStyle("position");var a=(d!="static")?d:"absolute";if(c.getStyle("left")=="auto"||c.getStyle("top")=="auto"){c.position(c.getPosition(c.offsetParent))}c.setStyle("position",a);this.addEvent("start",function(){this.checkDroppables()},true)},start:function(b){if(this.container){var d=this.element,j=this.container,e=j.getCoordinates(d.offsetParent),f={},a={};["top","right","bottom","left"].each(function(k){f[k]=j.getStyle("padding-"+k).toInt();a[k]=d.getStyle("margin-"+k).toInt()},this);var c=d.offsetWidth+a.left+a.right,i=d.offsetHeight+a.top+a.bottom;var h=[e.left+f.left,e.right-f.right-c];var g=[e.top+f.top,e.bottom-f.bottom-i];this.options.limit={x:h,y:g}}this.parent(b)},checkAgainst:function(b){b=b.getCoordinates();var a=this.mouse.now;return(a.x>b.left&&a.x<b.right&&a.y<b.bottom&&a.y>b.top)},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed])}if(a){this.overed=a;this.fireEvent("enter",[this.element,a])}else{this.overed=null}}},drag:function(a){this.parent(a);if(this.droppables.length){this.checkDroppables()}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);this.overed=null;return this.parent(a)}});Element.implement({makeDraggable:function(a){return new Drag.Move(this,a)}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(b,a){this.parent(b,a);this.load()},save:function(){var a=JSON.encode(this.hash);if(!a||a.length>4096){return false}if(a=="{}"){this.dispose()}else{this.write(a)}return true},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this}});Hash.Cookie.implement((function(){var a={};Hash.each(Hash.prototype,function(c,b){a[b]=function(){var d=c.apply(this.hash,arguments);if(this.options.autoSave){this.save()}return d}});return a})());var Color=new Native({initialize:function(b,c){if(arguments.length>=3){c="rgb";b=Array.slice(arguments,0,3)}else{if(typeof b=="string"){if(b.match(/rgb/)){b=b.rgbToHex().hexToRgb(true)}else{if(b.match(/hsb/)){b=b.hsbToRgb()}else{b=b.hexToRgb(true)}}}}c=c||"rgb";switch(c){case"hsb":var a=b;b=b.hsbToRgb();b.hsb=a;break;case"hex":b=b.hexToRgb(true);break}b.rgb=b.slice(0,3);b.hsb=b.hsb||b.rgbToHsb();b.hex=b.rgbToHex();return $extend(b,this)}});Color.implement({mix:function(){var a=Array.slice(arguments);var c=($type(a.getLast())=="number")?a.pop():50;var b=this.slice();a.each(function(d){d=new Color(d);for(var e=0;e<3;e++){b[e]=Math.round((b[e]/100*(100-c))+(d[e]/100*c))}});return new Color(b,"rgb")},invert:function(){return new Color(this.map(function(a){return 255-a}))},setHue:function(a){return new Color([a,this.hsb[1],this.hsb[2]],"hsb")},setSaturation:function(a){return new Color([this.hsb[0],a,this.hsb[2]],"hsb")},setBrightness:function(a){return new Color([this.hsb[0],this.hsb[1],a],"hsb")}});function $RGB(d,c,a){return new Color([d,c,a],"rgb")}function $HSB(d,c,a){return new Color([d,c,a],"hsb")}function $HEX(a){return new Color(a,"hex")}Array.implement({rgbToHsb:function(){var b=this[0],c=this[1],j=this[2];var g,f,h;var i=Math.max(b,c,j),e=Math.min(b,c,j);var k=i-e;h=i/255;f=(i!=0)?k/i:0;if(f==0){g=0}else{var d=(i-b)/k;var a=(i-c)/k;var l=(i-j)/k;if(b==i){g=l-a}else{if(c==i){g=2+d-l}else{g=4+a-d}}g/=6;if(g<0){g++}}return[Math.round(g*360),Math.round(f*100),Math.round(h*100)]},hsbToRgb:function(){var c=Math.round(this[2]/100*255);if(this[1]==0){return[c,c,c]}else{var a=this[0]%360;var e=a%60;var g=Math.round((this[2]*(100-this[1]))/10000*255);var d=Math.round((this[2]*(6000-this[1]*e))/600000*255);var b=Math.round((this[2]*(6000-this[1]*(60-e)))/600000*255);switch(Math.floor(a/60)){case 0:return[c,b,g];case 1:return[d,c,g];case 2:return[g,c,b];case 3:return[g,d,c];case 4:return[b,g,c];case 5:return[c,g,d]}}return false}});String.implement({rgbToHsb:function(){var a=this.match(/\d{1,3}/g);return(a)?hsb.rgbToHsb():null},hsbToRgb:function(){var a=this.match(/\d{1,3}/g);return(a)?a.hsbToRgb():null}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={}},addEvent:function(b,a){this.checker[b]=this.checker[b]||{};this.events[b]=this.events[b]||[];if(this.events[b].contains(a)){return false}else{this.events[b].push(a)}this.instances.each(function(c,d){c.addEvent(b,this.check.bind(this,[b,c,d]))},this);return this},check:function(c,a,b){this.checker[c][b]=true;var d=this.instances.every(function(f,e){return this.checker[c][e]||false},this);if(!d){return}this.checker[c]={};this.events[c].each(function(e){e.call(this,this.instances,a)},this)}});var Asset=new Hash({javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);var b=new Element("script",{src:f,type:"text/javascript"});var e=d.onload.bind(b),a=d.check,g=d.document;delete d.onload;delete d.check;delete d.document;b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e()}}}).setProperties(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return}$clear(c);e()}).periodical(50)}return b.inject(g.head)},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head)},image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=$(d)||new Element("img");["load","abort","error"].each(function(e){var f="on"+e;var g=b[f];delete b[f];d[f]=function(){if(!d){return}if(!a.parentNode){a.width=d.width;a.height=d.height}d=d.onload=d.onabort=d.onerror=null;g.delay(1,a,a);a.fireEvent(e,a,1)}});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1)}return a.setProperties(b)},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty},c);if(!d.push){d=[d]}var a=[];var b=0;d.each(function(f){var e=new Asset.image(f,{onload:function(){c.onProgress.call(this,b,d.indexOf(f));b++;if(b==d.length){c.onComplete()}}});a.push(e)});return new Elements(a)}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(a,b){this.setOptions(b);this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(a)||a));if(!this.options.clone){this.options.revert=false}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert))}},attach:function(){this.addLists(this.lists);return this},detach:function(){this.lists=this.removeLists(this.lists);return this},addItems:function(){Array.flatten(arguments).each(function(a){this.elements.push(a);var b=a.retrieve("sortables:start",this.start.bindWithEvent(this,a));(this.options.handle?a.getElement(this.options.handle)||a:a).addEvent("mousedown",b)},this);return this},addLists:function(){Array.flatten(arguments).each(function(a){this.lists.push(a);this.addItems(a.getChildren())},this);return this},removeItems:function(){var a=[];Array.flatten(arguments).each(function(b){a.push(b);this.elements.erase(b);var c=b.retrieve("sortables:start");(this.options.handle?b.getElement(this.options.handle)||b:b).removeEvent("mousedown",c)},this);return $$(a)},removeLists:function(){var a=[];Array.flatten(arguments).each(function(b){a.push(b);this.lists.erase(b);this.removeItems(b.getChildren())},this);return $$(a)},getClone:function(b,a){if(!this.options.clone){return new Element("div").inject(document.body)}if($type(this.options.clone)=="function"){return this.options.clone.call(this,b,a,this.list)}return a.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:a.getStyle("width")}).inject(this.list).position(a.getPosition(a.getOffsetParent()))},getDroppables:function(){var a=this.list.getChildren();if(!this.options.constrain){a=this.lists.concat(a).erase(this.list)}return a.erase(this.clone).erase(this.element)},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;this.drag.droppables=this.getDroppables()}else{a=this.element.getAllPrevious().contains(b)?"before":"after"}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone])},start:function(b,a){if(!this.idle){return}this.idle=false;this.element=a;this.opacity=a.get("opacity");this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){b.stop();this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone])}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});this.clone.inject(this.element,"before");this.drag.start(b)},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var a=this.element.getStyles("width","height");var b=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:b.top,left:b.left,width:a.width,height:a.height,opacity:0.25}).chain(this.reset.bind(this))}else{this.reset()}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element)},serialize:function(){var c=Array.link(arguments,{modifier:Function.type,index:$defined});var b=this.lists.map(function(d){return d.getChildren().map(c.modifier||function(e){return e.get("id")},this)},this);var a=c.index;if(this.lists.length==1){a=0}return $chk(a)&&a>=0&&a<this.lists.length?b[a]:b}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(a){a.setStyle("visibility","visible")},onHide:function(a){a.setStyle("visibility","hidden")},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var c=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(c.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className)}var b=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var a=new Element("div",{"class":"tip-bottom"}).inject(this.tip);this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(c.elements){this.attach(c.elements)}},attach:function(a){$$(a).each(function(d){var g=d.retrieve("tip:title",d.get("title"));var f=d.retrieve("tip:text",d.get("rel")||d.get("href"));var e=d.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,d));var c=d.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,d));d.addEvents({mouseenter:e,mouseleave:c});if(!this.options.fixed){var b=d.retrieve("tip:move",this.elementMove.bindWithEvent(this,d));d.addEvent("mousemove",b)}d.store("tip:native",d.get("title"));d.erase("title")},this);return this},detach:function(a){$$(a).each(function(c){c.removeEvent("mouseenter",c.retrieve("tip:enter")||$empty);c.removeEvent("mouseleave",c.retrieve("tip:leave")||$empty);c.removeEvent("mousemove",c.retrieve("tip:move")||$empty);c.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");var b=c.retrieve("tip:native");if(b){c.set("title",b)}});return this},elementEnter:function(b,a){$A(this.container.childNodes).each(Element.dispose);var d=a.retrieve("tip:title");if(d){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,d)}var c=a.retrieve("tip:text");if(c){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,c)}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?b:{page:a.getPosition()})},elementLeave:function(a){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},elementMove:function(a){this.position(a)},position:function(d){var b=window.getSize(),a=window.getScroll();var e={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var c={x:"left",y:"top"};for(var f in c){var g=d.page[f]+this.options.offsets[f];if((g+e[f]-a[f])>b[f]){g=d.page[f]-this.options.offsets[f]-e[f]}this.tip.setStyle(c[f],g)}},fill:function(a,b){(typeof b=="string")?a.set("html",b):a.adopt(b)},show:function(){this.fireEvent("show",this.tip)},hide:function(){this.fireEvent("hide",this.tip)}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(b,c){c=c||document;var e=c.getDocument(),d=c.getWindow();this.parent(e,b);this.links=(this.options.links)?$$(this.options.links):$$(e.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(g){if(g.href.indexOf(a)!=0){return}var f=g.href.substr(a.length);if(f&&$(f)){this.useLink(g,f)}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor},true)}},useLink:function(b,a){b.addEvent("click",function(c){this.anchor=a;this.toElement(a);c.stop()}.bind(this))}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step)}this.knob.setStyle(this.property,a)},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(e,a,d){this.setOptions(d);this.element=$(e);this.knob=$(a);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this))}var f,b={},c={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";f="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";f="offsetWidth"}this.half=this.knob[f]/2;this.full=this.element[f]-this.knob[f]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);c[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:b,modifiers:c,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();this.end()}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full}},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min}if(!((this.range>0)^(a>this.max))){a=this.max}this.step=Math.round(a);this.checkStep();this.end();this.fireEvent("tick",this.toPosition(this.step));return this},clickedElement:function(c){var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.end();this.fireEvent("tick",a)},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);this.set(b?this.step-this.stepSize:this.step+this.stepSize);a.stop()},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep()},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;this.fireEvent("change",this.step)}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"")}},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(a,b){this.element.scrollTo(a,b)}},initialize:function(b,a){this.setOptions(a);this.element=$(b);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this)},start:function(){this.listener.addEvent("mousemove",this.coord)},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer)},getCoords:function(a){this.page=(this.listener.get("tag")=="body")?a.client:a.page;if(!this.timer){this.timer=this.scroll.periodical(50,this)}},scroll:function(){var b=this.element.getSize(),a=this.element.getScroll(),e=this.element.getPosition(),d={x:0,y:0};for(var c in this.page){if(this.page[c]<(this.options.area+e[c])&&a[c]!=0){d[c]=(this.page[c]-this.options.area-e[c])*this.options.velocity}else{if(this.page[c]+this.options.area>(b[c]+e[c])&&b[c]+b[c]!=a[c]){d[c]=(this.page[c]-b[c]+this.options.area-e[c])*this.options.velocity}}}if(d.y||d.x){this.fireEvent("change",[a.x+d.x,a.y+d.y])}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var c=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});this.parent(c.elements,c.options);this.togglers=$$(c.togglers);this.container=$(c.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show}if(this.options.start){this.options.display=false;this.options.show=false}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity"}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth"}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight"}for(var b=0,a=this.togglers.length;b<a;b++){this.addSection(this.togglers[b],this.elements[b])}this.elements.each(function(e,d){if(this.options.show===d){this.fireEvent("active",[this.togglers[d],e])}else{for(var f in this.effects){e.setStyle(f,0)}}},this);if($chk(this.options.display)){this.display(this.options.display)}},addSection:function(e,c,g){e=$(e);c=$(c);var f=this.togglers.contains(e);var b=this.togglers.length;this.togglers.include(e);this.elements.include(c);if(b&&(!f||g)){g=$pick(g,b-1);e.inject(this.togglers[g],"before");c.inject(e,"after")}else{if(this.container&&!f){e.inject(this.container);c.inject(this.container)}}var a=this.togglers.indexOf(e);e.addEvent("click",this.display.bind(this,a));if(this.options.height){c.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"})}if(this.options.width){c.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"})}c.fullOpacity=1;if(this.options.fixedWidth){c.fullWidth=this.options.fixedWidth}if(this.options.fixedHeight){c.fullHeight=this.options.fixedHeight}c.setStyle("overflow","hidden");if(!f){for(var d in this.effects){c.setStyle(d,0)}}return this},display:function(a){a=($type(a)=="element")?this.elements.indexOf(a):a;if((this.timer&&this.options.wait)||(a===this.previous&&!this.options.alwaysHide)){return this}this.previous=a;var b={};this.elements.each(function(e,d){b[d]={};var c=(d!=a)||(this.options.alwaysHide&&(e.offsetHeight>0));this.fireEvent(c?"background":"active",[this.togglers[d],e]);for(var f in this.effects){b[d][f]=c?0:e[this.effects[f]]}},this);return this.start(b)}});
   521.5 \ No newline at end of file
   522.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   522.2 +++ b/e2gallerypro/js/setupvars.js	Mon Feb 22 08:02:39 2010 -0500
   522.3 @@ -0,0 +1,2 @@
   522.4 +var setThumbWidth = 56;							//Thumbnail width (in pixels)
   522.5 var transitionspeed = 250;						//Transition speed for fades. (1000 = 1 second)
   522.6 +var slideshowtime = 6000;						//Time delay for Slideshow (1000 = 1 second)
   522.7 
   522.8 //setting for text output and selling prints
   522.9 var playText = "Play Slide Show";
  522.10 var pauseText = "Pause Slide Show";
  522.11 var purchaseprinttxt = "Prints Available; See Below";
  522.12 var purchaseOf = "";
  522.13 var shipinginfoshort = "";
  522.14 var selectSizes = "Select Size";
  522.15 var orderText = "Buy Print";
  522.16 
  522.17 //If you sell your prints with Google Checkout
  522.18 var merchantId = "";
  522.19 
  522.20 //If you sell your prints with Paypal
  522.21 var paypalButtonId = "2JVJAN2X7GRZ2";
  522.22 var paypalSelectText = "";
  522.23 /*######*/
  522.24 /*Begin Media Variables*/
  522.25 /*######*/
  522.26 var flashdefaultWidth= 360;								// Initial width of the box (in pixels)
  522.27 var flashdefaultHeight= 240;							// Initial height of the box (in pixels)
  522.28 // Global media options
  522.29 var scriptaccess= 'true';								// Allow script access to flash files
  522.30 var fullscreen= 'true';									// Use fullscreen
  522.31 var fullscreenNum= '1';									// 1 = true
  522.32 var autoplay= 'true';									// Plays the video as soon as it's opened
  522.33 var autoplayNum= '1';									// 1 = true
  522.34 var bgcolor= '#000000';									// Background color used for both flash and QT media
  522.35 // NonverBlaster									    // NonverBlaster Settings, allows to play .FLV, .SWF files
  522.36 var playerpath = 'nonverblaster/NonverBlaster.swf';		// Path to NonverBlaster.swf
  522.37 var controllerColor= '0x777777';						// set the controlbar color
  522.38 var showTimecode= 'false';								// turn timecode display off or on
  522.39 // Flickr options
  522.40 var flInfo= 'true';										// Show title and info at video start
  522.41 // Revver options
  522.42 var revverID= '340881';									// Revver affiliate ID required for ad revinue sharing
  522.43 var revverFullscreen= 'true';							// Fullscreen option
  522.44 var revverBack= '000000';								// Background colour
  522.45 var revverFront= 'ffffff';								// Foreground colour
  522.46 var revverGrad= '000000';								// Gradation colour
  522.47 // Youtube options
  522.48 var ytColor1= '000000';									// Outline colour
  522.49 var ytColor2= '333333';									// Base interface colour (highlight colours stay consistent)
  522.50 var ytQuality= '&ap=%2526fmt%3D18';						// Default quality setting - leave empty for standard quality use '&ap=%2526fmt%3D18' for high quality and '&ap=%2526fmt%3D22' for HD (note that not all videos are availible in high quality and very few in HD)
  522.51 // Vimeo options
  522.52 var vmTitle= '1';										// Show video title
  522.53 var vmByline= '1';										// Show byline
  522.54 var vmPortrait= '1';									// Show author portrait
  522.55 var vmColor= 'ffffff';									// Custom controller colours hex value minus the # sign defult is 5ca0b5
  522.56 /*######*/
  522.57 /*End Media Variables*/
  522.58 /*######*/
  522.59 \ No newline at end of file
   523.1 Binary file e2gallerypro/nonverblaster/NonverBlaster.swf has changed
   524.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   524.2 +++ b/e2gallerypro/nonverblaster/Readme_NonverBlaster.txt	Mon Feb 22 08:02:39 2010 -0500
   524.3 @@ -0,0 +1,5 @@
   524.4 +NonverBlaster is a simple video player with fullscreenMode ability
   524.5 +
   524.6 +NonverBlaster is provided by http://nonverbla.de
   524.7 +
   524.8 +Go check out http://nonverbla.de site for more info.
   524.9 \ No newline at end of file
   525.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   525.2 +++ b/e2gallerypro/nonverblaster/swfobject.js	Mon Feb 22 08:02:39 2010 -0500
   525.3 @@ -0,0 +1,138 @@
   525.4 +/**
   525.5 + * SWFObject v1.4.4: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
   525.6 + *
   525.7 + * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License:
   525.8 + * http://www.opensource.org/licenses/mit-license.php
   525.9 + *
  525.10 + * **SWFObject is the SWF embed script formerly known as FlashObject. The name was changed for
  525.11 + *   legal reasons.
  525.12 + */
  525.13 +if(typeof deconcept=="undefined"){var deconcept=new Object();}
  525.14 +if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}
  525.15 +if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}
  525.16 +deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){if(!document.getElementById){return;}
  525.17 +this.DETECT_KEY=_b?_b:"detectflash";
  525.18 +this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
  525.19 +this.params=new Object();
  525.20 +this.variables=new Object();
  525.21 +this.attributes=new Array();
  525.22 +if(_1){this.setAttribute("swf",_1);}
  525.23 +if(id){this.setAttribute("id",id);}
  525.24 +if(w){this.setAttribute("width",w);}
  525.25 +if(h){this.setAttribute("height",h);}
  525.26 +if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}
  525.27 +this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
  525.28 +if(c){this.addParam("bgcolor",c);}
  525.29 +var q=_8?_8:"high";
  525.30 +this.addParam("quality",q);
  525.31 +this.setAttribute("useExpressInstall",_7);
  525.32 +this.setAttribute("doExpressInstall",false);
  525.33 +var _d=(_9)?_9:window.location;
  525.34 +this.setAttribute("xiRedirectUrl",_d);
  525.35 +this.setAttribute("redirectUrl","");
  525.36 +if(_a){this.setAttribute("redirectUrl",_a);}};
  525.37 +deconcept.SWFObject.prototype={setAttribute:function(_e,_f){
  525.38 +this.attributes[_e]=_f;
  525.39 +},getAttribute:function(_10){
  525.40 +return this.attributes[_10];
  525.41 +},addParam:function(_11,_12){
  525.42 +this.params[_11]=_12;
  525.43 +},getParams:function(){
  525.44 +return this.params;
  525.45 +},addVariable:function(_13,_14){
  525.46 +this.variables[_13]=_14;
  525.47 +},getVariable:function(_15){
  525.48 +return this.variables[_15];
  525.49 +},getVariables:function(){
  525.50 +return this.variables;
  525.51 +},getVariablePairs:function(){
  525.52 +var _16=new Array();
  525.53 +var key;
  525.54 +var _18=this.getVariables();
  525.55 +for(key in _18){_16.push(key+"="+_18[key]);}
  525.56 +return _16;},getSWFHTML:function(){var _19="";
  525.57 +if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
  525.58 +if(this.getAttribute("doExpressInstall")){
  525.59 +this.addVariable("MMplayerType","PlugIn");}
  525.60 +_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\"";
  525.61 +_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";
  525.62 +var _1a=this.getParams();
  525.63 +for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}
  525.64 +var _1c=this.getVariablePairs().join("&");
  525.65 +if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";
  525.66 +}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");}
  525.67 +_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">";
  525.68 +_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";
  525.69 +var _1d=this.getParams();
  525.70 +for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}
  525.71 +var _1f=this.getVariablePairs().join("&");
  525.72 +if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}
  525.73 +return _19;
  525.74 +},write:function(_20){
  525.75 +if(this.getAttribute("useExpressInstall")){
  525.76 +var _21=new deconcept.PlayerVersion([6,0,65]);
  525.77 +if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){
  525.78 +this.setAttribute("doExpressInstall",true);
  525.79 +this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));
  525.80 +document.title=document.title.slice(0,47)+" - Flash Player Installation";
  525.81 +this.addVariable("MMdoctitle",document.title);}}
  525.82 +if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){
  525.83 +var n=(typeof _20=="string")?document.getElementById(_20):_20;
  525.84 +n.innerHTML=this.getSWFHTML();return true;
  525.85 +}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}
  525.86 +return false;}};
  525.87 +deconcept.SWFObjectUtil.getPlayerVersion=function(){
  525.88 +var _23=new deconcept.PlayerVersion([0,0,0]);
  525.89 +if(navigator.plugins&&navigator.mimeTypes.length){
  525.90 +var x=navigator.plugins["Shockwave Flash"];
  525.91 +if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}
  525.92 +}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}
  525.93 +catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
  525.94 +_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}
  525.95 +catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}
  525.96 +catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}
  525.97 +return _23;};
  525.98 +deconcept.PlayerVersion=function(_27){
  525.99 +this.major=_27[0]!=null?parseInt(_27[0]):0;
 525.100 +this.minor=_27[1]!=null?parseInt(_27[1]):0;
 525.101 +this.rev=_27[2]!=null?parseInt(_27[2]):0;
 525.102 +};
 525.103 +deconcept.PlayerVersion.prototype.versionIsValid=function(fv){
 525.104 +if(this.major<fv.major){return false;}
 525.105 +if(this.major>fv.major){return true;}
 525.106 +if(this.minor<fv.minor){return false;}
 525.107 +if(this.minor>fv.minor){return true;}
 525.108 +if(this.rev<fv.rev){
 525.109 +return false;
 525.110 +}return true;};
 525.111 +deconcept.util={getRequestParameter:function(_29){
 525.112 +var q=document.location.search||document.location.hash;
 525.113 +if(q){var _2b=q.substring(1).split("&");
 525.114 +for(var i=0;i<_2b.length;i++){
 525.115 +if(_2b[i].substring(0,_2b[i].indexOf("="))==_29){
 525.116 +return _2b[i].substring((_2b[i].indexOf("=")+1));}}}
 525.117 +return "";}};
 525.118 +deconcept.SWFObjectUtil.cleanupSWFs=function(){if(window.opera||!document.all){return;}
 525.119 +var _2d=document.getElementsByTagName("OBJECT");
 525.120 +for(var i=0;i<_2d.length;i++){_2d[i].style.display="none";for(var x in _2d[i]){
 525.121 +if(typeof _2d[i][x]=="function"){_2d[i][x]=function(){};}}}};
 525.122 +deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};
 525.123 +__flash_savedUnloadHandler=function(){};
 525.124 +if(typeof window.onunload=="function"){
 525.125 +var _30=window.onunload;
 525.126 +window.onunload=function(){
 525.127 +deconcept.SWFObjectUtil.cleanupSWFs();_30();};
 525.128 +}else{window.onunload=deconcept.SWFObjectUtil.cleanupSWFs;}};
 525.129 +if(typeof window.onbeforeunload=="function"){
 525.130 +var oldBeforeUnload=window.onbeforeunload;
 525.131 +window.onbeforeunload=function(){
 525.132 +deconcept.SWFObjectUtil.prepUnload();
 525.133 +oldBeforeUnload();};
 525.134 +}else{window.onbeforeunload=deconcept.SWFObjectUtil.prepUnload;}
 525.135 +if(Array.prototype.push==null){
 525.136 +Array.prototype.push=function(_31){
 525.137 +this[this.length]=_31;
 525.138 +return this.length;};}
 525.139 +var getQueryParamValue=deconcept.util.getRequestParameter;
 525.140 +var FlashObject=deconcept.SWFObject;
 525.141 +var SWFObject=deconcept.SWFObject;
   526.1 Binary file e2gallerypro/photoshop/action/E2 Gallery Pro Export.atn has changed
   527.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   527.2 +++ b/e2gallerypro/php/parsexml.php	Mon Feb 22 08:02:39 2010 -0500
   527.3 @@ -0,0 +1,94 @@
   527.4 +<script type="text/javascript">
   527.5 +var imagesloaded = new Array();
   527.6 +var maingalleries = new Array();
   527.7 +<!--(E)2 Gallery Parse XML output Javascript-->
   527.8 +maingalleries  = [
   527.9 +<?php
  527.10 +if($myPHPVersion=="4"){
  527.11 +	require('php/xmlparse.v4.php');
  527.12 +}else{
  527.13 +	require('php/xmlparse.v5.php');
  527.14 +}
  527.15 +//Get the XML document loaded into a variable
  527.16 +$xml = file_get_contents($e2xmlurl);
  527.17 +
  527.18 +//Set up the parser object
  527.19 +$parser = new XMLParser($xml);
  527.20 +
  527.21 +//Work the magic...
  527.22 +$parser->Parse();
  527.23 +$i=0;
  527.24 +$k=0;
  527.25 +$l=0;
  527.26 +foreach($parser->document->gallery as $gallery){
  527.27 +	if($i!=0){
  527.28 +		echo',';
  527.29 +	}
  527.30 +	foreach($gallery->item as $item){
  527.31 +		$l++;
  527.32 +		$finalnum=$l-1;
  527.33 +	}
  527.34 +	echo "{'name':'".$gallery->title[0]->tagData."', 'imgpath': '".$gallery->gallerypath[0]->tagData."','lrgpath': '".$gallery->largeimgpath[0]->tagData."', 'thumbpath': '".$gallery->thumbpath[0]->tagData."', 'mainthumb': '".$gallery->mainthumb[0]->tagData."', 'src':'".$gallery->mainthumbsrc[0]->tagData."', 'description':'".$gallery->description[0]->tagData."', 'start':".$k.", 'end':".$finalnum.", 'gallerynum':".$i."}";
  527.35 +	$i++;
  527.36 +	foreach($gallery->item as $item){
  527.37 +		$k++;
  527.38 +	}
  527.39 +}
  527.40 +	
  527.41 +?>
  527.42 +];
  527.43 +
  527.44 +var galleryimages = new Array();
  527.45 +
  527.46 +galleryimages = [
  527.47 +<?php
  527.48 +$j=0;
  527.49 +foreach($parser->document->gallery as $gallery){
  527.50 +	foreach($gallery->item as $item){
  527.51 +		if($j!=0){
  527.52 +			echo',
  527.53 +';
  527.54 +		}
  527.55 +		if(isset($item->sellprint[0])){
  527.56 +			$sellprintSet = $item->sellprint[0];
  527.57 +		}else{
  527.58 +			$sellprintSet = NULL;
  527.59 +		}
  527.60 +		if($sellprintSet != NULL || $sellprintSet!=""){
  527.61 +			if($item->sellprint[0]->tagAttrs['type']=='paypal'||$item->sellprint[0]->tagAttrs['type']=='google'){
  527.62 +				$sellprint = "true";
  527.63 +				$selltype = ",'paytype':'".$item->sellprint[0]->tagAttrs['type']."'";
  527.64 +				$pNum = 1;
  527.65 +				$pricing ="";
  527.66 +				if($item->sellprint[0]->price!= NULL ){
  527.67 +					foreach($item->sellprint[0]->price as $price){
  527.68 +						$pricing .= ", 'price".$pNum."': '".$price->tagData."', 'pricecurrency".$pNum."': '".$item->sellprint[0]->tagAttrs['currency']."', 'pricecurrencysymbol".$pNum."': '".$item->sellprint[0]->tagAttrs['currencysymbol']."', 'pricesize".$pNum."': '".$price->tagAttrs['size']."'";
  527.69 +						$pNum++;
  527.70 +					}
  527.71 +				}
  527.72 +				
  527.73 +			}else{
  527.74 +				$sellprint = "false";
  527.75 +				$selltype = "";
  527.76 +				$pricing="";
  527.77 +				$pNum = 1;
  527.78 +			}
  527.79 +		}else{
  527.80 +				$sellprint = "false";
  527.81 +				$selltype = "";
  527.82 +				$pricing="";
  527.83 +				$pNum = 1;
  527.84 +			}
  527.85 +		if($item->tagAttrs['type']=='image'){
  527.86 +			echo"{'filetype':'".$item->tagAttrs['type']."', 'path':'".$gallery->gallerypath[0]->tagData."','src':'".$item->src[0]->tagData."', 'width':'".$item->demensions[0]->tagAttrs['width']."', 'height':'".$item->demensions[0]->tagAttrs['height']."', 'lrgwidth':'".$item->large[0]->tagAttrs['width']."', 'lrgheight':'".$item->large[0]->tagAttrs['height']."', 'lrgpath':'".$gallery->largeimgpath[0]->tagData."','title': '".$item->title[0]->tagData."', 'author':'".$item->author[0]->tagData."', 'copyright':'".$item->copyright[0]->tagData."', 'description':'".$item->description[0]->tagData."','forsale':".$sellprint."".$selltype." ".$pricing.",'numOfPrices':".($pNum-1).", 'imgid':".$j."}";
  527.87 +		}else{
  527.88 +			echo"{'filetype':'".$item->tagAttrs['type']."','mediaURL':'".$item->mediaurl[0]->tagData."', 'path':'".$gallery->gallerypath[0]->tagData."','src':'".$item->src[0]->tagData."', 'width':'".$item->demensions[0]->tagAttrs['width']."', 'height':'".$item->demensions[0]->tagAttrs['height']."', 'lrgwidth':'".$item->large[0]->tagAttrs['width']."', 'lrgheight':'".$item->large[0]->tagAttrs['height']."', 'lrgpath':'".$gallery->largeimgpath[0]->tagData."','title': '".$item->title[0]->tagData."', 'author':'".$item->author[0]->tagData."', 'copyright':'".$item->copyright[0]->tagData."', 'description':'".$item->description[0]->tagData."','forsale':".$sellprint."".$selltype." ".$pricing.",'numOfPrices':".($pNum-1).", 'imgid':".$j."}";
  527.89 +		}
  527.90 +		$j++;
  527.91 +	}	
  527.92 +}
  527.93 +?>
  527.94 +	
  527.95 +];
  527.96 +<!--End (E)2 Gallery Parse XML output Javascript-->
  527.97 +</script>
  527.98 \ No newline at end of file
   528.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   528.2 +++ b/e2gallerypro/php/xmlparse.v4.php	Mon Feb 22 08:02:39 2010 -0500
   528.3 @@ -0,0 +1,435 @@
   528.4 +<?php
   528.5 +/**
   528.6 +    This program is free software; you can redistribute it and/or modify
   528.7 +    it under the terms of the GNU General Public License as published by
   528.8 +    the Free Software Foundation; either version 2 of the License, or
   528.9 +    (at your option) any later version.
  528.10 +
  528.11 +    This program is distributed in the hope that it will be useful,
  528.12 +    but WITHOUT ANY WARRANTY; without even the implied warranty of
  528.13 +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  528.14 +    GNU General Public License for more details.
  528.15 +
  528.16 +    For Support, please visit http://www.criticaldevelopment.net/xml/
  528.17 +*/
  528.18 +
  528.19 +/**
  528.20 + * XML Parser Class (php4)
  528.21 + * 
  528.22 + * Parses an XML document into an object structure much like the SimpleXML extension.
  528.23 + *
  528.24 + * @author Adam A. Flynn <adamaflynn@criticaldevelopment.net>
  528.25 + * @copyright Copyright (c) 2005-2007, Adam A. Flynn
  528.26 + *
  528.27 + * @version 1.3.0
  528.28 + */
  528.29 +class XMLParser 
  528.30 +{
  528.31 +    /**
  528.32 +     * The XML parser
  528.33 +     *
  528.34 +     * @var resource
  528.35 +     */
  528.36 +    var $parser;
  528.37 +
  528.38 +    /**
  528.39 +    * The XML document
  528.40 +    *
  528.41 +    * @var string
  528.42 +    */
  528.43 +    var $xml;
  528.44 +
  528.45 +    /**
  528.46 +    * Document tag
  528.47 +    *
  528.48 +    * @var object
  528.49 +    */
  528.50 +    var $document;
  528.51 +
  528.52 +    /**
  528.53 +    * Current object depth
  528.54 +    *
  528.55 +    * @var array
  528.56 +    */
  528.57 +    var $stack;
  528.58 +    /**
  528.59 +     * Whether or not to replace dashes and colons in tag
  528.60 +     * names with underscores.
  528.61 +     * 
  528.62 +     * @var bool
  528.63 +     */
  528.64 +    var $cleanTagNames;
  528.65 +
  528.66 +    
  528.67 +    /**
  528.68 +     * Constructor. Loads XML document.
  528.69 +     *
  528.70 +     * @param string $xml The string of the XML document
  528.71 +     * @return XMLParser
  528.72 +     */
  528.73 +    function XMLParser($xml = '', $cleanTagNames = true)
  528.74 +    {
  528.75 +        //Load XML document
  528.76 +        $this->xml = $xml;
  528.77 +
  528.78 +        // Set stack to an array
  528.79 +        $this->stack = array();
  528.80 +        
  528.81 +        //Set whether or not to clean tag names
  528.82 +        $this->cleanTagNames = $cleanTagNames;
  528.83 +    }
  528.84 +
  528.85 +    /**
  528.86 +     * Initiates and runs PHP's XML parser
  528.87 +     */
  528.88 +    function Parse()
  528.89 +    {
  528.90 +        //Create the parser resource
  528.91 +        $this->parser = xml_parser_create();
  528.92 +        
  528.93 +        //Set the handlers
  528.94 +        xml_set_object($this->parser, $this);
  528.95 +        xml_set_element_handler($this->parser, 'StartElement', 'EndElement');
  528.96 +        xml_set_character_data_handler($this->parser, 'CharacterData');
  528.97 +
  528.98 +        //Error handling
  528.99 +        if (!xml_parse($this->parser, $this->xml))
 528.100 +            $this->HandleError(xml_get_error_code($this->parser), xml_get_current_line_number($this->parser), xml_get_current_column_number($this->parser));
 528.101 +
 528.102 +        //Free the parser
 528.103 +        xml_parser_free($this->parser);
 528.104 +    }
 528.105 +    
 528.106 +    /**
 528.107 +     * Handles an XML parsing error
 528.108 +     *
 528.109 +     * @param int $code XML Error Code
 528.110 +     * @param int $line Line on which the error happened
 528.111 +     * @param int $col Column on which the error happened
 528.112 +     */
 528.113 +    function HandleError($code, $line, $col)
 528.114 +    {
 528.115 +        trigger_error('XML Parsing Error at '.$line.':'.$col.'. Error '.$code.': '.xml_error_string($code));
 528.116 +    }
 528.117 +
 528.118 +    
 528.119 +    /**
 528.120 +     * Gets the XML output of the PHP structure within $this->document
 528.121 +     *
 528.122 +     * @return string
 528.123 +     */
 528.124 +    function GenerateXML()
 528.125 +    {
 528.126 +        return $this->document->GetXML();
 528.127 +    }
 528.128 +
 528.129 +    /**
 528.130 +     * Gets the reference to the current direct parent
 528.131 +     *
 528.132 +     * @return object
 528.133 +     */
 528.134 +    function GetStackLocation()
 528.135 +    {
 528.136 +        $return = '';
 528.137 +
 528.138 +        foreach($this->stack as $stack)
 528.139 +            $return .= $stack.'->';
 528.140 +        
 528.141 +        return rtrim($return, '->');
 528.142 +    }
 528.143 +
 528.144 +    /**
 528.145 +     * Handler function for the start of a tag
 528.146 +     *
 528.147 +     * @param resource $parser
 528.148 +     * @param string $name
 528.149 +     * @param array $attrs
 528.150 +     */
 528.151 +    function StartElement($parser, $name, $attrs = array())
 528.152 +    {
 528.153 +        //Make the name of the tag lower case
 528.154 +        $name = strtolower($name);
 528.155 +        
 528.156 +        //Check to see if tag is root-level
 528.157 +        if (count($this->stack) == 0) 
 528.158 +        {
 528.159 +            //If so, set the document as the current tag
 528.160 +            $this->document = new XMLTag($name, $attrs);
 528.161 +
 528.162 +            //And start out the stack with the document tag
 528.163 +            $this->stack = array('document');
 528.164 +        }
 528.165 +        //If it isn't root level, use the stack to find the parent
 528.166 +        else
 528.167 +        {
 528.168 +            //Get the name which points to the current direct parent, relative to $this
 528.169 +            $parent = $this->GetStackLocation();
 528.170 +            
 528.171 +            //Add the child
 528.172 +            eval('$this->'.$parent.'->AddChild($name, $attrs, '.count($this->stack).', $this->cleanTagNames);');
 528.173 +            
 528.174 +            //If the cleanTagName feature is on, replace colons and dashes with underscores
 528.175 +            if($this->cleanTagNames)
 528.176 +                $name = str_replace(array(':', '-'), '_', $name);
 528.177 +
 528.178 +
 528.179 +            //Update the stack
 528.180 +            eval('$this->stack[] = $name.\'[\'.(count($this->'.$parent.'->'.$name.') - 1).\']\';');
 528.181 +        }
 528.182 +    }
 528.183 +
 528.184 +    /**
 528.185 +     * Handler function for the end of a tag
 528.186 +     *
 528.187 +     * @param resource $parser
 528.188 +     * @param string $name
 528.189 +     */
 528.190 +    function EndElement($parser, $name)
 528.191 +    {
 528.192 +        //Update stack by removing the end value from it as the parent
 528.193 +        array_pop($this->stack);
 528.194 +    }
 528.195 +
 528.196 +    /**
 528.197 +     * Handler function for the character data within a tag
 528.198 +     *
 528.199 +     * @param resource $parser
 528.200 +     * @param string $data
 528.201 +     */
 528.202 +    function CharacterData($parser, $data)
 528.203 +    {
 528.204 +        //Get the reference to the current parent object
 528.205 +        $tag = $this->GetStackLocation();
 528.206 +
 528.207 +        //Assign data to it
 528.208 +        eval('$this->'.$tag.'->tagData .= trim($data);');
 528.209 +    }
 528.210 +}
 528.211 +
 528.212 +
 528.213 +/**
 528.214 + * XML Tag Object (php4)
 528.215 + *
 528.216 + * This object stores all of the direct children of itself in the $children array. They are also stored by
 528.217 + * type as arrays. So, if, for example, this tag had 2 <font> tags as children, there would be a class member
 528.218 + * called $font created as an array. $font[0] would be the first font tag, and $font[1] would be the second.
 528.219 + *
 528.220 + * To loop through all of the direct children of this object, the $children member should be used.
 528.221 + *
 528.222 + * To loop through all of the direct children of a specific tag for this object, it is probably easier 
 528.223 + * to use the arrays of the specific tag names, as explained above.
 528.224 + *
 528.225 + * @author Adam A. Flynn <adamaflynn@criticaldevelopment.net>
 528.226 + * @copyright Copyright (c) 2005-2007, Adam A. Flynn
 528.227 + *
 528.228 + * @version 1.3.0
 528.229 + */
 528.230 +class XMLTag
 528.231 +{
 528.232 +    /**
 528.233 +     * Array with the attributes of this XML tag
 528.234 +     *
 528.235 +     * @var array
 528.236 +     */
 528.237 +    var $tagAttrs;
 528.238 +    
 528.239 +    /**
 528.240 +     * The name of the tag
 528.241 +     *
 528.242 +     * @var string
 528.243 +     */
 528.244 +    var $tagName;
 528.245 +    
 528.246 +    /**
 528.247 +     * The data the tag contains 
 528.248 +     * 
 528.249 +     * So, if the tag doesn't contain child tags, and just contains a string, it would go here
 528.250 +     *
 528.251 +     * @var string
 528.252 +     */
 528.253 +    var $tagData;
 528.254 +    
 528.255 +    /**
 528.256 +     * Array of references to the objects of all direct children of this XML object
 528.257 +     *
 528.258 +     * @var array
 528.259 +     */
 528.260 +    var $tagChildren;
 528.261 +    
 528.262 +    /**
 528.263 +     * The number of parents this XML object has (number of levels from this tag to the root tag)
 528.264 +     *
 528.265 +     * Used presently only to set the number of tabs when outputting XML
 528.266 +     *
 528.267 +     * @var int
 528.268 +     */
 528.269 +    var $tagParents;
 528.270 +    
 528.271 +    /**
 528.272 +     * Constructor, sets up all the default values
 528.273 +     *
 528.274 +     * @param string $name
 528.275 +     * @param array $attrs
 528.276 +     * @param int $parents
 528.277 +     * @return XMLTag
 528.278 +     */
 528.279 +    function XMLTag($name, $attrs = array(), $parents = 0)
 528.280 +    {
 528.281 +        //Make the keys of the attr array lower case, and store the value
 528.282 +        $this->tagAttrs = array_change_key_case($attrs, CASE_LOWER);
 528.283 +        
 528.284 +        //Make the name lower case and store the value
 528.285 +        $this->tagName = strtolower($name);
 528.286 +        
 528.287 +        //Set the number of parents
 528.288 +        $this->tagParents = $parents;
 528.289 +        
 528.290 +        //Set the types for children and data
 528.291 +        $this->tagChildren = array();
 528.292 +        $this->tagData = '';
 528.293 +    }
 528.294 +    
 528.295 +    /**
 528.296 +     * Adds a direct child to this object
 528.297 +     *
 528.298 +     * @param string $name
 528.299 +     * @param array $attrs
 528.300 +     * @param int $parents
 528.301 +     * @param bool $cleanTagName
 528.302 +     */
 528.303 +    function AddChild($name, $attrs, $parents, $cleanTagName = true)
 528.304 +    {    
 528.305 +        //If the tag is a reserved name, output an error
 528.306 +        if(in_array($name, array('tagChildren', 'tagAttrs', 'tagParents', 'tagData', 'tagName')))
 528.307 +        {
 528.308 +            trigger_error('You have used a reserved name as the name of an XML tag. Please consult the documentation (http://www.criticaldevelopment.net/xml/) and rename the tag named "'.$name.'" to something other than a reserved name.', E_USER_ERROR);
 528.309 +
 528.310 +            return;
 528.311 +        }
 528.312 +        
 528.313 +        //Create the child object itself
 528.314 +        $child = new XMLTag($name, $attrs, $parents);
 528.315 +
 528.316 +        //If the cleanTagName feature is on, replace colons and dashes with underscores
 528.317 +        if($cleanTagName)
 528.318 +            $name = str_replace(array(':', '-'), '_', $name);
 528.319 +        
 528.320 +        //Toss up a notice if someone's trying to to use a colon or dash in a tag name
 528.321 +        elseif(strstr($name, ':') || strstr($name, '-'))
 528.322 +            trigger_error('Your tag named "'.$name.'" contains either a dash or a colon. Neither of these characters are friendly with PHP variable names, and, as such, they cannot be accessed and will cause the parser to not work. You must enable the cleanTagName feature (pass true as the second argument of the XMLParser constructor). For more details, see http://www.criticaldevelopment.net/xml/', E_USER_ERROR);
 528.323 +            
 528.324 +        //If there is no array already set for the tag name being added, 
 528.325 +        //create an empty array for it
 528.326 +        if(!isset($this->$name))
 528.327 +            $this->$name = array();
 528.328 +        
 528.329 +        //Add the reference of it to the end of an array member named for the tag's name
 528.330 +        $this->{$name}[] =& $child;
 528.331 +        
 528.332 +        //Add the reference to the children array member
 528.333 +        $this->tagChildren[] =& $child;
 528.334 +    }
 528.335 +    
 528.336 +    /**
 528.337 +     * Returns the string of the XML document which would be generated from this object
 528.338 +     * 
 528.339 +     * This function works recursively, so it gets the XML of itself and all of its children, which
 528.340 +     * in turn gets the XML of all their children, which in turn gets the XML of all thier children,
 528.341 +     * and so on. So, if you call GetXML from the document root object, it will return a string for 
 528.342 +     * the XML of the entire document.
 528.343 +     * 
 528.344 +     * This function does not, however, return a DTD or an XML version/encoding tag. That should be
 528.345 +     * handled by XMLParser::GetXML()
 528.346 +     *
 528.347 +     * @return string
 528.348 +     */
 528.349 +    function GetXML()
 528.350 +    {
 528.351 +        //Start a new line, indent by the number indicated in $this->parents, add a <, and add the name of the tag
 528.352 +        $out = "\n".str_repeat("\t", $this->tagParents).'<'.$this->tagName;
 528.353 +
 528.354 +        //For each attribute, add attr="value"
 528.355 +        foreach($this->tagAttrs as $attr => $value)
 528.356 +            $out .= ' '.$attr.'="'.$value.'"';
 528.357 +        
 528.358 +        //If there are no children and it contains no data, end it off with a />
 528.359 +        if(empty($this->tagChildren) && empty($this->tagData))
 528.360 +            $out .= " />";
 528.361 +        
 528.362 +        //Otherwise...
 528.363 +        else
 528.364 +        {    
 528.365 +            //If there are children
 528.366 +            if(!empty($this->tagChildren))        
 528.367 +            {
 528.368 +                //Close off the start tag
 528.369 +                $out .= '>';
 528.370 +                
 528.371 +                //For each child, call the GetXML function (this will ensure that all children are added recursively)
 528.372 +                foreach($this->tagChildren as $child)
 528.373 +                {
 528.374 +                    if(is_object($child))
 528.375 +                        $out .= $child->GetXML();
 528.376 +                }
 528.377 +
 528.378 +                //Add the newline and indentation to go along with the close tag
 528.379 +                $out .= "\n".str_repeat("\t", $this->tagParents);
 528.380 +            }
 528.381 +            
 528.382 +            //If there is data, close off the start tag and add the data
 528.383 +            elseif(!empty($this->tagData))
 528.384 +                $out .= '>'.$this->tagData;
 528.385 +            
 528.386 +            //Add the end tag    
 528.387 +            $out .= '</'.$this->tagName.'>';
 528.388 +        }
 528.389 +        
 528.390 +        //Return the final output
 528.391 +        return $out;
 528.392 +    }
 528.393 +    
 528.394 +    /**
 528.395 +     * Deletes this tag's child with a name of $childName and an index
 528.396 +     * of $childIndex
 528.397 +     *
 528.398 +     * @param string $childName
 528.399 +     * @param int $childIndex
 528.400 +     */
 528.401 +    function Delete($childName, $childIndex = 0)
 528.402 +    {
 528.403 +        //Delete all of the children of that child
 528.404 +        $this->{$childName}[$childIndex]->DeleteChildren();
 528.405 +        
 528.406 +        //Destroy the child's value
 528.407 +        $this->{$childName}[$childIndex] = null;
 528.408 +        
 528.409 +        //Remove the child's name from the named array
 528.410 +        unset($this->{$childName}[$childIndex]);
 528.411 +        
 528.412 +        //Loop through the tagChildren array and remove any null
 528.413 +        //values left behind from the above operation
 528.414 +        for($x = 0; $x < count($this->tagChildren); $x ++)
 528.415 +        {
 528.416 +            if(is_null($this->tagChildren[$x]))
 528.417 +                unset($this->tagChildren[$x]);
 528.418 +        }
 528.419 +    }
 528.420 +    
 528.421 +    /**
 528.422 +     * Removes all of the children of this tag in both name and value
 528.423 +     */
 528.424 +    function DeleteChildren()
 528.425 +    {
 528.426 +        //Loop through all child tags
 528.427 +        for($x = 0; $x < count($this->tagChildren); $x ++)
 528.428 +        {
 528.429 +            //Do this recursively
 528.430 +            $this->tagChildren[$x]->DeleteChildren();
 528.431 +            
 528.432 +            //Delete the name and value
 528.433 +            $this->tagChildren[$x] = null;
 528.434 +            unset($this->tagChildren[$x]);
 528.435 +        }
 528.436 +    }
 528.437 +}
 528.438 +?>
 528.439 \ No newline at end of file
   529.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   529.2 +++ b/e2gallerypro/php/xmlparse.v5.php	Mon Feb 22 08:02:39 2010 -0500
   529.3 @@ -0,0 +1,430 @@
   529.4 +<?php
   529.5 +/**
   529.6 +    This program is free software; you can redistribute it and/or modify
   529.7 +    it under the terms of the GNU General Public License as published by
   529.8 +    the Free Software Foundation; either version 2 of the License, or
   529.9 +    (at your option) any later version.
  529.10 +
  529.11 +    This program is distributed in the hope that it will be useful,
  529.12 +    but WITHOUT ANY WARRANTY; without even the implied warranty of
  529.13 +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  529.14 +    GNU General Public License for more details.
  529.15 +
  529.16 +    For support, please visit http://www.criticaldevelopment.net/xml/
  529.17 +*/
  529.18 +
  529.19 +/**
  529.20 + * XML Parser Class (php5)
  529.21 + * 
  529.22 + * Parses an XML document into an object structure much like the SimpleXML extension.
  529.23 + *
  529.24 + * @author Adam A. Flynn <adamaflynn@criticaldevelopment.net>
  529.25 + * @copyright Copyright (c) 2005-2007, Adam A. Flynn
  529.26 + *
  529.27 + * @version 1.3.0
  529.28 + */
  529.29 +class XMLParser 
  529.30 +{
  529.31 +    /**
  529.32 +     * The XML parser
  529.33 +     *
  529.34 +     * @var resource
  529.35 +     */
  529.36 +    private $parser;
  529.37 +
  529.38 +    /**
  529.39 +    * The XML document
  529.40 +    *
  529.41 +    * @var string
  529.42 +    */
  529.43 +    private $xml;
  529.44 +
  529.45 +    /**
  529.46 +    * Document tag
  529.47 +    *
  529.48 +    * @var object
  529.49 +    */
  529.50 +    public $document;
  529.51 +
  529.52 +    /**
  529.53 +    * Current object depth
  529.54 +    *
  529.55 +    * @var array
  529.56 +    */
  529.57 +    private $stack;
  529.58 +    
  529.59 +    /**
  529.60 +     * Whether or not to replace dashes and colons in tag
  529.61 +     * names with underscores.
  529.62 +     * 
  529.63 +     * @var bool
  529.64 +     */
  529.65 +    private $cleanTagNames;
  529.66 +
  529.67 +    
  529.68 +    /**
  529.69 +     * Constructor. Loads XML document.
  529.70 +     *
  529.71 +     * @param string $xml The string of the XML document
  529.72 +     * @return XMLParser
  529.73 +     */
  529.74 +    function __construct($xml = '', $cleanTagNames = true)
  529.75 +    {
  529.76 +        //Load XML document
  529.77 +        $this->xml = $xml;
  529.78 +
  529.79 +        //Set stack to an array
  529.80 +        $this->stack = array();
  529.81 +        
  529.82 +        //Set whether or not to clean tag names
  529.83 +        $this->cleanTagNames = $cleanTagNames;
  529.84 +    }
  529.85 +
  529.86 +    /**
  529.87 +     * Initiates and runs PHP's XML parser
  529.88 +     */
  529.89 +    public function Parse()
  529.90 +    {
  529.91 +        //Create the parser resource
  529.92 +        $this->parser = xml_parser_create();
  529.93 +        
  529.94 +        //Set the handlers
  529.95 +        xml_set_object($this->parser, $this);
  529.96 +        xml_set_element_handler($this->parser, 'StartElement', 'EndElement');
  529.97 +        xml_set_character_data_handler($this->parser, 'CharacterData');
  529.98 +
  529.99 +        //Error handling
 529.100 +        if (!xml_parse($this->parser, $this->xml))
 529.101 +            $this->HandleError(xml_get_error_code($this->parser), xml_get_current_line_number($this->parser), xml_get_current_column_number($this->parser));
 529.102 +
 529.103 +        //Free the parser
 529.104 +        xml_parser_free($this->parser);
 529.105 +    }
 529.106 +    
 529.107 +    /**
 529.108 +     * Handles an XML parsing error
 529.109 +     *
 529.110 +     * @param int $code XML Error Code
 529.111 +     * @param int $line Line on which the error happened
 529.112 +     * @param int $col Column on which the error happened
 529.113 +     */
 529.114 +    private function HandleError($code, $line, $col)
 529.115 +    {
 529.116 +        trigger_error('XML Parsing Error at '.$line.':'.$col.'. Error '.$code.': '.xml_error_string($code));
 529.117 +    }
 529.118 +
 529.119 +    
 529.120 +    /**
 529.121 +     * Gets the XML output of the PHP structure within $this->document
 529.122 +     *
 529.123 +     * @return string
 529.124 +     */
 529.125 +    public function GenerateXML()
 529.126 +    {
 529.127 +        return $this->document->GetXML();
 529.128 +    }
 529.129 +
 529.130 +    /**
 529.131 +     * Gets the reference to the current direct parent
 529.132 +     *
 529.133 +     * @return object
 529.134 +     */
 529.135 +    private function GetStackLocation()
 529.136 +    {
 529.137 +        //Returns the reference to the current direct parent
 529.138 +        return end($this->stack);
 529.139 +    }
 529.140 +
 529.141 +    /**
 529.142 +     * Handler function for the start of a tag
 529.143 +     *
 529.144 +     * @param resource $parser
 529.145 +     * @param string $name
 529.146 +     * @param array $attrs
 529.147 +     */
 529.148 +    private function StartElement($parser, $name, $attrs = array())
 529.149 +    {
 529.150 +        //Make the name of the tag lower case
 529.151 +        $name = strtolower($name);
 529.152 +        
 529.153 +        //Check to see if tag is root-level
 529.154 +        if (count($this->stack) == 0) 
 529.155 +        {
 529.156 +            //If so, set the document as the current tag
 529.157 +            $this->document = new XMLTag($name, $attrs);
 529.158 +
 529.159 +            //And start out the stack with the document tag
 529.160 +            $this->stack = array(&$this->document);
 529.161 +        }
 529.162 +        //If it isn't root level, use the stack to find the parent
 529.163 +        else
 529.164 +        {
 529.165 +            //Get the reference to the current direct parent
 529.166 +            $parent = $this->GetStackLocation();
 529.167 +            
 529.168 +            $parent->AddChild($name, $attrs, count($this->stack), $this->cleanTagNames);
 529.169 +
 529.170 +            //If the cleanTagName feature is on, clean the tag names
 529.171 +            if($this->cleanTagNames)
 529.172 +                $name = str_replace(array(':', '-'), '_', $name);
 529.173 +
 529.174 +            //Update the stack
 529.175 +            $this->stack[] = end($parent->$name);        
 529.176 +        }
 529.177 +    }
 529.178 +
 529.179 +    /**
 529.180 +     * Handler function for the end of a tag
 529.181 +     *
 529.182 +     * @param resource $parser
 529.183 +     * @param string $name
 529.184 +     */
 529.185 +    private function EndElement($parser, $name)
 529.186 +    {
 529.187 +        //Update stack by removing the end value from it as the parent
 529.188 +        array_pop($this->stack);
 529.189 +    }
 529.190 +
 529.191 +    /**
 529.192 +     * Handler function for the character data within a tag
 529.193 +     *
 529.194 +     * @param resource $parser
 529.195 +     * @param string $data
 529.196 +     */
 529.197 +    private function CharacterData($parser, $data)
 529.198 +    {
 529.199 +        //Get the reference to the current parent object
 529.200 +        $tag = $this->GetStackLocation();
 529.201 +
 529.202 +        //Assign data to it
 529.203 +        $tag->tagData .= trim($data);
 529.204 +    }
 529.205 +}
 529.206 +
 529.207 +
 529.208 +/**
 529.209 + * XML Tag Object (php5)
 529.210 + * 
 529.211 + * This object stores all of the direct children of itself in the $children array. They are also stored by
 529.212 + * type as arrays. So, if, for example, this tag had 2 <font> tags as children, there would be a class member
 529.213 + * called $font created as an array. $font[0] would be the first font tag, and $font[1] would be the second.
 529.214 + * 
 529.215 + * To loop through all of the direct children of this object, the $children member should be used.
 529.216 + *
 529.217 + * To loop through all of the direct children of a specific tag for this object, it is probably easier 
 529.218 + * to use the arrays of the specific tag names, as explained above.
 529.219 + * 
 529.220 + * @author Adam A. Flynn <adamaflynn@criticaldevelopment.net>
 529.221 + * @copyright Copyright (c) 2005-2007, Adam A. Flynn
 529.222 + *
 529.223 + * @version 1.3.0
 529.224 + */
 529.225 +class XMLTag
 529.226 +{
 529.227 +    /**
 529.228 +     * Array with the attributes of this XML tag
 529.229 +     *
 529.230 +     * @var array
 529.231 +     */
 529.232 +    public $tagAttrs;
 529.233 +    
 529.234 +    /**
 529.235 +     * The name of the tag
 529.236 +     *
 529.237 +     * @var string
 529.238 +     */
 529.239 +    public $tagName;
 529.240 +    
 529.241 +    /**
 529.242 +     * The data the tag contains 
 529.243 +     * 
 529.244 +     * So, if the tag doesn't contain child tags, and just contains a string, it would go here
 529.245 +     *
 529.246 +     * @var stat
 529.247 +     */
 529.248 +    public $tagData;
 529.249 +    
 529.250 +    /**
 529.251 +     * Array of references to the objects of all direct children of this XML object
 529.252 +     *
 529.253 +     * @var array
 529.254 +     */
 529.255 +    public $tagChildren;
 529.256 +    
 529.257 +    /**
 529.258 +     * The number of parents this XML object has (number of levels from this tag to the root tag)
 529.259 +     *
 529.260 +     * Used presently only to set the number of tabs when outputting XML
 529.261 +     *
 529.262 +     * @var int
 529.263 +     */
 529.264 +    public $tagParents;
 529.265 +    
 529.266 +    /**
 529.267 +     * Constructor, sets up all the default values
 529.268 +     *
 529.269 +     * @param string $name
 529.270 +     * @param array $attrs
 529.271 +     * @param int $parents
 529.272 +     * @return XMLTag
 529.273 +     */
 529.274 +    function __construct($name, $attrs = array(), $parents = 0)
 529.275 +    {
 529.276 +        //Make the keys of the attr array lower case, and store the value
 529.277 +        $this->tagAttrs = array_change_key_case($attrs, CASE_LOWER);
 529.278 +        
 529.279 +        //Make the name lower case and store the value
 529.280 +        $this->tagName = strtolower($name);
 529.281 +        
 529.282 +        //Set the number of parents
 529.283 +        $this->tagParents = $parents;
 529.284 +        
 529.285 +        //Set the types for children and data
 529.286 +        $this->tagChildren = array();
 529.287 +        $this->tagData = '';
 529.288 +    }
 529.289 +    
 529.290 +    /**
 529.291 +     * Adds a direct child to this object
 529.292 +     *
 529.293 +     * @param string $name
 529.294 +     * @param array $attrs
 529.295 +     * @param int $parents
 529.296 +     * @param bool $cleanTagName
 529.297 +     */
 529.298 +    public function AddChild($name, $attrs, $parents, $cleanTagName = true)
 529.299 +    {    
 529.300 +        //If the tag is a reserved name, output an error
 529.301 +        if(in_array($name, array('tagChildren', 'tagAttrs', 'tagParents', 'tagData', 'tagName')))
 529.302 +        {
 529.303 +            trigger_error('You have used a reserved name as the name of an XML tag. Please consult the documentation (http://www.criticaldevelopment.net/xml/) and rename the tag named "'.$name.'" to something other than a reserved name.', E_USER_ERROR);
 529.304 +
 529.305 +            return;
 529.306 +        }
 529.307 +
 529.308 +        //Create the child object itself
 529.309 +        $child = new XMLTag($name, $attrs, $parents);
 529.310 +
 529.311 +        //If the cleanTagName feature is on, replace colons and dashes with underscores
 529.312 +        if($cleanTagName)
 529.313 +            $name = str_replace(array(':', '-'), '_', $name);
 529.314 +        
 529.315 +        //Toss up a notice if someone's trying to to use a colon or dash in a tag name
 529.316 +        elseif(strstr($name, ':') || strstr($name, '-'))
 529.317 +            trigger_error('Your tag named "'.$name.'" contains either a dash or a colon. Neither of these characters are friendly with PHP variable names, and, as such, you may have difficulty accessing them. You might want to think about enabling the cleanTagName feature (pass true as the second argument of the XMLParser constructor). For more details, see http://www.criticaldevelopment.net/xml/', E_USER_NOTICE);
 529.318 +        
 529.319 +        //If there is no array already set for the tag name being added, 
 529.320 +        //create an empty array for it
 529.321 +        if(!isset($this->$name))
 529.322 +            $this->$name = array();
 529.323 +        
 529.324 +        //Add the reference of it to the end of an array member named for the tag's name
 529.325 +        $this->{$name}[] = &$child;
 529.326 +        
 529.327 +        //Add the reference to the children array member
 529.328 +        $this->tagChildren[] = &$child;
 529.329 +        
 529.330 +        //Return a reference to this object for the stack
 529.331 +        return $this;
 529.332 +    }
 529.333 +    
 529.334 +    /**
 529.335 +     * Returns the string of the XML document which would be generated from this object
 529.336 +     * 
 529.337 +     * This function works recursively, so it gets the XML of itself and all of its children, which
 529.338 +     * in turn gets the XML of all their children, which in turn gets the XML of all thier children,
 529.339 +     * and so on. So, if you call GetXML from the document root object, it will return a string for 
 529.340 +     * the XML of the entire document.
 529.341 +     * 
 529.342 +     * This function does not, however, return a DTD or an XML version/encoding tag. That should be
 529.343 +     * handled by XMLParser::GetXML()
 529.344 +     *
 529.345 +     * @return string
 529.346 +     */
 529.347 +    public function GetXML()
 529.348 +    {
 529.349 +        //Start a new line, indent by the number indicated in $this->parents, add a <, and add the name of the tag
 529.350 +        $out = "\n".str_repeat("\t", $this->tagParents).'<'.$this->tagName;
 529.351 +
 529.352 +        //For each attribute, add attr="value"
 529.353 +        foreach($this->tagAttrs as $attr => $value)
 529.354 +            $out .= ' '.$attr.'="'.$value.'"';
 529.355 +        
 529.356 +        //If there are no children and it contains no data, end it off with a />
 529.357 +        if(empty($this->tagChildren) && empty($this->tagData))
 529.358 +            $out .= " />";
 529.359 +        
 529.360 +        //Otherwise...
 529.361 +        else
 529.362 +        {    
 529.363 +            //If there are children
 529.364 +            if(!empty($this->tagChildren))
 529.365 +            {
 529.366 +                //Close off the start tag
 529.367 +                $out .= '>';
 529.368 +                
 529.369 +                //For each child, call the GetXML function (this will ensure that all children are added recursively)
 529.370 +                foreach($this->tagChildren as $child)
 529.371 +                    $out .= $child->GetXML();
 529.372 +
 529.373 +                //Add the newline and indentation to go along with the close tag
 529.374 +                $out .= "\n".str_repeat("\t", $this->tagParents);
 529.375 +            }
 529.376 +            
 529.377 +            //If there is data, close off the start tag and add the data
 529.378 +            elseif(!empty($this->tagData))
 529.379 +                $out .= '>'.$this->tagData;
 529.380 +            
 529.381 +            //Add the end tag    
 529.382 +            $out .= '</'.$this->tagName.'>';
 529.383 +        }
 529.384 +        
 529.385 +        //Return the final output
 529.386 +        return $out;
 529.387 +    }
 529.388 +    
 529.389 +    /**
 529.390 +     * Deletes this tag's child with a name of $childName and an index
 529.391 +     * of $childIndex
 529.392 +     *
 529.393 +     * @param string $childName
 529.394 +     * @param int $childIndex
 529.395 +     */
 529.396 +    public function Delete($childName, $childIndex = 0)
 529.397 +    {
 529.398 +        //Delete all of the children of that child
 529.399 +        $this->{$childName}[$childIndex]->DeleteChildren();
 529.400 +        
 529.401 +        //Destroy the child's value
 529.402 +        $this->{$childName}[$childIndex] = null;
 529.403 +        
 529.404 +        //Remove the child's name from the named array
 529.405 +        unset($this->{$childName}[$childIndex]);
 529.406 +        
 529.407 +        //Loop through the tagChildren array and remove any null
 529.408 +        //values left behind from the above operation
 529.409 +        for($x = 0; $x < count($this->tagChildren); $x ++)
 529.410 +        {
 529.411 +            if(is_null($this->tagChildren[$x]))
 529.412 +                unset($this->tagChildren[$x]);
 529.413 +        }
 529.414 +    }
 529.415 +    
 529.416 +    /**
 529.417 +     * Removes all of the children of this tag in both name and value
 529.418 +     */
 529.419 +    private function DeleteChildren()
 529.420 +    {
 529.421 +        //Loop through all child tags
 529.422 +        for($x = 0; $x < count($this->tagChildren); $x ++)
 529.423 +        {
 529.424 +            //Do this recursively
 529.425 +            $this->tagChildren[$x]->DeleteChildren();
 529.426 +            
 529.427 +            //Delete the name and value
 529.428 +            $this->tagChildren[$x] = null;
 529.429 +            unset($this->tagChildren[$x]);
 529.430 +        }
 529.431 +    }
 529.432 +}
 529.433 +?>
 529.434 \ No newline at end of file
   530.1 --- a/feedback.html	Fri Feb 19 11:14:52 2010 -0500
   530.2 +++ b/feedback.html	Mon Feb 22 08:02:39 2010 -0500
   530.3 @@ -18,14 +18,14 @@
   530.4  <ul class = "menu">
   530.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   530.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   530.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   530.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   530.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  530.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  530.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  530.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  530.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  530.14  
  530.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  530.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  530.17  </ul>
  530.18  </div>
  530.19  
  530.20 @@ -58,14 +58,14 @@
  530.21  <ul class = "menu">
  530.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  530.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  530.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  530.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  530.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  530.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  530.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  530.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  530.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  530.31  
  530.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  530.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  530.34  </ul>
  530.35  </div>
  530.36  
   531.1 --- a/firetest.css	Fri Feb 19 11:14:52 2010 -0500
   531.2 +++ b/firetest.css	Mon Feb 22 08:02:39 2010 -0500
   531.3 @@ -247,4 +247,4 @@
   531.4  	
   531.5  	
   531.6  	}
   531.7 -			
   531.8 \ No newline at end of file
   531.9 +			
   532.1 --- a/gallery1.html	Fri Feb 19 11:14:52 2010 -0500
   532.2 +++ b/gallery1.html	Mon Feb 22 08:02:39 2010 -0500
   532.3 @@ -13,14 +13,14 @@
   532.4  <ul class = "menu">
   532.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   532.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   532.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   532.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   532.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  532.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  532.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  532.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  532.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  532.14  
  532.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  532.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  532.17  </ul>
  532.18  </div>
  532.19  
  532.20 @@ -84,14 +84,14 @@
  532.21  <ul class = "menu">
  532.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  532.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  532.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  532.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  532.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  532.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  532.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  532.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  532.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  532.31  
  532.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  532.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  532.34  </ul>
  532.35  </div>
  532.36  
   533.1 --- a/gallery10.html	Fri Feb 19 11:14:52 2010 -0500
   533.2 +++ b/gallery10.html	Mon Feb 22 08:02:39 2010 -0500
   533.3 @@ -13,14 +13,14 @@
   533.4  <ul class = "menu">
   533.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   533.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   533.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   533.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   533.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  533.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  533.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  533.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  533.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  533.14  
  533.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  533.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  533.17  </ul>
  533.18  </div>
  533.19  
  533.20 @@ -80,14 +80,14 @@
  533.21  <ul class = "menu">
  533.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  533.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  533.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  533.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  533.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  533.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  533.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  533.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  533.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  533.31  
  533.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  533.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  533.34  </ul>
  533.35  </div>
  533.36  
   534.1 --- a/gallery11.html	Fri Feb 19 11:14:52 2010 -0500
   534.2 +++ b/gallery11.html	Mon Feb 22 08:02:39 2010 -0500
   534.3 @@ -13,14 +13,14 @@
   534.4  <ul class = "menu">
   534.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   534.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   534.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   534.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   534.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  534.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  534.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  534.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  534.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  534.14  
  534.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  534.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  534.17  </ul>
  534.18  </div>
  534.19  
  534.20 @@ -80,14 +80,14 @@
  534.21  <ul class = "menu">
  534.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  534.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  534.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  534.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  534.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  534.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  534.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  534.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  534.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  534.31  
  534.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  534.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  534.34  </ul>
  534.35  </div>
  534.36  
   535.1 --- a/gallery12.html	Fri Feb 19 11:14:52 2010 -0500
   535.2 +++ b/gallery12.html	Mon Feb 22 08:02:39 2010 -0500
   535.3 @@ -13,14 +13,14 @@
   535.4  <ul class = "menu">
   535.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   535.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   535.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   535.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   535.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  535.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  535.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  535.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  535.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  535.14  
  535.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  535.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  535.17  </ul>
  535.18  </div>
  535.19  
  535.20 @@ -80,14 +80,14 @@
  535.21  <ul class = "menu">
  535.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  535.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  535.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  535.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  535.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  535.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  535.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  535.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  535.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  535.31  
  535.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  535.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  535.34  </ul>
  535.35  </div>
  535.36  
   536.1 --- a/gallery13.html	Fri Feb 19 11:14:52 2010 -0500
   536.2 +++ b/gallery13.html	Mon Feb 22 08:02:39 2010 -0500
   536.3 @@ -13,14 +13,14 @@
   536.4  <ul class = "menu">
   536.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   536.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   536.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   536.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   536.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  536.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  536.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  536.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  536.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  536.14  
  536.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  536.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  536.17  </ul>
  536.18  </div>
  536.19  
  536.20 @@ -80,14 +80,14 @@
  536.21  <ul class = "menu">
  536.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  536.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  536.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  536.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  536.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  536.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  536.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  536.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  536.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  536.31  
  536.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  536.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  536.34  </ul>
  536.35  </div>
  536.36  
   537.1 --- a/gallery14.html	Fri Feb 19 11:14:52 2010 -0500
   537.2 +++ b/gallery14.html	Mon Feb 22 08:02:39 2010 -0500
   537.3 @@ -13,14 +13,14 @@
   537.4  <ul class = "menu">
   537.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   537.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   537.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   537.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   537.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  537.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  537.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  537.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  537.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  537.14  
  537.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  537.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  537.17  </ul>
  537.18  </div>
  537.19  
  537.20 @@ -80,14 +80,14 @@
  537.21  <ul class = "menu">
  537.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  537.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  537.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  537.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  537.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  537.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  537.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  537.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  537.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  537.31  
  537.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  537.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  537.34  </ul>
  537.35  </div>
  537.36  
   538.1 --- a/gallery15.html	Fri Feb 19 11:14:52 2010 -0500
   538.2 +++ b/gallery15.html	Mon Feb 22 08:02:39 2010 -0500
   538.3 @@ -13,14 +13,14 @@
   538.4  <ul class = "menu">
   538.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   538.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   538.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   538.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   538.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  538.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  538.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  538.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  538.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  538.14  
  538.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  538.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  538.17  </ul>
  538.18  </div>
  538.19  
  538.20 @@ -80,14 +80,14 @@
  538.21  <ul class = "menu">
  538.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  538.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  538.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  538.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  538.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  538.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  538.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  538.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  538.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  538.31  
  538.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  538.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  538.34  </ul>
  538.35  </div>
  538.36  
   539.1 --- a/gallery16.html	Fri Feb 19 11:14:52 2010 -0500
   539.2 +++ b/gallery16.html	Mon Feb 22 08:02:39 2010 -0500
   539.3 @@ -13,14 +13,14 @@
   539.4  <ul class = "menu">
   539.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   539.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   539.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   539.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   539.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  539.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  539.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  539.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  539.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  539.14  
  539.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  539.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  539.17  </ul>
  539.18  </div>
  539.19  
  539.20 @@ -80,14 +80,14 @@
  539.21  <ul class = "menu">
  539.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  539.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  539.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  539.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  539.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  539.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  539.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  539.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  539.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  539.31  
  539.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  539.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  539.34  </ul>
  539.35  </div>
  539.36  
   540.1 --- a/gallery17.html	Fri Feb 19 11:14:52 2010 -0500
   540.2 +++ b/gallery17.html	Mon Feb 22 08:02:39 2010 -0500
   540.3 @@ -13,14 +13,14 @@
   540.4  <ul class = "menu">
   540.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   540.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   540.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   540.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   540.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  540.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  540.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  540.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  540.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  540.14  
  540.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  540.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  540.17  </ul>
  540.18  </div>
  540.19  
  540.20 @@ -80,14 +80,14 @@
  540.21  <ul class = "menu">
  540.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  540.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  540.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  540.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  540.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  540.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  540.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  540.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  540.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  540.31  
  540.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  540.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  540.34  </ul>
  540.35  </div>
  540.36  
   541.1 --- a/gallery18.html	Fri Feb 19 11:14:52 2010 -0500
   541.2 +++ b/gallery18.html	Mon Feb 22 08:02:39 2010 -0500
   541.3 @@ -13,14 +13,14 @@
   541.4  <ul class = "menu">
   541.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   541.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   541.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   541.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   541.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  541.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  541.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  541.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  541.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  541.14  
  541.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  541.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  541.17  </ul>
  541.18  </div>
  541.19  
  541.20 @@ -80,14 +80,14 @@
  541.21  <ul class = "menu">
  541.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  541.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  541.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  541.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  541.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  541.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  541.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  541.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  541.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  541.31  
  541.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  541.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  541.34  </ul>
  541.35  </div>
  541.36  
   542.1 --- a/gallery19.html	Fri Feb 19 11:14:52 2010 -0500
   542.2 +++ b/gallery19.html	Mon Feb 22 08:02:39 2010 -0500
   542.3 @@ -13,14 +13,14 @@
   542.4  <ul class = "menu">
   542.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   542.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   542.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   542.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   542.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  542.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  542.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  542.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  542.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  542.14  
  542.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  542.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  542.17  </ul>
  542.18  </div>
  542.19  
  542.20 @@ -80,14 +80,14 @@
  542.21  <ul class = "menu">
  542.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  542.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  542.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  542.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  542.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  542.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  542.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  542.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  542.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  542.31  
  542.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  542.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  542.34  </ul>
  542.35  </div>
  542.36  
   543.1 --- a/gallery2.html	Fri Feb 19 11:14:52 2010 -0500
   543.2 +++ b/gallery2.html	Mon Feb 22 08:02:39 2010 -0500
   543.3 @@ -13,14 +13,14 @@
   543.4  <ul class = "menu">
   543.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   543.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   543.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   543.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   543.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  543.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  543.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  543.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  543.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  543.14  
  543.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  543.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  543.17  </ul>
  543.18  </div>
  543.19  
  543.20 @@ -80,14 +80,14 @@
  543.21  <ul class = "menu">
  543.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  543.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  543.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  543.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  543.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  543.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  543.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  543.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  543.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  543.31  
  543.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  543.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  543.34  </ul>
  543.35  </div>
  543.36  
   544.1 --- a/gallery20.html	Fri Feb 19 11:14:52 2010 -0500
   544.2 +++ b/gallery20.html	Mon Feb 22 08:02:39 2010 -0500
   544.3 @@ -13,14 +13,14 @@
   544.4  <ul class = "menu">
   544.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   544.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   544.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   544.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   544.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  544.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  544.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  544.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  544.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  544.14  
  544.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  544.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  544.17  </ul>
  544.18  </div>
  544.19  
  544.20 @@ -80,14 +80,14 @@
  544.21  <ul class = "menu">
  544.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  544.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  544.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  544.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  544.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  544.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  544.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  544.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  544.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  544.31  
  544.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  544.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  544.34  </ul>
  544.35  </div>
  544.36  
   545.1 --- a/gallery21.html	Fri Feb 19 11:14:52 2010 -0500
   545.2 +++ b/gallery21.html	Mon Feb 22 08:02:39 2010 -0500
   545.3 @@ -13,14 +13,14 @@
   545.4  <ul class = "menu">
   545.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   545.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   545.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   545.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   545.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  545.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  545.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  545.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  545.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  545.14  
  545.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  545.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  545.17  </ul>
  545.18  </div>
  545.19  
  545.20 @@ -80,14 +80,14 @@
  545.21  <ul class = "menu">
  545.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  545.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  545.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  545.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  545.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  545.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  545.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  545.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  545.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  545.31  
  545.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  545.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  545.34  </ul>
  545.35  </div>
  545.36  
   546.1 --- a/gallery3.html	Fri Feb 19 11:14:52 2010 -0500
   546.2 +++ b/gallery3.html	Mon Feb 22 08:02:39 2010 -0500
   546.3 @@ -13,14 +13,14 @@
   546.4  <ul class = "menu">
   546.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   546.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   546.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   546.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   546.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  546.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  546.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  546.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  546.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  546.14  
  546.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  546.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  546.17  </ul>
  546.18  </div>
  546.19  
  546.20 @@ -80,14 +80,14 @@
  546.21  <ul class = "menu">
  546.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  546.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  546.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  546.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  546.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  546.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  546.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  546.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  546.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  546.31  
  546.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  546.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  546.34  </ul>
  546.35  </div>
  546.36  
   547.1 --- a/gallery4.html	Fri Feb 19 11:14:52 2010 -0500
   547.2 +++ b/gallery4.html	Mon Feb 22 08:02:39 2010 -0500
   547.3 @@ -13,14 +13,14 @@
   547.4  <ul class = "menu">
   547.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   547.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   547.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   547.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   547.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  547.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  547.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  547.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  547.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  547.14  
  547.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  547.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  547.17  </ul>
  547.18  </div>
  547.19  
  547.20 @@ -80,14 +80,14 @@
  547.21  <ul class = "menu">
  547.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  547.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  547.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  547.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  547.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  547.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  547.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  547.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  547.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  547.31  
  547.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  547.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  547.34  </ul>
  547.35  </div>
  547.36  
   548.1 --- a/gallery5.html	Fri Feb 19 11:14:52 2010 -0500
   548.2 +++ b/gallery5.html	Mon Feb 22 08:02:39 2010 -0500
   548.3 @@ -13,14 +13,14 @@
   548.4  <ul class = "menu">
   548.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   548.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   548.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   548.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   548.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  548.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  548.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  548.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  548.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  548.14  
  548.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  548.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  548.17  </ul>
  548.18  </div>
  548.19  
  548.20 @@ -80,14 +80,14 @@
  548.21  <ul class = "menu">
  548.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  548.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  548.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  548.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  548.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  548.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  548.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  548.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  548.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  548.31  
  548.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  548.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  548.34  </ul>
  548.35  </div>
  548.36  
   549.1 --- a/gallery6.html	Fri Feb 19 11:14:52 2010 -0500
   549.2 +++ b/gallery6.html	Mon Feb 22 08:02:39 2010 -0500
   549.3 @@ -13,14 +13,14 @@
   549.4  <ul class = "menu">
   549.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   549.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   549.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   549.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   549.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  549.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  549.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  549.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  549.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  549.14  
  549.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  549.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  549.17  </ul>
  549.18  </div>
  549.19  
  549.20 @@ -80,14 +80,14 @@
  549.21  <ul class = "menu">
  549.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  549.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  549.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  549.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  549.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  549.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  549.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  549.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  549.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  549.31  
  549.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  549.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  549.34  </ul>
  549.35  </div>
  549.36  
   550.1 --- a/gallery7.html	Fri Feb 19 11:14:52 2010 -0500
   550.2 +++ b/gallery7.html	Mon Feb 22 08:02:39 2010 -0500
   550.3 @@ -13,14 +13,14 @@
   550.4  <ul class = "menu">
   550.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   550.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   550.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   550.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   550.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  550.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  550.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  550.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  550.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  550.14  
  550.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  550.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  550.17  </ul>
  550.18  </div>
  550.19  
  550.20 @@ -80,14 +80,14 @@
  550.21  <ul class = "menu">
  550.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  550.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  550.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  550.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  550.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  550.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  550.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  550.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  550.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  550.31  
  550.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  550.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  550.34  </ul>
  550.35  </div>
  550.36  
   551.1 --- a/gallery8.html	Fri Feb 19 11:14:52 2010 -0500
   551.2 +++ b/gallery8.html	Mon Feb 22 08:02:39 2010 -0500
   551.3 @@ -13,14 +13,14 @@
   551.4  <ul class = "menu">
   551.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   551.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   551.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   551.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   551.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  551.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  551.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  551.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  551.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  551.14  
  551.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  551.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  551.17  </ul>
  551.18  </div>
  551.19  
  551.20 @@ -80,14 +80,14 @@
  551.21  <ul class = "menu">
  551.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  551.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  551.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  551.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  551.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  551.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  551.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  551.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  551.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  551.31  
  551.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  551.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  551.34  </ul>
  551.35  </div>
  551.36  
   552.1 --- a/gallery9.html	Fri Feb 19 11:14:52 2010 -0500
   552.2 +++ b/gallery9.html	Mon Feb 22 08:02:39 2010 -0500
   552.3 @@ -13,14 +13,14 @@
   552.4  <ul class = "menu">
   552.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   552.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   552.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   552.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   552.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  552.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  552.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  552.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  552.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  552.14  
  552.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  552.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  552.17  </ul>
  552.18  </div>
  552.19  
  552.20 @@ -80,14 +80,14 @@
  552.21  <ul class = "menu">
  552.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  552.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  552.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  552.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  552.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  552.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  552.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  552.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  552.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  552.31  
  552.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  552.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  552.34  </ul>
  552.35  </div>
  552.36  
   553.1 --- a/hto.html	Fri Feb 19 11:14:52 2010 -0500
   553.2 +++ b/hto.html	Mon Feb 22 08:02:39 2010 -0500
   553.3 @@ -17,14 +17,14 @@
   553.4  <ul class = "menu">
   553.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   553.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   553.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   553.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   553.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  553.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  553.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  553.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  553.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  553.14  
  553.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  553.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  553.17  </ul>
  553.18  </div>
  553.19  
  553.20 @@ -69,14 +69,14 @@
  553.21  <ul class = "menu">
  553.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  553.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  553.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  553.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  553.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  553.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  553.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  553.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  553.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  553.31  
  553.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  553.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  553.34  </ul>
  553.35  </div>
  553.36  
   554.1 --- a/index.html	Fri Feb 19 11:14:52 2010 -0500
   554.2 +++ b/index.html	Mon Feb 22 08:02:39 2010 -0500
   554.3 @@ -21,14 +21,14 @@
   554.4  <ul class = "menu">
   554.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   554.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   554.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   554.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   554.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  554.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  554.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  554.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  554.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  554.14  
  554.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  554.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  554.17  </ul>
  554.18  </div>
  554.19  
  554.20 @@ -59,14 +59,14 @@
  554.21  <ul class = "menu">
  554.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  554.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  554.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  554.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  554.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  554.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  554.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  554.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  554.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  554.31  
  554.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  554.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  554.34  </ul>
  554.35  </div>
  554.36  
   555.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   555.2 +++ b/judyYates.xml	Mon Feb 22 08:02:39 2010 -0500
   555.3 @@ -0,0 +1,66 @@
   555.4 +<?xml version="1.0" encoding="UTF-8"?>
   555.5 +<galleries>
   555.6 +	
   555.7 +	<gallery>
   555.8 +    <title>Judy Yates Prints</title>
   555.9 +    <description>Prints Directly From the Artist.</description>
  555.10 +    <gallerypath>/e2gallerypro/e2upload/Galleries/prints/</gallerypath>
  555.11 +    <largeimgpath>/e2gallerypro/e2upload/Galleries/prints/large/</largeimgpath>
  555.12 +    <thumbpath>/e2gallerypro/e2upload/Galleries/prints/thumbs/</thumbpath>
  555.13 +    <mainthumb>/e2gallerypro/e2upload/Galleries/prints/</mainthumb>
  555.14 +    <mainthumbsrc>mainthumb.jpg</mainthumbsrc>
  555.15 +    <item type="image">
  555.16 +        <title>Buffalo Verde</title>
  555.17 +        <author>Judy Yates</author>
  555.18 +        <copyright>Copyright Judy Yates Artist</copyright>
  555.19 +        <description>Buffalo Verde
  555.20 +</description>
  555.21 +        <src>Judy_Yates_Buffalo_Verde.jpg</src>
  555.22 +        <demensions width="720" height="584" />
  555.23 +        <large width="720" height="584" />
  555.24 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  555.25 +            <price size="16inx20in">265</price>
  555.26 +        </sellprint>
  555.27 +    </item>
  555.28 +    <item type="image">
  555.29 +        <title>Longhorn Sunset</title>
  555.30 +        <author>Judy Yates</author>
  555.31 +        <copyright>Copyright Judy Yates Artist</copyright>
  555.32 +        <description>Longhorn Sunset
  555.33 +</description>
  555.34 +        <src>Judy_Yates_Longhorn_Sunset.jpg</src>
  555.35 +        <demensions width="720" height="569" />
  555.36 +        <large width="720" height="569" />
  555.37 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  555.38 +   <price size="16inx20in">265</price>
  555.39 +        </sellprint>
  555.40 +    </item>
  555.41 +    <item type="image">
  555.42 +        <title>Turquoise Sky</title>
  555.43 +        <author>Judy Yates</author>
  555.44 +        <copyright>Copyright Judy Yates Artist</copyright>
  555.45 +        <description>Winner of the Mass. Primitive Arms Stamp Contest
  555.46 +</description>
  555.47 +        <src>Judy_Yates_Turquoise_Sky.jpg</src>
  555.48 +        <demensions width="720" height="558" />
  555.49 +        <large width="720" height="558" />
  555.50 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  555.51 +<price size="16inx22in">265</price>
  555.52 +        </sellprint>
  555.53 +    </item>
  555.54 +    <item type="image">
  555.55 +        <title>Wood Duck Pair</title>
  555.56 +        <author>Judy Yates</author>
  555.57 +        <copyright>Copyright Judy Yates Artist</copyright>
  555.58 +        <description>Wood Duck Pair
  555.59 +</description>
  555.60 +        <src>Judy_Yates_Wood_Duck_Pair.jpg</src>
  555.61 +        <demensions width="720" height="537" />
  555.62 +        <large width="720" height="537" />
  555.63 +        <sellprint type="paypal" currency="USD" currencysymbol="$">
  555.64 +<price size="16inx20in">265</price>
  555.65 +        </sellprint>
  555.66 +    </item>
  555.67 +    <totalitems>4</totalitems>
  555.68 +</gallery>
  555.69 +</galleries>
   556.1 --- a/log/error_log.log	Fri Feb 19 11:14:52 2010 -0500
   556.2 +++ b/log/error_log.log	Mon Feb 22 08:02:39 2010 -0500
   556.3 @@ -2,3 +2,390 @@
   556.4  [Fri Feb 19 06:03:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
   556.5  [Fri Feb 19 10:02:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
   556.6  [Fri Feb 19 10:02:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
   556.7 +[Sat Feb 20 10:07:57 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
   556.8 +[Sat Feb 20 10:18:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
   556.9 +[Sat Feb 20 10:50:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.10 +[Sat Feb 20 10:51:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.11 +[Sat Feb 20 10:51:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.12 +[Sat Feb 20 10:51:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.13 +[Sat Feb 20 10:51:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.14 +[Sat Feb 20 10:51:39 2010] [crit] [client 18.238.1.90] (13)Permission denied: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
  556.15 +[Sat Feb 20 10:51:46 2010] [crit] [client 18.238.1.90] (13)Permission denied: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
  556.16 +[Sat Feb 20 10:53:27 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.17 +[Sat Feb 20 10:53:27 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.18 +[Sat Feb 20 10:53:27 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.19 +[Sat Feb 20 10:53:27 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.20 +[Sat Feb 20 10:53:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/rsrc, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.21 +[Sat Feb 20 10:57:05 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.22 +[Sat Feb 20 10:57:05 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.23 +[Sat Feb 20 10:57:05 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.24 +[Sat Feb 20 10:57:05 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.25 +[Sat Feb 20 10:58:01 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.26 +[Sat Feb 20 10:58:01 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.27 +[Sat Feb 20 10:58:01 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.28 +[Sat Feb 20 10:58:02 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.29 +[Sat Feb 20 10:58:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.30 +[Sat Feb 20 10:58:09 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.31 +[Mon Feb 22 05:24:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.32 +[Mon Feb 22 05:24:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.33 +[Mon Feb 22 05:24:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.34 +[Mon Feb 22 05:24:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.35 +[Mon Feb 22 05:24:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.36 +[Mon Feb 22 05:24:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.37 +[Mon Feb 22 05:24:49 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.38 +[Mon Feb 22 05:24:49 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.39 +[Mon Feb 22 05:24:49 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.40 +[Mon Feb 22 05:24:49 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.41 +[Mon Feb 22 05:24:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.42 +[Mon Feb 22 05:24:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.43 +[Mon Feb 22 05:24:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.44 +[Mon Feb 22 05:24:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.45 +[Mon Feb 22 05:28:04 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/rsrc, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.46 +[Mon Feb 22 05:28:12 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.47 +[Mon Feb 22 05:28:12 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.48 +[Mon Feb 22 05:28:12 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.49 +[Mon Feb 22 05:28:12 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.50 +[Mon Feb 22 05:47:58 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.51 +[Mon Feb 22 05:47:58 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.52 +[Mon Feb 22 05:47:58 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.53 +[Mon Feb 22 05:47:58 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.54 +[Mon Feb 22 06:02:56 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.55 +[Mon Feb 22 06:02:59 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/favicon.ico
  556.56 +[Mon Feb 22 06:05:16 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.57 +[Mon Feb 22 06:05:16 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.58 +[Mon Feb 22 06:05:16 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.59 +[Mon Feb 22 06:05:16 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.60 +[Mon Feb 22 06:06:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Assets/Icons/xml.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.61 +[Mon Feb 22 06:06:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.62 +[Mon Feb 22 06:06:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.63 +[Mon Feb 22 06:06:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.64 +[Mon Feb 22 06:06:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.65 +[Mon Feb 22 06:06:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.66 +[Mon Feb 22 06:07:26 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.67 +[Mon Feb 22 06:07:26 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.68 +[Mon Feb 22 06:07:26 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.69 +[Mon Feb 22 06:07:26 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.70 +[Mon Feb 22 06:15:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.71 +[Mon Feb 22 06:15:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.72 +[Mon Feb 22 06:15:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.73 +[Mon Feb 22 06:15:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.74 +[Mon Feb 22 06:16:20 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.75 +[Mon Feb 22 06:16:20 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.76 +[Mon Feb 22 06:16:20 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.77 +[Mon Feb 22 06:16:20 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.78 +[Mon Feb 22 06:19:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Assets/Icons/xml.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php?gallerytitle=Judy+Yates+Prints&galleryDescription=Special+Prints+Available+Direct+From+the+Artist.&gallerypath=Galleries%2FPrints%2F&thumbpath=Galleries%2FPrints%2Fthumbs%2F&largepath=Galleries%2FPrints%2Flarge%2F&showforsale=true&checkouttype=paypal&currency=USD&submit=Output+XML
  556.79 +[Mon Feb 22 06:19:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php?gallerytitle=Judy+Yates+Prints&galleryDescription=Special+Prints+Available+Direct+From+the+Artist.&gallerypath=Galleries%2FPrints%2F&thumbpath=Galleries%2FPrints%2Fthumbs%2F&largepath=Galleries%2FPrints%2Flarge%2F&showforsale=true&checkouttype=paypal&currency=USD&submit=Output+XML
  556.80 +[Mon Feb 22 06:19:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.81 +[Mon Feb 22 06:19:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.82 +[Mon Feb 22 06:19:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.83 +[Mon Feb 22 06:19:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.84 +[Mon Feb 22 06:22:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.85 +[Mon Feb 22 06:22:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.86 +[Mon Feb 22 06:22:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.87 +[Mon Feb 22 06:22:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.88 +[Mon Feb 22 06:25:09 2010] [crit] [client 18.238.1.90] (13)Permission denied: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable
  556.89 +[Mon Feb 22 06:26:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.90 +[Mon Feb 22 06:29:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
  556.91 +[Mon Feb 22 06:36:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Assets/Icons/xml.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php?gallerytitle=Judy+Yates+Prints&galleryDescription=Prints+Directly+From+the+Artist.&gallerypath=Galleries%2Fprints%2F&thumbpath=Galleries%2Fprints%2Fthumbs%2F&largepath=Galleries%2Fprints%2Flarge%2F&showforsale=true&checkouttype=paypal&currency=USD&submit=Output+XML
  556.92 +[Mon Feb 22 06:36:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php?gallerytitle=Judy+Yates+Prints&galleryDescription=Prints+Directly+From+the+Artist.&gallerypath=Galleries%2Fprints%2F&thumbpath=Galleries%2Fprints%2Fthumbs%2F&largepath=Galleries%2Fprints%2Flarge%2F&showforsale=true&checkouttype=paypal&currency=USD&submit=Output+XML
  556.93 +[Mon Feb 22 06:36:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.94 +[Mon Feb 22 06:36:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.95 +[Mon Feb 22 06:36:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.96 +[Mon Feb 22 06:36:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.97 +[Mon Feb 22 06:36:54 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.98 +[Mon Feb 22 06:36:54 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
  556.99 +[Mon Feb 22 06:36:54 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.100 +[Mon Feb 22 06:36:54 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.101 +[Mon Feb 22 06:39:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.102 +[Mon Feb 22 06:39:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.103 +[Mon Feb 22 06:39:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.104 +[Mon Feb 22 06:39:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.105 +[Mon Feb 22 06:39:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.106 +[Mon Feb 22 06:46:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/
 556.107 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.108 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.109 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.110 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.111 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.112 +[Mon Feb 22 06:48:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.113 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.114 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.115 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.116 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.117 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.118 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.119 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.120 +[Mon Feb 22 06:48:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.121 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.122 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.123 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.124 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.125 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.126 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.127 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.128 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/js, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.129 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.130 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.131 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.132 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.133 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.134 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.135 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.136 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.137 +[Mon Feb 22 06:49:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.138 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.139 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.140 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.141 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.142 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.143 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.144 +[Mon Feb 22 06:50:45 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.145 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.146 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.147 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.148 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.149 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.150 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.151 +[Mon Feb 22 06:51:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.152 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.153 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.154 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.155 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.156 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.157 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.158 +[Mon Feb 22 06:52:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.159 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.160 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.161 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.162 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.163 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.164 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.165 +[Mon Feb 22 06:59:03 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.166 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.167 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.168 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.169 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.170 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.171 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.172 +[Mon Feb 22 07:00:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.173 +[Mon Feb 22 07:00:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallery
 556.174 +[Mon Feb 22 07:00:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.175 +[Mon Feb 22 07:00:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.176 +[Mon Feb 22 07:00:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.177 +[Mon Feb 22 07:00:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.178 +[Mon Feb 22 07:00:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.179 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.180 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.181 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.182 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.183 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.184 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.185 +[Mon Feb 22 07:07:00 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.186 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.187 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.188 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.189 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.190 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.191 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.192 +[Mon Feb 22 07:08:17 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.193 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.194 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.195 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.196 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.197 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.198 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.199 +[Mon Feb 22 07:09:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.200 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.201 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.202 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.203 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.204 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.205 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.206 +[Mon Feb 22 07:10:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.207 +[Mon Feb 22 07:16:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.208 +[Mon Feb 22 07:16:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.209 +[Mon Feb 22 07:16:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.210 +[Mon Feb 22 07:16:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.211 +[Mon Feb 22 07:16:25 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.212 +[Mon Feb 22 07:22:19 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/rsrc, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.213 +[Mon Feb 22 07:23:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Assets/Icons/xml.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.214 +[Mon Feb 22 07:23:11 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.215 +[Mon Feb 22 07:23:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.216 +[Mon Feb 22 07:23:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.217 +[Mon Feb 22 07:23:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.218 +[Mon Feb 22 07:23:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.219 +[Mon Feb 22 07:23:21 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.220 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.221 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.222 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.223 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.224 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.225 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.226 +[Mon Feb 22 07:23:48 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.227 +[Mon Feb 22 07:27:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Assets/Icons/xml.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.228 +[Mon Feb 22 07:27:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.229 +[Mon Feb 22 07:27:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.230 +[Mon Feb 22 07:27:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.231 +[Mon Feb 22 07:27:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.232 +[Mon Feb 22 07:27:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.233 +[Mon Feb 22 07:27:53 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.234 +[Mon Feb 22 07:28:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.235 +[Mon Feb 22 07:28:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.236 +[Mon Feb 22 07:28:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.237 +[Mon Feb 22 07:28:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.238 +[Mon Feb 22 07:28:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.239 +[Mon Feb 22 07:28:40 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.240 +[Mon Feb 22 07:28:40 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.241 +[Mon Feb 22 07:28:40 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.242 +[Mon Feb 22 07:28:40 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.243 +[Mon Feb 22 07:28:40 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.244 +[Mon Feb 22 07:29:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.245 +[Mon Feb 22 07:29:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.246 +[Mon Feb 22 07:29:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.247 +[Mon Feb 22 07:29:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.248 +[Mon Feb 22 07:29:13 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.249 +[Mon Feb 22 07:31:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.250 +[Mon Feb 22 07:31:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.251 +[Mon Feb 22 07:31:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.252 +[Mon Feb 22 07:31:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.253 +[Mon Feb 22 07:31:29 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.254 +[Mon Feb 22 07:34:27 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.255 +[Mon Feb 22 07:34:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.256 +[Mon Feb 22 07:34:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.257 +[Mon Feb 22 07:34:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.258 +[Mon Feb 22 07:34:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.259 +[Mon Feb 22 07:34:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.260 +[Mon Feb 22 07:36:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.261 +[Mon Feb 22 07:36:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.262 +[Mon Feb 22 07:36:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.263 +[Mon Feb 22 07:36:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.264 +[Mon Feb 22 07:36:24 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.265 +[Mon Feb 22 07:37:42 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/none, referer: http://judyates.rlmcintyre.com/e2gallerypro/e2upload/outputxml.php
 556.266 +[Mon Feb 22 07:37:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.267 +[Mon Feb 22 07:37:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.268 +[Mon Feb 22 07:37:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.269 +[Mon Feb 22 07:37:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.270 +[Mon Feb 22 07:37:51 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/e2gallerypro/
 556.271 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.272 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.273 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.274 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.275 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.276 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.277 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.278 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.279 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.280 +[Mon Feb 22 07:39:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.281 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.282 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.283 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.284 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.285 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.286 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.287 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.288 +[Mon Feb 22 07:41:14 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.289 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.290 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.291 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.292 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.293 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.294 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.295 +[Mon Feb 22 07:41:38 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.296 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.297 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.298 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.299 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.300 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.301 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.302 +[Mon Feb 22 07:42:18 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.303 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.304 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.305 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.306 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.307 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.308 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.309 +[Mon Feb 22 07:42:44 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.310 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.311 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.312 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.313 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.314 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.315 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.316 +[Mon Feb 22 07:42:55 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.317 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.318 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.319 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.320 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.321 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.322 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.323 +[Mon Feb 22 07:43:07 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.324 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.325 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.326 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.327 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.328 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.329 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.330 +[Mon Feb 22 07:45:06 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.331 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.332 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.333 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.334 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.335 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.336 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.337 +[Mon Feb 22 07:45:30 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.338 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.339 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.340 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.341 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.342 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.343 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.344 +[Mon Feb 22 07:46:43 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.345 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.346 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.347 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.348 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.349 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.350 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.351 +[Mon Feb 22 07:47:34 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.352 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.353 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.354 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.355 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.356 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.357 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.358 +[Mon Feb 22 07:50:08 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.359 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.360 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.361 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.362 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.363 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.364 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.365 +[Mon Feb 22 07:58:41 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.366 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.367 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.368 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.369 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.370 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.371 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.372 +[Mon Feb 22 07:59:10 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.373 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.374 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.375 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.376 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.377 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.378 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.379 +[Mon Feb 22 07:59:22 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.380 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.381 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.382 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.383 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.384 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.385 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.386 +[Mon Feb 22 07:59:37 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.387 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.388 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/design, referer: http://judyates.rlmcintyre.com/recent_sales.html
 556.389 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/left_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.390 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/right_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.391 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/controls_bg.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.392 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/design/e2simple/pop_arrow.png, referer: http://judyates.rlmcintyre.com/e2gallerypro/design/e2simple/design.css
 556.393 +[Mon Feb 22 08:00:50 2010] [error] [client 18.238.1.90] File does not exist: /home/r/Desktop/web/judyates/e2gallerypro/e2upload/Galleries/prints/mainthumb.jpg, referer: http://judyates.rlmcintyre.com/recent_sales.html
   557.1 --- a/menu.html	Fri Feb 19 11:14:52 2010 -0500
   557.2 +++ b/menu.html	Mon Feb 22 08:02:39 2010 -0500
   557.3 @@ -3,14 +3,14 @@
   557.4  <ul class = "menu">
   557.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   557.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   557.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   557.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   557.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  557.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  557.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  557.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  557.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  557.14  
  557.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  557.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  557.17  </ul>
  557.18  </div>
  557.19  
   558.1 --- a/menu2.html	Fri Feb 19 11:14:52 2010 -0500
   558.2 +++ b/menu2.html	Mon Feb 22 08:02:39 2010 -0500
   558.3 @@ -3,13 +3,14 @@
   558.4  <ul class = "menu">
   558.5  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
   558.6  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
   558.7 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
   558.8  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
   558.9  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  558.10  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  558.11  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  558.12  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  558.13  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  558.14 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  558.15 +
  558.16  </ul>
  558.17  </div>
  558.18  
   559.1 --- a/perl/meet_the_artist.pl	Fri Feb 19 11:14:52 2010 -0500
   559.2 +++ b/perl/meet_the_artist.pl	Mon Feb 22 08:02:39 2010 -0500
   559.3 @@ -150,4 +150,4 @@
   559.4  THERE
   559.5  
   559.6  
   559.7 -}
   559.8 \ No newline at end of file
   559.9 +}
   560.1 --- a/perl/menu.pl	Fri Feb 19 11:14:52 2010 -0500
   560.2 +++ b/perl/menu.pl	Mon Feb 22 08:02:39 2010 -0500
   560.3 @@ -6,14 +6,14 @@
   560.4  <ul class = "menu">
   560.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   560.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   560.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   560.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   560.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  560.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  560.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  560.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  560.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  560.14  
  560.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  560.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  560.17  </ul>
  560.18  </div>
  560.19  
  560.20 @@ -28,13 +28,14 @@
  560.21  <ul class = "menu">
  560.22  <li class = "menu"><a class = "menu" href = "../index.html">Home</a></li>
  560.23  <li class = "menu"><a class = "menu" href = "../gallery1.html">Gallery</a></li>
  560.24 +<li class = "menu"><a class = "menu" href = "../recent_sales.html">Prints</a></li>
  560.25  <li class = "menu"><a class = "menu" href = "../feedback.html">Feedback</a></li>
  560.26  <li class = "menu"><a class = "menu" href = "../hto.html">Orders</a></li>
  560.27  <li class = "menu"><a class = "menu" href = "../pricing.html">Pricing</a></li>
  560.28  <li class = "menu"><a class = "menu" href = "../Meet the Artist2.html"> Meet the Artist</a></li>
  560.29  <li class = "menu"><a class = "menu" href = "../Contact.html"> Contact</a></li>
  560.30  <li class = "menu"><a class = "menu" href = "../pets1.html">Pets</a></li>
  560.31 -<li class = "menu"><a class = "menu" href = "../recent_sales.html"> Recent Sales</a></li>
  560.32 +
  560.33  </ul>
  560.34  </div>
  560.35  
   561.1 --- a/pets1.html	Fri Feb 19 11:14:52 2010 -0500
   561.2 +++ b/pets1.html	Mon Feb 22 08:02:39 2010 -0500
   561.3 @@ -13,14 +13,14 @@
   561.4  <ul class = "menu">
   561.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   561.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   561.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   561.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   561.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  561.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  561.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  561.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  561.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  561.14  
  561.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  561.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  561.17  </ul>
  561.18  </div>
  561.19  
  561.20 @@ -59,14 +59,14 @@
  561.21  <ul class = "menu">
  561.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  561.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  561.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  561.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  561.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  561.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  561.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  561.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  561.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  561.31  
  561.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  561.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  561.34  </ul>
  561.35  </div>
  561.36  
   562.1 --- a/pets2.html	Fri Feb 19 11:14:52 2010 -0500
   562.2 +++ b/pets2.html	Mon Feb 22 08:02:39 2010 -0500
   562.3 @@ -13,14 +13,14 @@
   562.4  <ul class = "menu">
   562.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   562.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   562.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   562.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   562.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  562.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  562.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  562.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  562.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  562.14  
  562.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  562.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  562.17  </ul>
  562.18  </div>
  562.19  
  562.20 @@ -93,14 +93,14 @@
  562.21  <ul class = "menu">
  562.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  562.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  562.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  562.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  562.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  562.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  562.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  562.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  562.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  562.31  
  562.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  562.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  562.34  </ul>
  562.35  </div>
  562.36  
   563.1 --- a/pets3.html	Fri Feb 19 11:14:52 2010 -0500
   563.2 +++ b/pets3.html	Mon Feb 22 08:02:39 2010 -0500
   563.3 @@ -13,14 +13,14 @@
   563.4  <ul class = "menu">
   563.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   563.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   563.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   563.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   563.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  563.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  563.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  563.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  563.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  563.14  
  563.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  563.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  563.17  </ul>
  563.18  </div>
  563.19  
  563.20 @@ -53,14 +53,14 @@
  563.21  <ul class = "menu">
  563.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  563.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  563.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  563.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  563.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  563.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  563.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  563.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  563.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  563.31  
  563.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  563.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  563.34  </ul>
  563.35  </div>
  563.36  
   564.1 --- a/pricing.html	Fri Feb 19 11:14:52 2010 -0500
   564.2 +++ b/pricing.html	Mon Feb 22 08:02:39 2010 -0500
   564.3 @@ -15,14 +15,14 @@
   564.4  <ul class = "menu">
   564.5  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
   564.6  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
   564.7 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
   564.8  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
   564.9  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  564.10  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  564.11  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  564.12  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  564.13 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  564.14  
  564.15 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  564.16 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  564.17  </ul>
  564.18  </div>
  564.19  
  564.20 @@ -46,14 +46,14 @@
  564.21  <ul class = "menu">
  564.22  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  564.23  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  564.24 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  564.25  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  564.26  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  564.27  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  564.28  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  564.29  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  564.30 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  564.31  
  564.32 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  564.33 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  564.34  </ul>
  564.35  </div>
  564.36  
   565.1 Binary file prints/large/Judy_Yates_Buffalo_Verde.jpg has changed
   566.1 Binary file prints/large/Judy_Yates_Longhorn_Sunset.jpg has changed
   567.1 Binary file prints/large/Judy_Yates_Turquoise_Sky.jpg has changed
   568.1 Binary file prints/large/Judy_Yates_Wood_Duck_Pair.jpg has changed
   569.1 Binary file prints/normal/Judy_Yates_Buffalo_Verde.jpg has changed
   570.1 Binary file prints/normal/Judy_Yates_Longhorn_Sunset.jpg has changed
   571.1 Binary file prints/normal/Judy_Yates_Turquoise_Sky.jpg has changed
   572.1 Binary file prints/normal/Judy_Yates_Wood_Duck_Pair.jpg has changed
   573.1 Binary file prints/source/Judy_Yates_Bufallo_Mesa.jpg has changed
   574.1 Binary file prints/source/Judy_Yates_Buffalo_Verde.jpg has changed
   575.1 Binary file prints/source/Judy_Yates_Duck_Stamp.jpg has changed
   576.1 Binary file prints/source/Judy_Yates_Longhorn_Sunset.jpg has changed
   577.1 Binary file prints/source/Judy_Yates_Longhorn_Sunset_Scale.jpg has changed
   578.1 Binary file prints/source/Judy_Yates_Mass_Deer_Stamp.jpg has changed
   579.1 Binary file prints/source/Judy_Yates_Turquoise_Sky.jpg has changed
   580.1 Binary file prints/source/Judy_Yates_Wood_Duck_Pair.jpg has changed
   581.1 Binary file prints/thumbs/Judy_Yates_Buffalo_Verde.jpg has changed
   582.1 Binary file prints/thumbs/Judy_Yates_Longhorn_Sunset.jpg has changed
   583.1 Binary file prints/thumbs/Judy_Yates_Turquoise_Sky.jpg has changed
   584.1 Binary file prints/thumbs/Judy_Yates_Wood_Duck_Pair.jpg has changed
   585.1 --- a/recent_sales.html	Fri Feb 19 11:14:52 2010 -0500
   585.2 +++ b/recent_sales.html	Mon Feb 22 08:02:39 2010 -0500
   585.3 @@ -1,9 +1,53 @@
   585.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   585.5 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   585.6 +<head>
   585.7 +	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   585.8 +	
   585.9 +	<title>Judy Yates - Prints</title>
  585.10 +	
  585.11 +	
  585.12 +	<!--(E)2 Gallery Pro <head> Files-->
  585.13 +		<!--(E)2 Gallery Config FIle-->
  585.14 +                    <!--End (E)2 Gallery Config FIle-->
  585.15 +        <!--(E)2 Gallery Style Sheet Link-->
  585.16 +    		<link href="e2gallerypro/design/e2simple/design.css" rel="stylesheet" type="text/css" />
  585.17  
  585.18 +            <script type="text/javascript">
  585.19 +			//modify this path if needed ^ Correlates with Style Sheet Path above
  585.20 +            var designPath="e2gallerypro/design/e2simple/";
  585.21 +            </script>
  585.22 +        <!--End (E)2 Gallery Style Sheet Link-->
  585.23 +        
  585.24 +        <!--Mootools-->
  585.25 +            <script type="text/javascript" src="e2gallerypro/js/mootools-1.2-core.js"></script>
  585.26 +            <script type="text/javascript" src="e2gallerypro/js/mootools-1.2-more.js"></script>
  585.27 +        <!--End Mootools-->
  585.28 +        <!--(E)2 Gallery Javascript-->
  585.29  
  585.30 -<html>
  585.31 -<head>
  585.32 -<link rel="stylesheet" type="text/css"
  585.33 -href="firetest.css"> </link>
  585.34 +			<script type="text/javascript" src="e2gallerypro/js/setupvars.js"></script>
  585.35 +			<script type="text/javascript">
  585.36 +var imagesloaded = new Array();
  585.37 +var maingalleries = new Array();
  585.38 +<!--(E)2 Gallery Parse XML output Javascript-->
  585.39 +maingalleries  = [
  585.40 +{'name':'Judy Yates Prints', 'imgpath': '/e2gallerypro/e2upload/Galleries/prints/','lrgpath': '/e2gallerypro/e2upload/Galleries/prints/large/', 'thumbpath': '/e2gallerypro/e2upload/Galleries/prints/thumbs/', 'mainthumb': '/e2gallerypro/e2upload/Galleries/prints/', 'src':'mainthumb.jpg', 'description':'Prints Directly From the Artist.', 'start':0, 'end':3, 'gallerynum':0}];
  585.41 +
  585.42 +var galleryimages = new Array();
  585.43 +
  585.44 +galleryimages = [
  585.45 +{'filetype':'image', 'path':'/e2gallerypro/e2upload/Galleries/prints/','src':'Judy_Yates_Buffalo_Verde.jpg', 'width':'720', 'height':'584', 'lrgwidth':'720', 'lrgheight':'584', 'lrgpath':'/e2gallerypro/e2upload/Galleries/prints/large/','title': 'Buffalo Verde', 'author':'Judy Yates', 'copyright':'Copyright Judy Yates Artist', 'description':'Buffalo Verde','forsale':true,'paytype':'paypal' , 'price1': '265', 'pricecurrency1': 'USD', 'pricecurrencysymbol1': '$', 'pricesize1': '16inx20in','numOfPrices':1, 'imgid':0},
  585.46 +{'filetype':'image', 'path':'/e2gallerypro/e2upload/Galleries/prints/','src':'Judy_Yates_Longhorn_Sunset.jpg', 'width':'720', 'height':'569', 'lrgwidth':'720', 'lrgheight':'569', 'lrgpath':'/e2gallerypro/e2upload/Galleries/prints/large/','title': 'Longhorn Sunset', 'author':'Judy Yates', 'copyright':'Copyright Judy Yates Artist', 'description':'Longhorn Sunset','forsale':true,'paytype':'paypal' , 'price1': '265', 'pricecurrency1': 'USD', 'pricecurrencysymbol1': '$', 'pricesize1': '16inx20in','numOfPrices':1, 'imgid':1},
  585.47 +{'filetype':'image', 'path':'/e2gallerypro/e2upload/Galleries/prints/','src':'Judy_Yates_Turquoise_Sky.jpg', 'width':'720', 'height':'558', 'lrgwidth':'720', 'lrgheight':'558', 'lrgpath':'/e2gallerypro/e2upload/Galleries/prints/large/','title': 'Turquoise Sky', 'author':'Judy Yates', 'copyright':'Copyright Judy Yates Artist', 'description':'Winner of the Mass. Primitive Arms Stamp Contest','forsale':true,'paytype':'paypal' , 'price1': '265', 'pricecurrency1': 'USD', 'pricecurrencysymbol1': '$', 'pricesize1': '16inx22in','numOfPrices':1, 'imgid':2},
  585.48 +{'filetype':'image', 'path':'/e2gallerypro/e2upload/Galleries/prints/','src':'Judy_Yates_Wood_Duck_Pair.jpg', 'width':'720', 'height':'537', 'lrgwidth':'720', 'lrgheight':'537', 'lrgpath':'/e2gallerypro/e2upload/Galleries/prints/large/','title': 'Wood Duck Pair', 'author':'Judy Yates', 'copyright':'Copyright Judy Yates Artist', 'description':'Wood Duck Pair','forsale':true,'paytype':'paypal' , 'price1': '265', 'pricecurrency1': 'USD', 'pricecurrencysymbol1': '$', 'pricesize1': '16inx20in','numOfPrices':1, 'imgid':3}	
  585.49 +];
  585.50 +<!--End (E)2 Gallery Parse XML output Javascript-->
  585.51 +</script>			<script type="text/javascript" src="e2gallerypro/js/e2gallerypro.js"></script>
  585.52 +			<script type="text/javascript">
  585.53 +				window.addEvent('domready', function() {
  585.54 +																				});
  585.55 +            </script>
  585.56 +        <!--End (E)2 Gallery Javascript-->
  585.57 +	<!--End (E)2 Gallery Pro </head> Files-->
  585.58  </head>
  585.59  <body>
  585.60  
  585.61 @@ -21,43 +65,96 @@
  585.62  <ul class = "menu">
  585.63  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
  585.64  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
  585.65 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
  585.66  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
  585.67  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
  585.68  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
  585.69  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
  585.70  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
  585.71 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  585.72  
  585.73 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
  585.74 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
  585.75  </ul>
  585.76  </div>
  585.77  
  585.78 -<div class = "orangebox">
  585.79 -<p class = "orangebox">
  585.80 -
  585.81 -
  585.82 -<img class = "judy" src = "pictures/longhornsteer.jpg" width = "300" height = "240"></img>
  585.83 -
  585.84 -
  585.85 -<span class = "paragraph">Judy Yates</span> has prepared this custom order of a Texas Longhorn as the first painting for 2009!  What will she paint for you? &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
  585.86 -
  585.87 -
  585.88 -
  585.89 -</p>
  585.90 -</div>
  585.91 +<div class = "orangebox">
  585.92 +
  585.93 +
  585.94 +
  585.95 +
  585.96 +<!--(E)2 Gallery Pro HTML-->
  585.97 +<div id="gallerywrapper">
  585.98 +	<div id="gallery">
  585.99 +	  <!--Loading Bar-->
 585.100 +	  <div id="loading">
 585.101 +		<div id="loadingbar"><img src="e2gallerypro/design/e2simple/loading_hill.gif" width="50" height="50" alt="" id="bar" /></div>
 585.102 +	  </div>
 585.103 +	  <!--End Loading Bar-->
 585.104 +	  <!--Previous Button Div-->
 585.105 +	  <div id="previous"></div>
 585.106 +
 585.107 +	  <!--End Previous Button Div-->
 585.108 +	  <!--Next Button Div-->
 585.109 +	  <div id="next"></div>
 585.110 +	  <!--End Next Button Div-->
 585.111 +	  <!--Main Image Holder Div-->
 585.112 +	  <div id="images">
 585.113 +		<div id="imagewrap">
 585.114 +		  <div id="imgloader"></div>
 585.115 +		</div>
 585.116 +
 585.117 +		<div id="imageinfo">
 585.118 +		  <div id="infoloader"></div>
 585.119 +		</div>
 585.120 +		<div id="smallmessage"></div>
 585.121 +	  </div>
 585.122 +	  <!--End Main Image Holder Div-->
 585.123 +	  <!--Thumb Box Div-->
 585.124 +	  <div id="thumbbox">
 585.125 +		<div id="thumbleft"></div>
 585.126 +
 585.127 +		<div id="thumbright"></div>
 585.128 +		<div id="thumbnails">
 585.129 +		  <div id="thumbnailwrap"></div>
 585.130 +		</div>
 585.131 +	  </div>
 585.132 +	  <!--End Thumb Box Div-->
 585.133 +	  <!--For Sale Box Div-->
 585.134 +	  <div id="fsbox"></div>
 585.135 +	  <!--End For Sale Box Div-->
 585.136 +
 585.137 +	  <!--Galleries Holder Div-->
 585.138 +	  <div id="galleries">
 585.139 +		<div id="controls">
 585.140 +		  <div class="right"><img src="e2gallerypro/design/e2simple/gallery_view.png"  class="controls" rel=" " id="opengallery" title="View Galleries" border="0" /> <img src="design/e2simple/infobox.png" id="showinfo" rel=" " class="controls" title="View Info" border="0" /> <img src="design/e2simple/thumbbox.png" id="showthumbbox" title="Toggle Thumbs" class="controls" rel=" " border="0" /></div>
 585.141 +		  <span id="slideshow"><img src="e2gallerypro/design/e2simple/play.png" title="Play Slideshow" border="0" align="absmiddle" class="controls" rel=" " /></span> | <span id="photoNum"></span><span id="flashNum"></span><span id="qtNum"></span></div>
 585.142 +		<div id="galleryset"> </div>
 585.143 +
 585.144 +	  </div>
 585.145 +	  <!--End Galleries Holder Div-->
 585.146 +	  <!--Thumbnail Pop Up Holder-->
 585.147 +	  <div id="thumbnailPopUp"></div>
 585.148 +	  <!--End Thumbnail Pop Up Holder-->
 585.149 +	</div>
 585.150 +</div>
 585.151 +
 585.152 +
 585.153 +
 585.154 +
 585.155 +
 585.156 +</div>
 585.157  
 585.158  <div class = "menu">
 585.159  <ul class = "menu">
 585.160  <li class = "menu"><a class = "menu" href = "index.html">Home</a></li>
 585.161  <li class = "menu"><a class = "menu" href = "gallery1.html">Gallery</a></li>
 585.162 +<li class = "menu"><a class = "menu" href = "recent_sales.html">Prints</a></li>
 585.163  <li class = "menu"><a class = "menu" href = "feedback.html">Feedback</a></li>
 585.164  <li class = "menu"><a class = "menu" href = "hto.html">Orders</a></li>
 585.165  <li class = "menu"><a class = "menu" href = "pricing.html">Pricing</a></li>
 585.166  <li class = "menu"><a class = "menu" href = "Meet the Artist2.html"> Meet the Artist</a></li>
 585.167  <li class = "menu"><a class = "menu" href = "Contact.html"> Contact</a></li>
 585.168 +<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
 585.169  
 585.170 -<li class = "menu"><a class = "menu" href = "pets1.html">Pets</a></li>
 585.171 -<li class = "menu"><a class = "menu" href = "recent_sales.html"> Recent Sales</a></li>
 585.172  </ul>
 585.173  </div>
 585.174