var saveStatus = 0;
//*********************HELPER FUNCTIONS**********************************************************/
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function is_array(input){
	return typeof(input)=='object'&&(input instanceof Array);
}
function loadPreview(url){
	popupPage(url, 'TourPage', 'titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=800,height=600');
	return;
}
function mobileTour(url){
	popupPage('mobile_tour.htm?url=' + url, 'MobileTourPage', 'titlebar=no,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=321,height=600');
	return;
}
function checkForSearch(event){
	if(event.keyCode == 13){
		findTour();
	}
}
function findTour(){
	var id = processNum($("#findTourID").val());
	if(id){
		var url = "/tours/tour.htm?id="  + id;
		loadPreview(url);
	}
}
function formatPhone(phoneNumber,check){
	var tempPhone = phoneNumber.replace(/[^0-9]/g,"");
	if(tempPhone.substring(0,1)==1){
		tempPhone = tempPhone.substring(1);
	}
	var length = tempPhone.length;
	//tempPhone = tempPhone.replace(/[xX]/g,"x");

	var newPhone = tempPhone;
	if(length == 7){
		newPhone = newPhone.substring(0,3) + '-' + newPhone.substring(3,7);
	}else if(length > 7){
		newPhone = '(' + newPhone.substring(0,3) + ') ' + newPhone.substring(3,6) + '-' + newPhone.substring(6,10);
	}
	
	if(length > 10){
		newPhone += ' x' +  tempPhone.substring(10)
	}
	if(check){
		if(length >= 7){
			return newPhone;
		}else{
			createDialogBox('Error','Invalid Phone Number','The phone number your entered was incorrect. A phone number must be a valid 10 digit number.');
			return '';
		}
	}else{
		return newPhone;
	}
}
function popupPage(url, name, widgets){
	if(typeof popupWin == 'object'){
		popupWin.close();
	}
	popupWin = window.open(url, name, widgets);
	popupWin.opener.top.name = "opener";
	popupWin.focus();
}

function selectBoxes(FormName, FieldName, CheckValue){
	if(!document.forms[FormName]){
		return;
	}

	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	if(!objCheckBoxes){
		return;
	}
	var countCheckBoxes = objCheckBoxes.length;
	
	if(!countCheckBoxes){
		if(objCheckBoxes.checked==false){
			objCheckBoxes.checked = true;
		}else{
			objCheckBoxes.checked = false;
		}
	}else{
		if(CheckValue=='auto'){
			if(objCheckBoxes[0].checked==true){
				CheckValue = false;
			}else{
				CheckValue = true;
			}
		}
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++){
			objCheckBoxes[i].checked = CheckValue;
		}
	}
	markChecked();
}
function selectAllOptions(FormName, FieldName){
	if(!document.forms[FormName])
		return;
	var field = document.forms[FormName].elements[FieldName];
	if(!field){ return; }
	var options = field.options;
	if(options[0].selected==true){
		var status=false;
	}else{
		var status=true;
	}
	for(var i=0; i< options.length; i++){
		options[i].selected = status;
	}
}

function countChar(field,max){
	var text = $(field).val();
	if(text.length>max){
		text = text.substring(0,max); 
		$(field).val(text);
	}
	$("#charCount").html(parseInt(max)-parseInt(text.length));
}

function processDecimal(number,spaces){
	number = number.toString();
	var negitive = false;
	if(number.search('-')>-1){
		negitive = true;
	}
	number = number.replace(/[^0-9.]/g,"");
	if(number==''){
		number = 0;
	}
	number = parseFloat(number);
	number = number.toFixed(spaces);
	if(negitive){
		number = '-' + number;
	}
	return number;
}

//process number forom form field
function processNum(number){
	var negitive = false;
	number = number.toString();
	if(number.search('-')>-1){
		negitive = true;
	}
	number = number.replace(/[^0-9.]/g,"");
	if(number.length>0){
		number = parseFloat(number);
		number = Math.round(number);
	}else{
		number=0;
	}
	if(negitive){
		number = '-' + number;
	}
	return parseInt(number);
}
//add commas to a number
function addCommas(nStr){
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

//global function that checks for required fields
function checkForm(formName){
	var checkedFields = new Array();
	var errorCount = 0;
	var minCharError = 0;
	//loop through all fields  of the form provided and check for required fields
	var fields = document.forms[formName].elements;
	for(var i=0; i<fields.length; i++){
		//skip over disabled fields
		if($(fields[i]).attr("disabled")==true){
			continue;
		}
		
		//make sure we haven't already check this field
		if(jQuery.inArray(fields[i].name, checkedFields)>-1){
			continue;
		}else{
			//put the name in the check fields array
			checkedFields.push(fields[i].name);
		}
		
		//only check for required fields
		if( $(fields[i]).hasClass('required') ){
			if(fields[i].type=='checkbox' || fields[i].type=='radio'){
				//make sure at least one is selected
				var checkFound=false;
				var boxes = document.forms[formName].elements[fields[i].name];
				if(boxes.length){
					for(var j=0; j<boxes.length; j++){
						if(boxes[j].checked==true){
							checkFound=true;
							break;
						}
					}
					if(checkFound==false){
						for(var j=0; j<boxes.length; j++){
							$(boxes[j]).parent().addClass("formCheckboxError");
						}
					}
				}else{
					if(boxes.checked==true){
						checkFound=true;
					}else{
						$(boxes).parent().addClass("formCheckboxError");
					}
				}
				if(checkFound==false){
					errorCount++;
				}
			}else if(fields[i].type=='select-multiple'){
				if(fields[i].value==''){
					errorCount++;
					$(fields[i]).addClass('fieldError');
				}
			}else{
				if( $(fields[i]).attr("requirements") ){
					var require = $(fields[i]).attr("requirements").split("|");
				}
				if(require){
					if(require[0]){
						if($(fields[i]).attr("value").length < require[0]){
							if($(fields[i]).attr("value")==''){
								errorCount++;
							}else{
								minCharError++;
							}
							//$(fields[i]).removeClass('fieldInput');
							$(fields[i]).addClass('fieldError');
						}
					}
					if(require[1]){
						//check for specific types here
					}
				}else{
					if($(fields[i]).attr("value")==''){
						errorCount++;
						//$(fields[i]).removeClass('fieldInput');
						$(fields[i]).addClass('fieldError');
					}
				}
			}
		}
	}
	if(errorCount>0){
		createDialogBox('Error','Missing Required Fields','All fields marked in red must be completed to continue.');
		return false;
	}else if(minCharError>0){
		createDialogBox('Error','Required Fields Incomplete','All fields marked in red do not meet their minimum character lengths.');
		return false;
	}else{
		return true;
	}
}

//************************ADVANCED INTERFACE FUNCTIONS*************************************/
function createDialogBox(type,title,message,myButtons){
	if($('#dialog').length>0){
		closeDialog();
	}
	
	if(myButtons==false || !myButtons){
		myButtons = {
			'Ok': function() {
				closeDialog();
			}
		}
	}
	var myClass = type + 'Dialog';

	if($("#dimmer").length==0){
		$("body").append('<div id="dimmer"></div>');
	}
	
	$("body").append('<div id="dialog" class="sf">' + message + '</div>');
	$("#dialog").dialog({
		dialogClass: myClass,
		bgiframe: false,
		resizable: true,
		draggable: true,
		width: 450,
		minWidth: 350,
		maxWidth: 600,
		minHeight: 120,
		maxHeight: 300,
		modal: false,
		title: title,
		position: 'center',
		zIndex: 100000,
		overlay: false,
		buttons: myButtons,
		close: function(){ closeDialog(); }
	});
	
	$('.ui-dialog,button').click(function(event){
		event.stopPropagation();
	});
}
function closeDialog(){
	//hide all select boxes
	var fields = $("select").css("visibility","visible");
	$("#dialog").remove();
	$("#dimmer").remove();
	return;
}
var loadBarTimeout;
function createLoadingBar(message){
	clearTimeout(loadBarTimeout);
	if($("#LoadingBar").length>0){
		$("#LoadingMessage").html(message);
	}else{
		if(!message){
			message = 'Loading...';
		}
		if($("#dimmer").length==0){
			$("body").append('<div id="dimmer"></div>');
		}
		
		$("body").prepend('<div id="LoadingBar"><img src="' + sitebase + 'images/loading.gif" align="top" /><span id="LoadingMessage">' + message + '</span></div>');
		if($("#outer").length>0){
			var x = Math.round( ($("#outer").outerWidth() - $("#LoadingBar").outerWidth() )/2);
			var y = Math.round( ($("#outer").outerHeight() - $("#LoadingBar").outerHeight() )/2);
		}else{
			var x = Math.round( ($("body").outerWidth() - $("#LoadingBar").outerWidth() )/2);
			var y = Math.round( ($("body").outerHeight() - $("#LoadingBar").outerHeight() )/2);
		}
		$("#LoadingBar").css("left",x + "px");
		$("#LoadingBar").css("top",y + "px");
	}
	message = null;
	loadBarTimeout = setTimeout('showLoadingError();',20000);	//if 15 secs have passed check to see if ajax is still running
}
function clearLoadBar(){
	clearTimeout(loadBarTimeout);
	$('#LoadingBar').remove();
	if($("#dialog").length==0){
		$("#dimmer").remove();
	}
}

//******************************FORM SAVE PROTECTION*********************************************************/
//the unload event handler
window.onbeforeunload = confirmPageExit;
function confirmPageExit(){
    if(saveStatus == 1){
        return "You have unsaved changes on this page are you sure you want to continue?";
    }
}

function protectChange(){
	saveStatus = 1;
	if( $("#unSaved").text() == "" ){
		$("#unSaved").text('Unsaved Changes!');
		$("#unSaved").fadeIn("slow");
	}
	$(".successBlock").remove();
	return;
}

function clearSave(){
	saveStatus = 0;
	$("#unSaved").fadeOut("normal",function(){
		$("#unSaved").empty();
	});
}

//*********************DISPLAY SETUP FUNCTIONS**********************************************************/

function setupSpecialFields(){
	//numbers
	$(".formNumber").change(function(){
		if($(this).val()!=''){
			var value = $(this).val();
			value = value.replace('k','000');
			value = value.replace('K','000');
			$(this).val( addCommas(processNum( value )) );
		}
	});
	//decimals
	$(".formDecimal").change(function(){
		if($(this).val()!=''){
			$(this).val( addCommas(processDecimal( $(this).val(),2 )) );
		}
	});
	//phones
	$(".phone").change(function(){
		if($(this).hasClass("required")){
			$(this).attr("value",formatPhone( $(this).attr("value"),true ) );
		}else{
			$(this).attr("value",formatPhone( $(this).attr("value"),false ) );
		}
	});


}

function formFieldFocus(field){
	$(field).removeClass("fieldError");
	$(field).removeClass("fieldInput");
	$(field).addClass("fieldFocus");
}

function formFieldBlur(field){
	$(field).removeClass("fieldFocus");
	$(field).addClass("fieldInput");
}

function clearCheckBoxError(field){
	var boxes = $("input[name='" + field.name + "']");
	if(boxes.length){
		for(var j=0; j<boxes.length; j++){
			$(boxes[j]).parent().removeClass("fieldError").removeClass("formCheckboxError");
		}
	}
}

function setupFormStyles(){
	$("textarea," + ":text," + ":password").addClass("fieldInput").focusin( function(){ formFieldFocus(this) }).focusout( function(){ formFieldBlur(this) });
	$("select").addClass("fieldInput").focusout( function(){ $(this).removeClass("fieldError") });
	$("textarea[disabled=true]," + "select[disabled=true]," + ":text[disabled=true]," + ":password[disabled=true]," + ":text[Locked=true]").unbind().removeClass("fieldInput").addClass("fieldDisabled");
	$(":submit," + ":button," + ":file," + ":reset").addClass("button");
	$(":radio").addClass("radio").click( function(){ clearCheckBoxError(this); } );
	$(":checkbox").addClass("myCheckbox").click( function(){ clearCheckBoxError(this); } );
}

function createColorList(){
	//color the colorList
	$(".colorList").each(function(index){
		if($(this).find('th').length>0){
			var newClass = 'odd';
			var lastClass = 'even';
		}else{
			var newClass = 'even';
			var lastClass = 'odd';
		}
		
		$(this).children().children().each(function(index, element){
			if( $(element).css("display") != 'none' ){
				var temp = newClass;
				newClass = lastClass;
				lastClass = temp;
			}
			$(element).removeClass(newClass).removeClass(lastClass).addClass(newClass);
		});
	});
}

function setupTabs(){
	return;
	$(".tab").click(function(){
		$(".tabActive").removeClass("tabActive");
		$(this).addClass("tabActive");
		$(".tabActiveBody").removeClass("tabActiveBody");
		var tabName = $(this).attr("name");
		$("#" + tabName).addClass("tabActiveBody");
	});
}

function pageSetup(){
	//disable enter
	$('.disableEnter :text').unbind("keypress").keypress(function(event){ 
		if(event.keyCode == 13){
			return false;
		}
		return true;
	});
	//setup datepicker
	$(".formDate").datepicker('destroy');
	
	//add the date picker to the input fields
	$(".formDate").datepicker({ 
		yearRange: '',
		changeMonth: true,
		changeYear: true,
		//showOtherMonths: true,
		numberOfMonths: [1,1],
		stepMonths: 1,
	    dateFormat: "mm/dd/yy", 
		//showAnim: 'pulse',
		duration: 'fast',
		closeText: 'Close',
		//gotoCurrent: true,
		//currentText: 'Today',
	    showOn: "both", 
		showButtonPanel: true,
	    buttonImage: sitebase  + "images/icons/calendar.png", 
	    buttonImageOnly: true 
	}).attr("readonly", "readonly");
	//set form styles
	setupFormStyles();
	//colist tables
	createColorList();
	//setup the tabs
	setupTabs();
	//setup form numbers and decimals
	setupSpecialFields();
	//protect changes
	$(".saveProtect :input").change(protectChange);
}

//*****************************************************************************************************************/

//when doc is ready run page functions.
$(document).ready(function(){
	//round the corners
	$("#headerWrapper").corner("top 6px");
	$("#footer").corner("bottom 6px");
	$("#menuWrapper").corner("6px");
	$(".menuButton a").corner("6px");
	$("#menuLeft").corner("right 6px");
	$("#menuRight").corner("left 6px");
	$(".rounded,.homeBoxTitle").corner("6px;");
	$(".tab a").corner("top 6px;");
	$(".round").corner("8px;");
	


	//display errors or success notifications
	if( $("#SaveNotice").length>0 ){
		var saveText = $("#SaveNotice").html();
		confirmSave(saveText);
	}
	//page setup
	pageSetup();
	
	//error notice
	if($("#topError").length>0){
		createDialogBox('Error','Errors Found',$("#topError").html());
		$("#topError").remove();
	}
});

