var SITE_URL;
var xmlHttp
function GetXmlHttpObject() {
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function changeFull(folder,picture,type) {
	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null) {
		alert ("Your browser does not support AJAX!");
		return;
	}
	picPath =  SITE_URL+"/_images/"+folder+"/img/"+picture;

	xmlHttp.onreadystatechange= function() {
		if (xmlHttp.readyState==4) { 
			document.getElementById("photoFull").src = picPath;
			document.getElementById("loading").className = "";
			if(type=="horizontal") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame2.png";
				document.getElementById("framepadding").className = "horizontal";
			} else if (type=="store") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame2.png";
				document.getElementById("framepadding").className = "store";
			} else if (type=="store2") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame2-2.png";
				document.getElementById("framepadding").className = "store2";
			} else if (type=="vertical") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame3.png";
				document.getElementById("framepadding").className = "vertical";
			} else if (type=="full_v") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame_full_v.png";
				document.getElementById("framepadding").className = "full_v";
			} else if (type=="tiny") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-1.gif";
				document.getElementById("framepadding").className = "";
			} else if (type=="brown") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-2.gif";
				document.getElementById("framepadding").className = "";
			} else if (type=="gray") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-3.gif";
				document.getElementById("framepadding").className = "";
			} else if (type=="sky") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-4.gif";
				document.getElementById("framepadding").className = "";
			} else if (type=="dark") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-5.gif";
				document.getElementById("framepadding").className = "";
			} else if (type=="summer") {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1-6.gif";
				document.getElementById("framepadding").className = "";
			} else {
				document.getElementById("frame").src = SITE_URL+"/_images/frame1.gif";
				document.getElementById("framepadding").className = "";
			}
			document.getElementById("frame").className = "";
		} else if (xmlHttp.readyState==1) {
			document.getElementById("photoFull").src = SITE_URL+"/_images/space.gif";
			document.getElementById("frame").className = "loading";
		}
	}
	xmlHttp.open("GET",picPath,true);
	xmlHttp.send(null);
}

function setBorder(obj) {
	var old_objs = document.getElementsByClassName("border");
	for(i=0; i<old_objs.length;i++) {
		old_objs[i].style.visibility = "hidden";
	}
	obj.firstChild.style.visibility = "visible";
}

document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
}


/////////////////begin form validation code/////////////////////

//form validation - multiple form inputs
	//uses validateInput() for each input
	//returns true or false
	//displays any failure message
	//form is the name of the form
	//validate format: input name=friendly name=test=required
		//leave the 'test' parameter blank or 'nada' to allow field to be required only - no test
		//example: validateForm('Form1', 'per_email=Email Address=email=true,cas_uid=Case Number=integer=false,fromdate=From Date=date=false,todate=To Date=date=true')
	//
function validateForm(form, validate){
	var oInput, sName, sTest, bReq, msg = "";
	var pairs = validate.split(",");
	for(i in pairs){
		oInput = eval("document." + form + ".elements['" + pairs[i].split("=")[0] + "']");
//		oInput = eval("document.getElementById('" + pairs[i].split("=")[0] + "')");
		sName = pairs[i].split("=")[1];
		sTest = pairs[i].split("=")[2];
		bReq = eval(pairs[i].split("=")[3]);
		msg += validateInput(oInput, sName, sTest, bReq);
	}
	if(msg != ""){
		alert(msg);
		return false;
	}
	return true;
}

//form validation - single form input
	//returns empty string '' upon success
	//rerturns error message upon failure
	//oInput is form input object, sName is friendly name of input, sTest is the test to perfom, bReq is true if input is required
		//example: validateInput(per_email, 'Email Address', 'email', true)
function validateInput(oInput, sName, sTest, bReq){
    var rTest = "";
    var sVal = oInput.value;
//    try {var sVal = oInput.value;}
//    catch(e) {alert(sName)}
    if(sVal == "" && !bReq){return rTest;}
    if(sVal == "" && bReq){return sName + ": This field is required.\n";}
    if(sTest == "date"){rTest = validateDate(oInput.value);}
    if(sTest == "time"){rTest = validateTime(oInput.value);}
    if(sTest == "money"){rTest = validateMoney(oInput.value);}
    if(sTest == "email"){rTest = validateEmail(oInput.value);}
    if(sTest == "zip"){rTest = validateZipCode(oInput.value);}
    if(sTest == "integer"){rTest = validateInteger(oInput.value);}
    if(sTest == "numeric"){rTest = validateNumeric(oInput.value);}
    if(sTest == "ssn"){rTest = validateSSN(oInput.value);}
    if(sTest == "group"){rTest = validateGroup(oInput);}
    if(sTest == "path"){rTest = validatePath(oInput.value);}
    if(sTest == "message"){return sName + "\n";}
    if(sTest == "card"){rTest = validateCard(oInput.value);}
    if(sTest == "expdate"){rTest = validateExpiraton(oInput.value);}
    if(rTest != ""){rTest = sName + ": " + rTest + "\n"}
    return rTest;
}

// validation functions used by validateInput() above
//
function validateCard(sVal){
	if(sVal.search(/[^\d]/) != -1){
		return "This field accepts Integers only.";
	}
	if(sVal.length != 16){
		return "This card number is not valid.";
	}
	return "";
}

function validateExpiraton(sVal){
    var reDatePat = /^(\d{1,2})(\/|-)(\d{1,2})$/;
    var OmatchArray = sVal.match(reDatePat);
	var d=new Date();
    if (OmatchArray == null) {
        return "This field require a valid mm/yy format.";
    }
	else {
		var strExp = sVal.split("/");
		if(strExp[0] < 1 || strExp[0] > 12) {
	        return "Month must be between 1 and 12.";
		}
		if(strExp[1] < 1 || strExp[1] > 12) {
	        return "Year must be within a valid range.";
		}

		var e = new Date(strExp[0]+"/01/20"+strExp[1]);
		e.setMonth(e.getMonth()+1);
		e.setMinutes(e.getMinutes()-1);
		if(e < d) {
	        return "Expiraton date is not valid.";
		}
	}
	return "";
}


function validateDate(sVal){
    var reDatePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var OmatchArray = sVal.match(reDatePat);
    if (OmatchArray == null) {
        return "all dates require a valid dd/mm/yyyy or dd-mm-yyyy date format.";
    }
    else{
        var strError = "";
        var strDay = OmatchArray[1];
        var strMonth = OmatchArray[3]; // parse date into variables
        var strYear = OmatchArray[5];
        if(strMonth < 1 || strMonth > 12) { // check month range
            strError="Month must be between 1 and 12.";
        }
        if(strDay < 1 || strDay > 31) {
			if(strError != ""){strError += ", ";}
            strError += "Day must be between 1 and 31.";
        }
        if((strMonth==4 || strMonth==6 || strMonth==9 || strMonth==11) && strDay==31) {
			if(strError != ""){strError += ", ";}
            strError += "Month "+strMonth+" doesn't have 31 days.";
        }
        if(strMonth == 2) { // check for february 29th
            var blnIsleap = (strYear % 4 == 0 && (strYear % 100 != 0 || strYear % 400 == 0));
            if (strDay>29 || (strDay==29 && !blnIsleap)) {
				if(strError != ""){strError += ", ";}
                strError += "February " + strYear + " doesn't have " + strDay + " days.";
            }
        }
        if(strYear < 1900 || strYear > 9999) {	//restrict year (mostly for sql)
			if(strError != ""){strError += ", ";}
            strError += "Year must be within a valid range.";
        }
        if(strError != ""){
            return strError;
        }
    }
    return "";
}

function validateTime(sVal){
    var reDatePat = /^(\d{1,2})(\:)(\d{1,2})$/;
    var OmatchArray = sVal.match(reDatePat);

    if (OmatchArray == null) {
		return "all times require a valid HH:MM time format.";
	}
	else {
        var strError = "";
        var strHour = OmatchArray[1]; // parse date into variables
        var strMinute = OmatchArray[3];

        if(strHour < 0 || strHour > 23) {
			if(strError != ""){strError += ", ";}
            strError += "Hour must be between 0 and 23.";
        }
        if(strMinute < 0 || strMinute > 59) {
			if(strError != ""){strError += ", ";}
            strError += "Minute must be between 0 and 59.";
        } else if(strMinute%15 != 0) {
			if(strError != ""){strError += ", ";}
            strError += "Minute must be use 15 minute intervals.";
        }

        if(strError != ""){
            return strError;
        }
	}
    return "";
}

function validateMoney(sVal){			
    reMoneyPat = /^\$|,/g;
    sVal=sVal.replace(reMoneyPat, "");
    if(isNaN(sVal)){return "A valid US monitary format is required.";}
    return "";
} 

function validateEmail(sVal){
    //var rePat = /[a-zA-Z0-9_\.\-\+]+@[a-zA-Z0-9_\.\-\+]+\.[a-zA-Z]+$/;
    var rePat = /([a-zA-Z0-9_\.\-\+]+@[a-zA-Z0-9_\.\-\+]+\.[a-zA-Z]+$)|([a-zA-Z0-9_\.\-\+]+@[a-zA-Z0-9_\.\-\+]+$)/;
    var bln = rePat.test(sVal);
    if(!bln){return "A valid email address is required.";}    
    return "";
}
		
function validatePath(sVal){
    var rePat = /[^\w ]/;
    var bln = rePat.test(sVal);
    if(bln){return "This field accepts only letters, numbers, the underscore, and spaces.";}    
    return "";
}
		
function validateZipCode(sVal){
    var rePat1 = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
    var OmatchArray1 = sVal.match(rePat1);
    if (OmatchArray1 == null) {
        return "A valid zipcode is required.";
    }
    return "";
}

function validateInteger(sVal){
	if(sVal.search(/[^\d]/) != -1){
		return "This field accepts Integers only.";
	}
	return "";
}

function validateNumeric(sVal){
	if(isNaN(sVal)){return "This field accepts numbers only.";}
	return "";
}

function validateSSN(sVal){
	var rePat1 = /^(\d{3})-(\d{2})-(\d{4})$/;
	var OmatchArray1 = sVal.match(rePat1);
	if (OmatchArray1 == null) {
		return "This field requires a number of the format NNN-NN-NNNN.";
	}
	return "";
}

function validateGroup(oIn){
	for(i=0; i<oIn.length; i++){
		if(oIn[i].checked){return "";}
	}
	return "Please make a selection.";
}


//validate a password as being strong
function strongPass(password){
	var msg = "";
	if(!(password.length >= 7)){msg += "passwords must be at least 7 characters long.\n";}
	if(!(password.match(/\d/))){msg += "passwords must include at least one number.\n";}
	if(!(password.match(/[A-Z]/))){msg += "passwords must include at least one uppercase letter.\n";}
	if(!(password.match(/[a-z]/))){msg += "passwords must include one or more lowercase letters.\n";}
	if(!(password.match(/\W+/))){msg += "passwords must include at least one special character - #,@,%,!\n";}
	if(msg != ""){
		alert(msg);
		return false;
	}
	return true;
}
/////////////////end form validation code/////////////////////

