//global vars
var saveStatus = 0;
var mouseX = 0;
var mouseY = 0;

//*********************************HELPER FUNCTIONS******************************************************/
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function is_array(input){
	return typeof(input)=='object'&&(input instanceof Array);
}

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;
		}
	}
}
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;
	}
}

//stop return key on forms
function stopRKey(evt) {
	var evt  = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text")) { return false; }
}

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){
	number = number.toString();
	number = number.replace(/[^0-9.]/g,"");
	var number2 = number.replace(/[^0-9]/g,"");
	if(number!=number2){
		var temp = number.split('.');
		var decimal = '.' + '' + temp[1];
		var digit = temp[0];
		if(digit==''){
			digit='0';
		}
		number = digit + decimal
	}
	if(!number || number == 'NaN'){
		number=0;
	}
	return 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;
}

//******************************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");
	}
	return;
}

function clearSave(){
	saveStatus = 0;
	$("#unSaved").fadeOut("normal",function(){
		$("#unSaved").empty();
	});
}


//*****************************FORM CHECKING AND MANIPULATING FUNCTIONS****************************************************/
//global function that checks for required fields
function checkForm(formName){
	var errorCount = 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++){
		if($(fields[i]).attr("disabled")==true){
			continue;
		}
		
	
		if( $(fields[i]).hasClass('required') ){
			
			if(fields[i].type=='checkbox'){
				//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]){
							errorCount++;
							//$(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','Required Fields Incomplete','Please complete the required fields marked in red.');
		return false;
	}else{
		return true;
	}
}

function formFieldFocus(field){
	$(field).removeClass("fieldError");
	$(field).removeClass("fieldInput");
	$(field).addClass("fieldFocus");
}

function formFieldBlur(field){
	$(field).removeClass("fieldFocus");
	$(field).addClass("fieldInput");
}

function setupFormStyles(){
	$("textarea,:text,:password").addClass("fieldInput").focus( function(){ formFieldFocus(this) }).blur( function(){ formFieldBlur(this) });
	$("select").addClass("fieldInput").blur( function(){ $(this).removeClass("fieldError") });
	$("textarea[disabled=true],select[disabled=true],:text[disabled=true],:password[disabled=true]").unbind().removeClass("fieldInput").addClass("fieldDisabled");
	$(":submit,:button,:file,:reset").addClass("button");
	$(":radio").addClass("radio");
	$(":checkbox").addClass("myCheckbox");
}

function setupDatePicker(){
	//first destroy all previos date pickers
	$(".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: "/images/calendar.gif", 
	    buttonImageOnly: true 
	}).attr("readonly", "readonly").css("width","75px");
}

//*****************************************NOTIFICATIONS AND LOADING BAR**************************************************/
function errorNotification(message){
	createDialogBox('Error','Errors Were Found',message);	
}
function confirmSave(message){
	createDialogBox('Success','Information Saved',message);
}

function createDialogBox(type,title,message,myButtons){
	if(document.getElementById('dialog')){
		return;
	}
	
	if(myButtons==false || !myButtons){
		myButtons = {
			'Ok': function() {
				closeDialog();
			}
		}
	}
	var myClass = type + 'Dialog';
	
	$("#dimmer").remove();
	$("body").append('<div id="dimmer"></div>');
	$("body").append('<div id="dialog">' + message + '</div>');
	$("#dialog").dialog({
		dialogClass: myClass,
		bgiframe: false,
		resizable: true,
		draggable: true,
		width: 400,
		minWidth: 350,
		maxWidth: 550,
		minHeight: 120,
		maxHeight: 300,
		modal: false,
		title: title,
		position: 'center',
		zIndex: 100000,
		overlay: false,
		buttons: myButtons,
		close: function(){ closeDialog(); }
	});
}
function closeDialog(){
	//hide all select boxes
	var fields = $("select").css("visibility","visible");
	$("#dialog").remove();
	$("#dimmer").remove();
	return true;
}


function createLoadingBar(message,hide){
	if(!message){
		message = 'Loading...';
	}
	if(hide){
		$("body").append('<div id="dimmer"></div>');
	}
	$("body").append('<div id="LoadingBar"><img src="/images/loading.gif" align="top" /><span id="LoadingMessage">' + message + '</span></div>');
	var x = Math.round( ($(window).width() - $("#LoadingBar").outerWidth() )/2);
	var y = Math.round( ($(window).height() - $("#LoadingBar").outerHeight() )/2);
	$("#LoadingBar").css("left",x + "px");
	$("#LoadingBar").css("top",y + "px");
	
}
//loading bar
function clearLoadBar(){
	$('#LoadingBar').remove();
	$('#dimmer').remove();
}

//**********************************PAGE SETUP THE TRIGGER FOR MOST GLOBAL FUNCTIONS*********************************************
function pageSetup(){
	//save status class handler
	var saveElements = 	$(".saveProtect :input").change(function(){ protectChange(); });

	//stop the return key
	/** document.onkeypress = stopRKey; */

	//set form styles
	setupFormStyles();

	//setup the date pickers
	setupDatePicker();

	//add the formatPhone function to all phone classes
	$(".phone").change(function(){
		if($(this).hasClass("required")){
			$(this).attr("value",formatPhone( $(this).attr("value"),true ) );
		}else{
			$(this).attr("value",formatPhone( $(this).attr("value"),false ) );
		}
	});
	
	//color the colorList
	$(".colorList").each(function(index){
		if($(this).find('th').length>0){
			var i=1;
			$(this).children().children().each(function(index, element){
				if(i%2==0){
					$(element).removeClass('odd').removeClass('even').addClass("odd");
				}else{
					$(element).removeClass('odd').removeClass('even').addClass("even");
				}
				i++;
			});
		}else{
			var i=1;
			$(this).children().children().each(function(index, element){
				if(i%2==0){
					$(element).removeClass('odd').removeClass('even').addClass("even");
				}else{
					$(element).removeClass('odd').removeClass('even').addClass("odd");
				}
				i++;
			});
		}
	});
}

//when doc is ready run page functions.
$(document).ready(function(){
	//keep track of where the user clicks with teh mose
	$(document).mousemove(function(e){
		mouseX = e.pageX;
		mouseY = e.pageY;
	});

	//page setup
	pageSetup();
});