/// <reference path="jquery-ui-1.8.6.custom.min.js" />
/// <reference path="../../../Javascript/jquery.colorbox-min.js" />
// Also:
// function AppRoot() defined on page, although if there's a better way or convention 
// to handle it without being on page, I'd like to know.
jQuery(function() {
	(function($) {
		//internal variables
		var settings; 	// Options object - defined in the init function
		var internalData; // Internal info object - defined in the init function
		var currentCategory; //element.name = like b1 for the 1 bed or b0 for Studio - matches the keys in plans by category
		var currentPlan; //current plan id with 'k' prepended like k19 for plan id 19

		var fpindex = 0; // index of current planbutton. used to track position for up/down buttons
		var ok2go = true; // toggle to sdetermine if it's ok to animate the plan button--meaning no other button is currently annimating.
		var fpids = new Array;  //all marketing floorplan ids (NOT L&R ids)
		var datePickerJQ = "#datefield";  //jQuery expression to instantiate date picker.
		var currentView;

		var serviceurl5; // = AppRoot() + "Services/SearchService.svc/jsonp/UnitAvailability5";
		var params5; // = "mfpsiteid=" + siteid + "&fpid=" + fpid + "&moveindate=" + dateText;
		
		//Ajax Callbacks.
		function uawidgetdatacallbackFirstLoad(data) {

			internalData.dataobject = {};
			// with regard to objects: null || X = X; X || Y = X;
			internalData.dataobject.Floorplans = data.Floorplans || [];
			internalData.dataobject.Units = data.Units || [];
			internalData.dataobject.Error = data.Error || "";
			parseBits();
			buildSections();
			initJQuiBits();
			setDefaults();
			
			

		};
		function uawidgetdatacallbackPostFirstLoad(data) {
			//$("#unitsTable").loadingCover("destroy");

			//alert('here');

			internalData.dataobject.Units = data.Units || [];
			internalData.dataobject.Error = data.Error || "";
			//reset lookups.
			internalData.categoryopts = new Array;
			internalData.plansbycategory = new Object;
			internalData.allplans = new Object;
			internalData.categorytracker = new Object;
			internalData.availUnitsByPlan = new Object;

			parseBits();
			setDefaults();

			$("#loadingCover").fadeOut(1000, function() {
				$('#loadingCover').preloader('destroy');
				$('#loadingCover').remove();
            });
/*

            $.ajax({
                url: serviceurl5 + "?" + params5,
                dataType: 'json',
                cache: false
                //success: uawidgetdatacallbackPostFirstLoad
            });
*/

/*
            var serviceurl = AppRoot() + "Services/SearchService.svc/jsonp/UnitAvailability5";
            var params = "mfpsiteid=" + siteid + "&fpid=" + fpid + "&moveindate=" + dateText;
            //$('#unitsTable').html('');
            //$("#fpwidget").loadingCover({ message: 'One moment please while we search for available apartments...<div><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif" /></div>' });
            $.ajax({
                url: serviceurl + "?" + params,
                dataType: 'json',
                cache: false,
                //success: uawidgetdatacallbackPostFirstLoad
            });
*/
            
		};
		//misc
		function hideGoNextBits() {
			$("#unitsFooter").fadeOut(500);
		}
		function showGoNextBits() {
			$("#unitsFooter").fadeIn(500);
		}
		function initJQuiBits() {
			$('.btngreen').bind('click', function() {
				if (ok2go) {
					var move = 1;
					if ($(this).attr('id') == "btngreenup") { move = -1; }
					fpindex += move;
					if (fpindex == -1) { fpindex = 0 }
					else if (fpindex == (fpids.length)) { fpindex = (fpids.length - 1) }
					else { fpSelect(); }
				}
			});

			$('#bedsselect input').change(function() {
				currentCategory = jQuery('#bedsselect :radio:checked').val();
				setPlanSelector(internalData.plansbycategory[currentCategory]);
				hideGoNextBits();
			});

			$('.fpbtn').live('click', function() {
				fpindex = $.inArray($(this).attr('id'), fpids);
				fpSelect();
				hideGoNextBits();
			});

			$('.fpdet_click').live('click', function(event) {
				var id = event.target.id;
				switch (id) {
					case 'siteplan':
						//enlargeimage(settings.siteplanURLbig);
						//return false;
						break;
				}
			});



			$('.fpimg_link').live('click', function(event) {
				var id = event.target.id;
				var picurl = null;
				//alert(id);
				switch (id) {
					case 'view3d':
						currentView = '3d';
						$('#view3d').toggleClass('view_active', true);
						$('#view2d').toggleClass('view_active', false);
						setFPimage();
						break;
					case 'view2d':
						currentView = '2d';
						$('#view2d').toggleClass('view_active', true);
						$('#view3d').toggleClass('view_active', false);
						setFPimage();
						break;
					case 'enlarge':
						picurl = internalData.plansbycategory[currentCategory][currentPlan].flpModelPICbig;
						if (currentView == '3d') {
							picurl = internalData.plansbycategory[currentCategory][currentPlan].fp3dFloorPlanbig
						}
						if (picurl != undefined)
							enlargeimage(picurl);
						break;
				}
			});
			//if the unit is available in the future of the current move in date, 
			//we need to pass in that  units availability date, not 
			//the date of the datefield
			$("#unitftr_flexhd").live('click', function(event) {
				var qstr = "?" + $('input[name=units]:checked').val();

				//%2f

				qstr = qstr.replace('///g', '%2f');

				/*
				var htmlString = ('<div id="loadingCover" class="ui-widget ui-widget-content ui-corner-all" style="position:absolute; z-index:9999; top:10px; text-align:center; left:10px; width:400px; height:80px;">');
				htmlString += ('<p style="margin-top:10px;">One moment please while we load your selection...</p>');
				htmlString += ('<div><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif" />');
				htmlString += ('<iframe src="' + AppRoot() + 'PropertyPages/UnitAvailabilityChart.aspx' + qstr + '" />');
				htmlString += ('</div></div>');
				*/

				$.colorbox({
					//html: htmlString,
					href: AppRoot() + "PropertyPages/UnitAvailabilityChart.aspx" + qstr,
					innerWidth: 867,
					innerHeight: 520,
					iframe: true,
					opacity: 0.74,
					fastIframe: false,
					onLoad: function() {
						//alert('here onload');
						//$('#cboxClose').hide();
					},
					onComplete: function() {
						//alert('here oncomplete');
						//$('#cboxClose').hide();
					},

					onCleanup: function() {
						//alert('here oncleanup');
					}
				});
				/*
				var htmlString = ('<div id="loadingCover" class="ui-widget ui-widget-content ui-corner-all" style="position:absolute; z-index:9999; top:10px; text-align:center; left:10px; width:400px; height:80px;">');
				htmlString += ('<p style="margin-top:10px;">One moment please while we load your selection...</p>');
				htmlString += ('<div><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif" /></div></div>');
				//AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif"

			    //htmlString


			    $.colorbox({
				html: htmlString,

			    	innerWidth: 420,
				innerHeight: 100,

			    	iframe: false,
				opacity: 0.74,
				overlayClose: false,
				escKey: false,
				//close: '',
				onLoad: function() {
				//alert('here');
				$('#cboxClose').hide();
				},

			    	onComplete: function() {
				//alert('here');
				$('#cboxClose').hide();
				},

			    	onCleanup: function() {
				}
				});
				*/
			});

			$("#unitftr_next").live('click', function(event) {
				//$("#fpwidget").loadingCover({ message: 'One moment please while we load your selection...' });

				//var colorform = $("#loadingCover"); // $("#fpwidget");
				var htmlString = ('<div id="loadingCover" class="ui-widget ui-widget-content ui-corner-all" style="position:absolute; z-index:9999; top:10px; text-align:center; left:10px; width:400px; height:80px;">');
				htmlString += ('<p style="margin-top:10px;">Please be patient.  We are searching for the perfect apartment and the very best price to offer you!</p>');
				htmlString += ('<div><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif" /></div></div>');
				//AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif"

				//htmlString



				$.colorbox({
					//href: AppRoot() + "PropertyPages/UnitAvailabilityChart.aspx" + qstr,

					//inline: true, href: $("#fpwidget"),
					html: htmlString,

					innerWidth: 420,
					innerHeight: 100,

					/*
					innerWidth: 867,
					innerHeight: 520,
					*/

					iframe: false,
					opacity: 0.74,
					overlayClose: false,
					escKey: false,
					//close: '',
					onLoad: function() {
						//alert('here');
						$('#cboxClose').hide();
					},

					onComplete: function() {
						//alert('here');
						$('#cboxClose').hide();
					},

					onCleanup: function() {
					}
				});


				var qstr = "?" + $('input[name=units]:checked').val();
				document.location = AppRoot() + "PropertyPages/Apt_Confirm.aspx" + qstr
			});


		}

		function setDefaults() {
			//            // FP Image Default
			//            if (settings.defaultImage == '2d') {
			//                //$('#view2d').toggleClass('view_active');
			//                currentView = '2d';
			//            }
			//            else {
			//                //$('#view3d').toggleClass('view_active');
			//                currentView = '3d';
			//            }

			// Units table
			updateUnitDisplay();
		}


		function setFPimage() {
			var plando = internalData.plansbycategory[currentCategory][currentPlan];
			var picurl = plando.fp3dFloorPlansmall;
			if (currentView == '2d') { picurl = plando.flpModelPICsmall; }
			$('#fpimg').html('').html('<img id="fp_picload" class="fp_pic" src="' + picurl + '" style="display:none;" />');
			$('#fp_picload').bind('load', function(event) {
				var containerH = $('#fpimg').height();
				var contentH = $('.fp_pic').height();
				var newY = (containerH - contentH) * 0.5;
				$('.fp_pic').css('position', 'relative');
				$('.fp_pic').css('top', newY);
				$('.fp_pic').fadeIn("fast");
			});
		}



		function buildSections() {
			// Bed Option Radios
			var bedsstr = '';
			$(internalData.categoryopts).each(function(index, element) {
				var checked = ''; if (index == 0) { checked = 'checked="checked" '; }
				var lbl = element.label;
				if (lbl != settings.zeroReplace) { lbl = lbl + ' BD'; }
				bedsstr += ('<label class="label_radio" for="' + element.name + '">');
				bedsstr += ('<input tabindex="10" name="beds" id="' + element.name + '" value="' + element.name + '" ' + checked + 'type="radio" />' + lbl + '</label>');
			});
			$('#bedsselect').append(bedsstr);
			currentCategory = internalData.categoryopts[0].name; // Default Category:
			setPlanSelector(internalData.plansbycategory[currentCategory]);
		};




		function setPlanSelector(dataobj) {
			var plansString = ''
			fpids = new Array;

			for (var key in dataobj) {
				var planlabel = dataobj[key].flplModel;
				if (settings.planPrepend) { planlabel = settings.planPrepend + ' ' + planlabel }
				plansString += '<div title="' + planlabel + '" id="' + 'k' + dataobj[key].flplid + "_" + dataobj[key].siteid + '" class="fpbtn">' + planlabel + '</div>'
				fpids.push('k' + dataobj[key].flplid + "_" + dataobj[key].siteid);
			}

			$('#movewrap').html('').html(plansString);
			fpindex = 0;
			fpSelect();

		}






		function fpSelect() {
			if (ok2go) {
				ok2go = false;
				currentPlan = fpids[fpindex];

				//alert('here fpSelect');

				// toggle the green arrow buttons enabled or not
				$('#btngreenup img').toggleClass('disabled', fpindex < 1);
				$('#btngreendown img').toggleClass('disabled', fpindex == fpids.length - 1)

				//---------------------------------
				// Plan Details
				var plando = internalData.plansbycategory[currentCategory][currentPlan];
				//2d,3d
				if (plando.has3d) {
					$("#views .sep1, #view3d").each(function(index, elem) {
						$(elem).show();
					});
					$('#view2d').toggleClass('view_active', false);
					$('#view3d').toggleClass('view_active', true);
					currentView = "3d";
				} else {
					$("#views .sep1, #view3d").each(function(index, elem) {
						$(elem).hide();
					});
					$('#view2d').toggleClass('view_active', true);
					$('#view3d').toggleClass('view_active', false);
					currentView = "2d";
				}


				//beds check
				var beds = (plando.flplBeds + ' BD');
				if (beds == '0') { beds = settings.zeroReplace; }
				// rent check
				var rent = ('$' + plando.flplPriceRangeLow);
				if (plando.flplPriceRangeLow != plando.fpPriceRangeHigh) { rent = ('$' + plando.flplPriceRangeLow + ' - $' + plando.fpPriceRangeHigh); }
				// name check
				var planlabel = plando.flplModel;
				if (settings.planPrepend) { planlabel = settings.planPrepend + ' ' + planlabel }

				var planstr = ('<p class="fpdetail"><span class="fpdet_model">' + planlabel + '<br /></span>');
				planstr += ('<span class="fpdet_info">' + beds + ' / ' + plando.flplBaths + ' BA<br />' + plando.flplSquareFeetLow + ' sq. ft.<br />' + rent + '<br /></span></p>');
				planstr += ('<p class="fpdet_links"><a class="fpdet_click" target="_blank" href="' + AppRoot() + "PropertyPages/DisplayPrintFP.aspx?fp=" + plando.flplid + "&s=" + plando.siteid + '" id="brochure">Printable Brochure</a><br />');
				if (settings.siteplanURLS["k" + plando.siteid] && settings.siteplanURLS["k" + plando.siteid].length > 2) {
					planstr += ('<a href="' + settings.siteplanURLS["k" + plando.siteid] + '" target="_blank" class="fpdet_click" id="siteplan">View Siteplan</a>');
				}

				//                if (settings.siteplanURL && settings.siteplanURL.length > 2) {
				//                    settings.siteplanURLbig = mlurl(settings.siteplanURL, internalData.wparam, "/siteplans/", true);
				//                    planstr += ('<a href="#" class="fpdet_click" id="siteplan">View Siteplan</a>');
				//                } else {
				//                    settings.siteplanURLbig = "";
				//                }
				planstr += ('</p>');

				$(fpids).each(function(index, element) {
					if ($('#' + element).hasClass('fpbtn_active') && index != fpindex) {
						$('#' + element).removeClass('fpbtn_active', 200);
						$('#' + element).html('').html($('#' + element).attr('title'));
					}
					else if (index == fpindex) {
						$('#' + element).addClass('fpbtn_active', 200, setGo);
						$('#' + element).html('').html(planstr);
					}
				});
				// positioning bits
				var movemult = fpindex - 5; // 5 is the little offset the active box has if not the first or last
				if (movemult < 0) { movemult = 0; }
				var move = -39 * (movemult);
				if (fpindex == (fpids.length - 1)) { move += 5; }
				$('#movewrap').css({ 'margin-top': move });

				setFPimage();
				//updateUnitDisplay();
				(function() {
					var dateText = $(datePickerJQ).val(); //$(datePickerJQ).datepicker("getDate");
					$('#datefield2').val($(datePickerJQ).val());
					if (!internalData.DateYetToBeSelected) {
						fetchUnitInfo(dateText);
					}
					else {
						manualdate = '';
						$('#datefield').val('');
						$('#unitsTable').html('');
						$('#unitsTable').append('Please Select A Move-in Date at left');
						$('#fpw_div_FeaturedApts').hide();
						$('#unitsFooter').hide();
						$('#unitftr_note').hide();
						//$('#unitsTable').append($('<span class="error"/></span>').text(internalData.dataobject.Error))
						//$('#unitsTable').append('<br />Please pick a date to try again.');
					}

				})();


			}
		}
		function setGo() { ok2go = true; }
		function doUnitSelect(ID) {
			var inputRadio = $("#" + ID).find("input:radio").attr("checked", true);
		}

		function fetchUnitInfo(dateText) {
			var currentPlan = fpids[fpindex];
			//current plan is in format 'k' + dataobj[key].flplid + "_" + dataobj[key].siteid
			var resplit = /k(\d+)\_(\d+)/;
			var resultarray = resplit.exec(currentPlan);
			var fpid = resultarray[1];
			var siteid = resultarray[2];

			serviceurl5 = AppRoot() + "Services/SearchService.svc/jsonp/UnitAvailability5";
			params5 = "mfpsiteid=" + siteid + "&fpid=" + fpid + "&moveindate=" + dateText;
			
			var serviceurl = AppRoot() + "Services/SearchService.svc/jsonp/UnitAvailability";
			var params = "mfpsiteid=" + siteid + "&fpid=" + fpid + "&moveindate=" + dateText;
			$('#unitsTable').html('');
			$("#fpwidget").loadingCover({ message: 'One moment please while we search for available apartments...<div><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif" /></div>' });
			$.ajax({
				url: serviceurl + "?" + params,
				dataType: 'json',
				cache: false,
				success: uawidgetdatacallbackPostFirstLoad
            });

            
		}

		function updateUnitDisplay() {
			if (internalData.dataobject.Error.length > 0) {
			    $('#unitsTable').html('');
				
				//$('#unitsTable').append('There was an error: ');
				//$('#unitsTable').append($('<span class="error"/></span>').text(internalData.dataobject.Error))

				$('#unitsTable').append('<br />The service may be unavailable at this time.  Please try back at a later time.');
				//$('#unitsTable').append('<br />Please pick a date to try again.');
				
			} else {

				var unitStr = '<table width="100%"><tr><th></th><th>Apt #</th><th>Date Available</th><th>Floor</th><th>Lease Term</th><th>Best Price*</th></tr>'
				var units = internalData.availUnitsByPlan[currentPlan];
				//alert(currentPlan + ' ' + units.length);
				$.each(units, function(index, element) {

					//alert(index);

				    var rowclass = '';

				    if (element.IsFeaturedApartment) {
						rowclass = 'class="IsFeatured"';
						$('#fpw_div_FeaturedApts').fadeIn();
					} else {
						rowclass = 'class="IsNotFeatured"';
					}
					var row = '';
					row += '<tr id="unitsTable_u_' + index + '" ' + rowclass + ' class="tr_avunit" tabindex="10">'

					var pick_date = new Date($(datePickerJQ).val());
					var leasedate = new Date(element.LeaseStartDate);

					var diff = ((leasedate.getTime() - pick_date.getTime()) / (1000 * 60 * 60 * 24));

					//alert('dateText ' + leasedate + ' datePickerJQ ' + pick_date + ' diff ' + diff);
					if (diff > 0) {
					    row += ('<td><input name="units" id="ueol' + element.UnitId + '_' + element.siteid + '" value="s=' + element.siteid + '&amp;u=' + element.UnitId + '&amp;l=' + element.LeaseTermMonths + '&amp;d=' + element.LeaseStartDate + '&fixd=' + element.LeaseStartDate + '&bunum=' + element.BuildingNumUnitNum + '" type="radio" /></td>');
					    //'&amp;bunum=' + element.BuildingNumUnitNum + 
					}
					else {
						//element.LeaseStartDate
						//$(datePickerJQ).val()
					    row += ('<td><input name="units" id="ueol' + element.UnitId + '_' + element.siteid + '" value="s=' + element.siteid + '&amp;u=' + element.UnitId + '&amp;l=' + element.LeaseTermMonths + '&amp;d=' + element.LeaseStartDate + '&fixd=' + $(datePickerJQ).val() + '&bunum=' + element.BuildingNumUnitNum + '" type="radio" /></td>');
					}

					row += '<td>' + element.BuildingNumUnitNum + '</td>'  //.FloorplanKey  // + '<br />' + element.flplBeds
					row += '<td>' + element.DateAvailable + '</td>'
					row += '<td>' + element.UnitFloorNumber + '</td>'
					row += '<td>' + element.LeaseTermMonths + '</td>'
					row += '<td> $' + element.Rent + ''

					if (element.IsFeaturedApartment) {
						row += ' *';
					} else {

					}

					row += '</td></tr>'
					unitStr += row
				});
				unitStr += '</table>';
				if (units.length == 0) {
					if (internalData.DateYetToBeSelected)
						unitStr = 'Please Select A Move-in Date at left';
					else
						unitStr = 'None Available';
				}
				else {
					$('#unitftr_note').fadeIn();
				}

				$('#unitsTable').html(unitStr);
				$("#unitsTable tr").click(function(e) {
					//$(this).children("td").toggleClass("ui-state-active");
					if ($("#" + $(this)[0].id).find("input:radio").length > 0) {
						doUnitSelect($(this)[0].id);
						showGoNextBits();
					}
				});
			}
		}


		function parseBits()//it'd be nice if i took the trouble to do this server side. maybe later.
		{

			// do plans -------------------------------------------------------------------------------
			settings.has2d = false;
			settings.has3d = false;
			//XYZYZ ONESITE
			//var fpobj = internalData.dataobject.rpo_info.floorplans.PropertyWeb_FloorPlans_FloorPlansRPO;
			//CAMDEN
			var fpobj = internalData.dataobject.Floorplans;
			$(fpobj).each(function(index, element) {


				//fix image urls and create array for preloading them
				settings.preloadimages = new Array;
				//XYZYZ ONESITE
				//var thisfpdata = element.Row;
				//CAMDEN
				var thisfpdata = element;

				if (thisfpdata.flpModelPIC) {
					settings.has2d = true;
					thisfpdata.has2d = true;
					var baseurl2d = thisfpdata.flpModelPIC;
					thisfpdata.flpModelPICsmall = mlurl(baseurl2d, thisfpdata.wparameter, fpicFolder(false), false);
					thisfpdata.flpModelPICbig = mlurl(baseurl2d, thisfpdata.wparameter, fpicFolder(false), true);
					settings.preloadimages.push(thisfpdata.flpModelPICsmall);
				} else {
					thisfpdata.has2d = false;
					thisfpdata.flpModelPICsmall = AppRoot() + "Resources/Widgets/FPWidget/css/custom-theme/images/noimage.png";
					thisfpdata.flpModelPICbig = AppRoot() + "Resources/Widgets/FPWidget/css/custom-theme/images/noimage.png";
				}

				if (thisfpdata.fp3dFloorPlan) {
					settings.has3d = true;
					thisfpdata.has3d = true;
					var baseurl3d = thisfpdata.fp3dFloorPlan;
					thisfpdata.fp3dFloorPlansmall = mlurl(baseurl3d, thisfpdata.wparameter, fpicFolder(true), false);
					thisfpdata.fp3dFloorPlanbig = mlurl(baseurl3d, thisfpdata.wparameter, fpicFolder(true), true);
					settings.preloadimages.push(thisfpdata.fp3dFloorPlansmall);
				} else {
					thisfpdata.has3d = false;
					thisfpdata.fp3dFloorPlansmall = AppRoot() + "Resources/Widgets/FPWidget/css/custom-theme/images/noimage.png";
					thisfpdata.fp3dFloorPlanbig = AppRoot() + "Resources/Widgets/FPWidget/css/custom-theme/images/noimage.png";
				}

				preload(settings.preloadimages);
				//end image url fixes

				//parse out bed settings
				//do replaces for 0 to Studio, and bed option appends, like 1 to 1 Bedroom
				var bedopt = thisfpdata.flplBeds;
				if (bedopt == '0' && settings.zeroReplace) { bedopt = settings.zeroReplace; }
				else if (settings.bedAppend && bedopt != '0') { bedopt = bedopt + ' ' + settings.bedAppend; }

				var hasBedopt = false;
				$(internalData.categoryopts).each(function(ind, opt) { if (opt.name == 'b' + thisfpdata.flplBeds) { hasBedopt = true; } });
				if (hasBedopt == false) { internalData.categoryopts[internalData.categoryopts.length] = ({ name: 'b' + thisfpdata.flplBeds, label: bedopt }); }

				//parse out plans
				if (!internalData.plansbycategory['b' + thisfpdata.flplBeds]) { internalData.plansbycategory['b' + thisfpdata.flplBeds] = new Object; }
				internalData.plansbycategory['b' + thisfpdata.flplBeds]['k' + thisfpdata.flplid + "_" + thisfpdata.siteid] = thisfpdata;
				internalData.allplans['k' + thisfpdata.flplid + "_" + thisfpdata.siteid] = thisfpdata;

				//alert(index + ' ' + thisfpdata.flplid + "_" + thisfpdata.siteid + ' ' + thisfpdata.flplBeds);

				if (!internalData.availUnitsByPlan['k' + thisfpdata.flplid + "_" + thisfpdata.siteid]) {
					//alert(index + ' ' + thisfpdata.flplid + "_" + thisfpdata.siteid);
					internalData.availUnitsByPlan['k' + thisfpdata.flplid + "_" + thisfpdata.siteid] = new Array;
				}


				if (!internalData.categorytracker['b' + thisfpdata.flplBeds]) {

					internalData.categorytracker['b' + thisfpdata.flplBeds] = new Object;
					internalData.categorytracker['b' + thisfpdata.flplBeds].currentPlan = ('k' + thisfpdata.flplid + "_" + thisfpdata.siteid);
				}
			});



			// do units -------------------------------------------------------------------------------
			//XYZYX ONESITE
			//var unitobj = internalData.dataobject.rpo_info.availableunits.root.units.unit;
			//CAMDEN
			var unitobj = internalData.dataobject.Units;
			$.each(unitobj, function(index, element) {
				//alert('unitid ' + element.UnitId);
				element.UnitKey = 'k' + element.UnitId + "_" + element.siteid;
				element.FloorplanKey = 'k' + element.FloorPlanID + "_" + element.siteid;
				//element.FloorPlanID = 'k' + element.FloorPlanID + "_" + element.siteid;
				if (internalData.availUnitsByPlan[element.FloorplanKey]) {
					internalData.availUnitsByPlan[element.FloorplanKey].push(element);
				} else { }
			});

		}






		var methods = {
			init: function(wparam, siteid, options) {
				settings = new Object;
				settings.zeroReplace = 'Studio';
				settings.planPrepend = '';
				settings.defaultImage = '3d';
				settings.siteplanURLS = new Object;
				settings.showChartLink = "true";
				settings.MaxNumberOfDays = 120;
				//default settings:

				// leave these be.
				internalData = new Object;
				internalData.siteid = siteid;
				internalData.categoryopts = new Array;
				internalData.plansbycategory = new Object;
				internalData.allplans = new Object;
				internalData.categorytracker = new Object;
				internalData.availUnitsByPlan = new Object;

				internalData.DateYetToBeSelected = true;
				internalData.windowWidth = $(window).width();
				internalData.windowHeight = $(window).height();
				internalData.bigPicW = 1000;
				internalData.bigPicH = 1000;
				if (internalData.windowWidth - 60 < 1000) { internalData.bigPicW = internalData.windowWidth - 60; }
				if (internalData.windowHeight - 60 < 1000) { internalData.bigPicH = internalData.windowHeight - 60; }
				internalData.mlbigparams = ('_wmax' + (internalData.bigPicW) + '_hmax' + (internalData.bigPicH));
				internalData.mlparams = ('_wmax323_hmax304'); //fpimg div width/height
				//XYZYZ ONESITE (w/o best price)
				//var serviceurl = ('http://property.onesite.realpage.com/templates/tedtest/rpoxml4.asp?jsoncallback=?');
				//var params = ("w=" + wparam + "&rpo=homepage,floorplans,availableunits&returntype=jsonp&jspcallback=uawidgetdatacallback");
				//CAMDEN (w/ best price)
				if (options) { $.extend(settings, options); }

				internalData.wparam = wparam;
				internalData.parentdiv = this;

				$(internalData.parentdiv).html(basehtml);
				if (settings.showChartLink.toLowerCase() == "true") {
					$("#unitftr_flexhd").show();
				} else {
					$("#unitftr_flexhd").hide();
				}

				var isdatepickvalid = 0;
				var manualdate = '';
				var manualpicker = '';
				var manualused = 0;
				//var manualsubmit = 0;

				$('#datefield2').focus(function() {
					//alert('Date ' + $('#datefield').val());
					//$('#datefield2').val($('#datefield').val());
					$('#datefield').val($('#datefield2').val());
					//alert($('#datefield').val() + ' ' + $('#datefield2').val());

					//$('#datefield').click();
					$(datePickerJQ).datepicker("show");
					//$('#datefield2').focus();
				});

				$('#datefield2').select(function() {
					//alert('Date select ' + $('#datefield2').val());
					//$(datePickerJQ).datepicker("show");
				});

				$('#datefield2').submit(function() {
					//alert('Date submit ' + $('#datefield2').val());

					$('#datefield').val($('#datefield2').val());

					//alert('Date1 submit ' + $('#datefield').val());
					$(datePickerJQ).select();

				});

				$('#datefield2').change(function() {
					//alert('Date change ' + $('#datefield2').val());
					$('#datefield').val($('#datefield2').val());
					//$(datePickerJQ).datepicker("show");
					$(datePickerJQ).datepicker("refresh");
				});

				$("#datefield2").keyup(function(event) {
					$('#datefield').val($('#datefield2').val());
					//$(datePickerJQ).datepicker("refresh");
				});

				$("#datefield").keyup(function(event) {
					//$('#datefield').val($('#datefield2').val());
					//alert('Date1 keyup ' + $('#datefield').val());
					//$(datePickerJQ).datepicker("refresh");
					manualdate = $('#datefield').val();
					manualused = 1;
					internalData.DateYetToBeSelected = true;

					//$(datePickerJQ).datepicker("refresh")
					$(datePickerJQ).datepicker("show");
					//alert($(datePickerJQ).datepicker("getDate"));
					//manualpicker = $(datePickerJQ).datepicker("getDate");

				});

				$('#datefield').change(function() {
					//alert('Date1 change ' + $('#datefield').val());
					//$('#datefield').val($('#datefield2').val());
					//$(datePickerJQ).datepicker("show");
					//$(datePickerJQ).datepicker("refresh")
				});


				$('#datefield').submit(function() {
					//alert('Date1 submit ' + $('#datefield').val());
					//$('#datefield').val($('#datefield2').val());
					//$(datePickerJQ).datepicker("show");
					//$(datePickerJQ).datepicker("refresh")
					//manualsubmit = 1;
					//$(datePickerJQ).select();
					//onSelect
					//$(datePickerJQ).onSelect();
					$(datePickerJQ).trigger('click');

				});

				$('#datefield').click(function() {

					$(datePickerJQ).datepicker("show");


				});

				function pickerday(event) {

					if (manualused == 1) {
						manualused = 0;
						$(this).parent().trigger('click');
					}
					else {
					}
					manualdate = '';

					//alert('here clickday');
					//$(datePickerJQ).trigger('click');


				}

				var has_pickerdayevent = 0;
				var today = new Date();
				var lastDay = new Date(today.getTime() + settings.MaxNumberOfDays * 24 * 60 * 60 * 1000);
				var dateFieldOptions = {
					create: function(event, ui) {


					},
					beforeShow: function(input, inst) {
						//alert($(this).datepicker("option", "currentText") + ' ' + input);
						if (has_pickerdayevent == 0) {
							$('.ui-state-default').live('click', pickerday);
							has_pickerdayevent = 1;
						}
					},

					beforeShowDay: function(date) {
						//alert($(this).datepicker("option", "currentText") + ' ' + date);
						/*
						for (i = 0; i < events.length; i++) {
						if (String('0'+(date.getMonth()+1)).slice(-2) == events[i].start_date.substr(5,2) && String('0'+date.getDate()).slice(-2) == events[i].start_date.slice(-2)) {
                     
						return [true, 'classname'];
						}
                       
						}
						*/
						return [true, ''];
					},
					onClose: function(dateText, inst) {
						//alert('here ' + dateText);

					},

					onSelect: function(dateText, inst) {
						$('#date_range_invalid').hide();
						//alert('here onselect');

						if (manualdate == '') {
							//alert($('#datefield').val() + ' ' + manualdate

							//alert("new date: " + dateText + " " + $(this).datepicker('getDate'));
							internalData.DateYetToBeSelected = false;

							fetchUnitInfo(dateText);
							manualused = 0;
							$('#datefield2').val($('#datefield').val());
							$(datePickerJQ).datepicker("hide");
						}
						else {


							var isDate = false;
							try {
								//alert('here1');
								//$.datepicker.parseDate('mm/dd/yyyy', manualdate, null);
								//$(this).datepicker.parseDate('mm/dd/yyyy', manualdate);
								manualdate = new Date(manualdate);
								pickerdate = new Date($('#datefield').val());

								isDate = true;
								//alert('here2 picker ' + pickerdate + ' manual ' + manualdate);

							}
							catch (e) {

							}

							//Date needed should not be less than today.
							//You are searching outside our availability timeframe. Please change your 'Date Needed' to today's date for current pricing and availability.

							if (isDate == true) {

								if (manualdate.toDateString() == pickerdate.toDateString()) {
									//alert("new date: " + dateText + " " + $(this).datepicker('getDate'));
									internalData.DateYetToBeSelected = false;
									//alert($(this).datepicker("option", "currentText"));
									fetchUnitInfo(dateText);
									manualused = 0;
									$(datePickerJQ).datepicker("hide");
									$('#datefield2').val($('#datefield').val());

								}
								else {
									//alert('Date not within range!  Date was set to ' + $('#datefield').val() + '. ');
									//alert($('#datefield').val() + ' ' + manualdate
									//$('#datefield').val('');
									internalData.DateYetToBeSelected = true;
									manualdate = '';
									$('#datefield').val('');
									$('#datefield').focus();
									$('#date_range_invalid').show();
									$('#fpw_div_FeaturedApts').hide();
									$('#unitsFooter').hide();
									$('#unitftr_note').hide();
									$('#unitsTable').html('');
									$('#unitsTable').append('There was an error: ');
									$('#unitsTable').append('<span class="error"/>You are searching outside our availability timeframe. Please change your \'Date Needed\' to today\'s date for current pricing and availability.  <br />Date was reset.</span>');
									$('#unitsTable').append('<br />Please pick a date to try again.');
								}
							}
							else {
								//alert('Date not within range!  Date was set to ' + $('#datefield').val() + '. ');
								//alert($('#datefield').val() + ' ' + manualdate
								//$('#datefield').val('');
								internalData.DateYetToBeSelected = true;
								manualdate = '';
								$('#datefield').val('');
								$('#datefield').focus();
								$('#date_range_invalid').show();
								$('#fpw_div_FeaturedApts').hide();
								$('#unitsFooter').hide();
								$('#unitftr_note').hide();
								$('#unitsTable').html('');
								$('#unitsTable').append('There was an error: ');
								$('#unitsTable').append($('<span class="error"/></span>').text('You are searching outside our availability timeframe. Please change your \'Date Needed\' to today\'s date for current pricing and availability.  <br />Date was reset.'));
								$('#unitsTable').append('<br />Please pick a date to try again.');
							}

						}

					}
				}
				//in case you want to turn off min/max date or other options options, I set them here
				dateFieldOptions = $.extend(dateFieldOptions, { "minDate": today, "maxDate": lastDay });
				$(datePickerJQ).datepicker(dateFieldOptions);
				$("#btnCal").click(function(e) {
					//$('#datefield2').show();
					//$('#datefield').hide();
					$(datePickerJQ).datepicker("show");
				});

				//ONESITE
				//$.getJSON(serviceurl, params);
				//CAMDEN
				var serviceurl = AppRoot() + "Services/SearchService.svc/jsonp/Floorplans";
				var params = "siteid=" + internalData.siteid;
				$.ajax({
					url: serviceurl + "?" + params,
					dataType: 'json',
					cache: false,
					success: uawidgetdatacallbackFirstLoad
				});
			},
			currentPlan: function() {
				return settings.currentplan;
			}
		}

		$.fn.camden_uawidget = function(method) {
			// Method calling logic
			if (methods[method]) {
				return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
			} else {
				$.error('Method ' + method + ' does not exist on jQuery.camden_uawidget'); // ??
			}
		}



		//------------------------------------------------------------
		//
		//	SOME EVENT HANDLERS
		//
		//------------------------------------------------------------

		// Image Enlargement
		function enlargeimage(picurl) {
			if ($('#uaw_bigimagepane').length == 0) {
				var bipstr = ('<div id="uaw_bigimagepane"');
				bipstr += (' style="width:100%; height:100%; position:fixed;');
				bipstr += (' top:0px; left:0px; visibility:visible; z-index:999; background-image:url(' + AppRoot() + 'Resources/Widgets/FPWidget/css/custom-theme/images/black_40.png); background-repeat:repeat;"');
				bipstr += ('</div>');
				$('body').append(bipstr);
				$('#uaw_bigimagepane').click(function() { closeImage(); });
			}
			$('#uaw_bigimagepane').html('')
			$('#uaw_bigimagepane').show('scale', 'fast', function() { addImage(picurl) })
		}

		function addImage(picurl) {

			var imgURL = ('<div id="uaw_imgbig" style="margin-top:20px; text-align:center;"><div style="margin:auto; width:680px; background-color:white; cursor:pointer; text-align:center;"><div style="position:absolute; width:650px; text-align:right; padding-right:10px;">Close[X]</div><img id="img_big" src="' + picurl + '" style="display:none; background-color:White; padding:5px; padding-top:35px;" /></div></div>');

			$('#uaw_bigimagepane').html(imgURL);
			$('#img_big').load(function() { $('#img_big').fadeIn("slow"); });
			//
		}

		function closeImage() {
			//'blind', 'clip', 'drop', 'explode', 'fold', 'puff', 'slide', 'scale', 'size', 'pulsate'. 
			$('#uaw_imgbig').fadeOut('medium', function() { closeImagePartDeux(); });
		}
		function closeImagePartDeux() {
			$('#uaw_imgbig').css({ 'visibility': 'hidden' });
			$('#uaw_bigimagepane').hide('scale', 'slow');
		}


		//------------------------------------------------------------
		//
		//	HELPERS
		//
		//------------------------------------------------------------

		// Image centerer
		function centerimage(container) {
			$(container).find('img').each(function(index, content) {
				var containerW = $(container).width();
				var containerH = $(container).height();
				var contentW = $(content).width();
				var contentH = $(content).height();
				var newX = (containerW - contentW) * 0.5;
				var newY = (containerH - contentH) * 0.5;
				$(content).css('position', 'relative');
				$(content).css('left', newX);
				$(content).css('top', newY);
			});
		}

		// Image Pre-loader
		function preload(arrayOfImages) {
			$(arrayOfImages).each(function() { $('<img/>')[0].src = this; });
		}

		// Media Library URL builder
		var ReIsPropUrl = /([^\/\.]+)(\.[^\/\.]+)$/i;
		var ReGetServer = /^https?\:\/\/([^\/]+)/i;
		var RePrefixDigits = /^[0-9]{4}(.+)/;
		function stripPRefixDigits(filename) {
			var result = RePrefixDigits.exec(filename);
			if (result)
				return result[1];
			else
				return filename;
		}
		function fpicFolder(is3d) {
			var picFolder = ('/floorplans/');
			if (is3d) { picFolder = ('/3dfloorplans/'); }
			return picFolder;
		}
		function MLDomain(s_servername) {
			if (s_servername == null) s_servername = "";
			s_servername = s_servername.toLowerCase();
			var MLDOMAIN = "crossfiremedia.realpage.com";
			var retval = MLDOMAIN;

			if (s_servername == "" || (/^property\./).test(s_servername)) {
				retval = MLDOMAIN;
			} else if ((/^unit\./).test(s_servername)) {
				retval = "unit." + MLDOMAIN;
			} else if ((/^pct\./).test(s_servername)) {
				retval = "pct." + MLDOMAIN;
			} else if ((/^sat\./).test(s_servername)) {
				retval = "sat." + MLDOMAIN;
			} else if ((/^sit\./).test(s_servername)) {
				retval = "sit." + MLDOMAIN;
			} else if ((/^ocrt\./).test(s_servername)) {
				retval = "ocrt." + MLDOMAIN;
			}
			return retval;
		}
		function mlurl(name, wparam, picFolder, isBig) {
			var result = ReIsPropUrl.exec(name);
			var resultReGetServer = ReGetServer.exec(name);
			var sname = resultReGetServer[1];
			var myMLDomain = MLDomain(sname);
			var basename = stripPRefixDigits(result[1]);
			var ext = result[2];
			var mlparams = "";
			if (isBig == undefined) {
				mlparams = internalData.mlparams;
			}
			else if (isBig) {
				mlparams = internalData.mlbigparams;
			}
			else {
				mlparams = internalData.mlparams;
			}
			if (result) {
				var imgurl = ('http://' + myMLDomain + '/' + wparam + picFolder + basename + mlparams + ext);
			}
			return imgurl;
		}

		//------------------------------------------------------------
		//
		//	BUILDER BITS
		//
		//------------------------------------------------------------

		// Base html shtuff to add to div on init.
		var basehtml = '<div id="fpwidget">';
		basehtml += '<div id="fpLeftColumn">';
		basehtml += '<span class="read">Select Bedroom:</span><div id="bedsselect"></div>';
		basehtml += '<span class="read">Select Move-in Date:</span><div id="datepicker"><input type="text" id="datefield2" class="fixdatepick" tabindex="10" style="z-index:55;" /><input type="text" id="datefield" class="fixdatepick" tabindex="10" style="position:absolute; z-index:5; left:0px;" /><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/icon_calendar.png" id="btnCal" /><div id="date_range_invalid" style="display:none;">Date was invalid.</div></div>';
		basehtml += '<span class="read">Select Floor Plan:</span><div id="fpselector">';
		basehtml += '<div id="fpsright">';
		basehtml += '<div id="fpviews"><p id="views"><span class="fpimg_link" id="view3d">3D View</span><span class="sep1">&nbsp;|&nbsp;</span><span class="fpimg_link" id="view2d">2D View</span></p></div>';
		basehtml += '<div id="fpimg">(image area)</div>';
		basehtml += '<div id="fpbig"><p id="enlargep"><span id="enlarge" class="fpimg_link" >Enlarge +</span></p></div></div>';
		basehtml += '<div id="fpsleft">';
		basehtml += '<div id="btngreenup" class="btngreen"><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/btn_greenbar_up.png"  /></div>';
		basehtml += '<div id="fplist"><div id="movewrap"></div></div>';
		basehtml += '<div id="btngreendown" class="btngreen"><img src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/btn_greenbar_down.png"  /></div>';
		basehtml += '</div></div></div>';
		basehtml += '<div id="fpRightColumn">';
		basehtml += '<span class="read">Select Apartment:</span><p class="fpdet_links" style="float:right; margin-top:15px;"><a class="fpdet_ol fpdet_click" href="#">Already registered? Click here.</a></p><div id="unitsTable">'; //Already registered? Click here.
		basehtml += '</div>';
		basehtml += '<div id="unitftr_note">*Price does not include cable tv or trash pick-up</div>';
		basehtml += '<div id="unitsFooter">';
		basehtml += '<div id="unitftr_next"><img id="btn_next" src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/btn_next.png" alt="Next" /></div>';
		basehtml += '<div id="unitftr_flexhd"><img id="flexhed" src="' + AppRoot() + 'Resources/Widgets/FPWidget/images/hdr_areyouflexible.png" alt="Are you flexible?" /><br/>View more leasing and pricing options';
		basehtml += '</div>';
		basehtml += '</div>';
		basehtml += '<div id="fpw_div_FeaturedApts">*Featured Apartments</div>';
		basehtml += '<div id="unitftr_note">*Price does not include cable tv or trash pick-up</div>';
		basehtml += '</div></div>';


		//loading1.gif
		//AppRoot() + 'Resources/Widgets/FPWidget/images/loading1.gif"


	})(jQuery);
});
// JavaScript Document

