
Object.extend = /**
 * @param object target
 * @param extend object soruce
 * @return
 * 
 * This object allows you to extend the methods and variables to a target object 
 */
function(object, extend){ for(property in extend)object[property]=extend[property]; };

var searchFormDateToggle = 0;
var searchFormDate = false;
function setDateFromAjaxCal(Y,m,d){
	
	oDate = new Date();
	oDate.setFullYear(Y,parseInt(m)-1,d);
	var setType = 'arrival';
	if(!searchFormDate){
		setType = 'arrival';
	}else if(oDate < searchFormDate){
		var tmp_date = new Date(searchFormDate.getTime());
		setType = "switch";
	}else{
		var tmp_date = new Date(searchFormDate.getTime());
		setType = 'departure';
	}
	
	d = (String(d).length < 2) ? "0"+d : d;
	m = (String(m).length < 2) ? "0"+m : m;
	var yearMonth =  Y + "-"+m;
	
	searchFormDate = oDate;
	switch(setType){ 
		case 'arrival':
			$("#"+searchForm.selArrDay).val(d);
			$("#"+searchForm.selArrYear).val(yearMonth);
			$("#"+searchForm.selArrDay).trigger('click');
			$("#"+searchForm.selArrYear).trigger('click');
			break;
		case 'departure':
			$("#"+searchForm.selDepDay).val(d);
			$("#"+searchForm.selDepYear).val(yearMonth);
			$("#"+searchForm.selDepDay).trigger('click');
			$("#"+searchForm.selDepYear).trigger('click');
			searchFormDate = false;
			break;
		case 'switch':
			tmp_d = tmp_date.getDate();
			tmp_m = tmp_date.getMonth()+1;
			tmp_Y = tmp_date.getFullYear();
			
			tmp_d = (String(tmp_d).length < 2) ? "0"+tmp_d : tmp_d;
			tmp_m = (String(tmp_m).length < 2) ? "0"+tmp_m : tmp_m;
			var tmp_yearMonth =  tmp_Y + "-"+tmp_m;
			
			$("#"+searchForm.selArrDay).val(d);
			$("#"+searchForm.selArrYear).val(yearMonth);
			$("#"+searchForm.selArrDay).trigger('click');
			$("#"+searchForm.selArrYear).trigger('click');
			
			$("#"+searchForm.selDepDay).val(tmp_d);
			$("#"+searchForm.selDepYear).val(tmp_yearMonth);
			$("#"+searchForm.selDepDay).trigger('click');
			$("#"+searchForm.selDepYear).trigger('click');
			searchFormDate = false;
			
			break;
	}
	
	
/*	
	if(searchFormDateToggle == 0){
		$("#"+searchForm.selArrDay).val(d);
		$("#"+searchForm.selArrYear).val(yearMonth);
		$("#"+searchForm.selArrDay).trigger('click');
		$("#"+searchForm.selArrYear).trigger('click');
		searchFormDateToggle = 1;
	}else{
		$("#"+searchForm.selDepDay).val(d);
		$("#"+searchForm.selDepYear).val(yearMonth);
		$("#"+searchForm.selDepDay).trigger('click');
		$("#"+searchForm.selDepYear).trigger('click');
		searchFormDateToggle = 0;
	}
	
	*/
};
var displayWin;
function popUp(url,width,height,sroll){
	
	var query="";
	var flag=0;
	if(sroll=="yes"){query=",resizable=yes,scrollbars=yes,outerHeight="+height+",outerWidth="+width;}

	offsetX = (screen.width - width)/2;
	if(offsetX<0){ offsetX = 10; }

	offsetY = (screen.height - height)/2;
	if(offsetY<0){ offsetY = 10; }

	if(displayWin != null){
		displayWin.close();
		displayWin = window.open(url,"win","status=no,width="+width+",height="+height+",top="+offsetY+",left="+offsetX+query);
	}else{
		displayWin = window.open(url,"win2","status=no,width="+width+",height="+height+",top="+offsetY+",left="+offsetX+query);

	}

}

/**
 * @param opts object format {x:y}
 * @param obj target object
 * @return
 * 
 * This object allows you to:
 * 1)	pass "options" in the contruct and populate any matching variables in the target object
 * 2)	Create a string representation of an object {x:y}
 * 3) 	Populate a selectbox from an XML feed
 * 4) 	Reset a select box value set 
 * 
 */
function baseOptions(opts, obj){
	this.opts = opts;
	this.obj = obj;
	this.setOpts = function(opts, obj){
		for(i in opts){
//			if(typeof obj[i] != 'undefined'){
			if(i in obj){
				obj[i] = opts[i];
			}
		}
	};
	
	// Create Param string
	this.createParamsString = function (params){
		var strParams = "";
		for(i in params){
			strParams += "&"+i+"="+params[i];
		}
		
		return strParams;
	};
	
	 // Popualate Select
	// Note this function reads XML with Attibutese note nodes
	this.doPopulateSelectXmlAttr = function (el,data,fldCode, fldDescr,txt,selElValue){
		
		var domEl = $("#"+el).get(0);
		domEl.options.length	= 0;	
		domEl.options[domEl.options.length]	= new Option(txt,'');	
		if(data && data != null && data != ''){
			$(data).each(function () {
				var val = $(this).attr(fldCode);
				var text = $(this).attr(fldDescr);
				domEl.options[domEl.options.length]	= new Option(text,val);			
			});
			
			$("#"+el).val(selElValue);
		}
	};
	
	this.doPopulateSelectJson = function(elId,data,optValueName,optValueTxt,selectedValue,txtReset){
		 this.doResetSelect(elId,txtReset);
		var domEl = $("#"+elId).get(0);
		
		if(data && data != null && data != ''){
			
			for(i in data){
				var val = data[i][optValueName];
				var text = data[i][optValueTxt];
				domEl.options[domEl.options.length]	= new Option(text,val);	
			}
			if(selectedValue){
//				$("#"+elId).trigger('change');
				$("#"+elId).val(selectedValue);
			}
			
		}
		
	};
	
	this.doResetSelect = function (el,txt){
		var domEl = $("#"+el).get(0);
		txt = (txt == undefined) ? '' : txt;
		domEl.options.length	= 0;	
		domEl.options[domEl.options.length]	= new Option(txt,'');
	};
}
