// remove leading whitespace
String.prototype.lTrim = function () {
	return this.replace(/^\s*/, "");
}
// remove trailing whitespace
String.prototype.rTrim = function () {
	return this.replace(/\s*$/, "");
}
// remove leading and trailing whitespace
String.prototype.trim = function () {
	return this.rTrim().lTrim();
}
// removes unwanted characters from a string
String.prototype.clean = function() {
	strQuote = /'/g;
	strDQuote= /"/g;
	strLT=/</g;
	strGT=/>/g;
	//"’"
	myString = this.replace(strQuote, "`");		// Single Quote
	myString = myString.replace(strDQuote, "`");	// Double Quote
	myString = myString.replace(strLT, "[");		// lt HTML
	myString = myString.replace(strGT, "]");		// gt HTML
	myString = myString.trim();
	return myString;
}
function enableCombo(objID, enableObjID) {
        var frmObj = EBI(enableObjID);
        if (objID.value != "") {
            frmObj.disabled = false;
        } else {
            frmObj.disabled = true;            
        }       
}
function showHideDiv() {
    var Filter = document.getElementById("filterDiv");
    var filterVis = document.getElementById("filter");
    if (Filter.style.display == "inline") {
        Filter.style.display = "none";
        filterVis.value = "none";            
    } else {
        Filter.style.display = "inline";
        filterVis.value = "inline";
    }       
}
function PadLeft(String,Length,PadChar) {
	String += ""       // Force argument to string.
	Length += ""       // Force argument to string.
	PadChar += ""      // Force argument to string.
	if((PadChar == "") || (!(PadChar.length == 1)))
	PadChar = " "
	var Count = 0
	var PadLength = 0
	Length = parseInt(0 + Length,10)
	if(Length <= String.length) // No padding necessary.
	return(String)
	PadLength = Length - String.length
	for(Count = 0; Count < PadLength; Count++)
	String = PadChar + String
	return(String)
}
function FormatNumber(Number,Decimals,Separator) {
	Number += ""          // Force argument to string.
	Decimals += ""        // Force argument to string.
	Separator += ""       // Force argument to string.
	if((Separator == "") || (Separator.length > 1))
	Separator = "."
	if(Number.length == 0)
	Number = "0"
	var OriginalNumber = Number  // Save for number too large.
	var Sign = 1
	var Pad = ""
	var Count = 0
	// If no number passed, force number to 0.
	if(parseFloat(Number)){
	Number = parseFloat(Number)} else {
	Number = 0}
	// If no decimals passed, clisting decimals to 2.
	if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)){
	Decimals = parseInt(Decimals,10)} else {
	Decimals = 2}
	if(Number < 0)
	{
	Sign = -1         // Remember sign of Number.
	Number *= Sign    // Force absolute value of Number.
	}
	if(Decimals < 0)
	Decimals *= -1    // Force absolute value of Decimals.
	// Next, convert number to rounded integer and force to string value.
	// (Number contains 1 extra digit used to force rounding)
	Number = "" + Math.floor(Number * Math.pow(10,Decimals + 1) + 5)
	if((Number.substring(1,2) == '.')||((Number + '')=='NaN'))
	return(OriginalNumber) // Number too large to format as specified.
	// If length of Number is less than number of decimals requested +1,
	// pad with zeros to requested length.
	if(Number.length < Decimals +1) // Construct pad string.
	{
	for(Count = Number.length; Count <= Decimals; Count++)
	Pad += "0"
	}
	Number = Pad + Number // Pad number as needed.
	if(Decimals == 0){
	// Drop extra digit -- Decimal portion is formatted.
	Number = Number.substring(0, Number.length -1)} else {
	// Or, format number with decimal point and drop extra decimal digit.
	Number = Number.substring(0,Number.length - Decimals -1) +
		  Separator +
		  Number.substring(Number.length - Decimals -1,
		  Number.length -1)}
	if((Number == "") || (parseFloat(Number) < 1))
	Number="0"+Number // Force leading 0 for |Number| less than 1.
	if(Sign == -1)
	Number = "-" + Number  // Set sign of number.
	return(Number)
}
function FormatNumberField(Object,Decimals,Pad,Separator,PadChar) {
	if(Object.value == "")
	Object.value = "0"
	if(Object == null)
	return(null)
	Separator += ""      // Force argument to string.
	if((Separator == "") || (Separator.length > 1))
	Separator = "."
	PadChar += ""
	if((PadChar == "") || (!(PadChar.length == 1)))
	PadChar = " "
	Object.value = FormatNumber(Object.value,Decimals,Separator)
	Object.value = PadLeft(Object.value,Pad,PadChar)
	return(Object.value)
}
function makeNumber(obj) { //Simple Number without Decimals
	obj.value = obj.value.replace(/ /g, ""); //Remove space
	obj.value = obj.value.replace(/-/g, ""); //Remove dash
	obj.value = obj.value.replace(/\(/g, ""); //Remove parenthesis
	obj.value = obj.value.replace(/\)/g, ""); //Remove parenthesis
	obj.value = obj.value.replace(/\+/g, ""); //Remove plus
	obj.value = FormatNumberField(obj,0,"","",""); //Validate
}
function makeFloat(obj,decimals) { //Numeric/Currency with Decimals
	if (decimals=="" || decimals=='undefined') {
		decimals = 2;
	}
	obj.value = obj.value.replace(/ /g, ""); //Remove space
	obj.value = obj.value.replace(/-/g, ""); //Remove dash
	obj.value = obj.value.replace(/,/g, "."); //Replace comma with period;
	obj.value = FormatNumberField(obj,decimals,"",".","");
}
function makePercent(obj) { //Percentage with Decimals if applicable
	obj.value = obj.value.replace(/,/g, "."); //Replace comma with period;
	var pVal = FormatNumberField(obj,2,"",".","");
	if (pVal>100) { //Reset to 100
		pVal = 100;
	}
	if (pVal<0) { //Reset to 0
		pVal = 0;
	}
	obj.value = pVal*1; //Remove trailing 00
}
function cleanThis(targ) {
	targ.value = targ.value.clean();
}
function EBI(objID) {
	if (document.getElementById(objID)) {
		return document.getElementById(objID);
	} else {
		return false;
	}
}
// check whether field has a value
function isPopulated(src) {
	if (src) {
		var srcVal = src.value;
		srcVal = srcVal.trim();
		if (srcVal.length == 0) {
			return false;
		} else {
			return true;
		}
	}
}
// validate email address
function ValidateEmail(src) {
	var emailReg = /^([a-zA-Z0-9_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	return emailReg.test(src);
}
// validate email address extension
function ValidateEmailEx(src) {
	var emailReg = /^[\w\.\+\-]+@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
	return emailReg.test(src);
}

function ValidateAlphaNumeric(src) {
	var alphaReg = /[^a-zA-Z0-9]/g
	return !alphaReg.test(src);
}
// Create xmlHttp Object for function: XMLHttp(formFields, strUrl, httpGET)
function GetXmlHttpObject() {
	var xmlHttp;
	if (!window.XMLHttpRequest) {
		try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0"); return xmlHttp; } catch (ex) {}
		try { xmlHttp = new ActiveXObject("MSXML2.XMLHTTP"); return xmlHttp; } catch (ex){}
		try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); return xmlHttp; } catch (ex) {}
		return null;
	} else	{
		try {xmlHttp = new XMLHttpRequest(); return xmlHttp;} catch(ex) {}
		return null;
	}
}
// Use AJAX-type method to execute server-side script
function XMLHttp(formFields, strUrl, httpGET) {
	 var strText = "";
	 var getorpost=(typeof(httpGET)!="undefined" && httpGET==true)? "GET" : "POST";
	 xmlhttp = GetXmlHttpObject();
	 try {
		 if (xmlhttp != null) {
			 xmlhttp.open(getorpost, strUrl, false);
			 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			 xmlhttp.send(formFields);
			 strText = xmlhttp.responseText;
		 }
	 }catch(ex){}
	 return strText;
}
// Simple Find & Replace within a string
function ReplaceString(TheString, SearchFor, ReplaceWith) {
	var SearchPattern = eval("/" + SearchFor + "/g");
	return TheString.replace(SearchPattern, ReplaceWith);
}
// Set SelectBox's Selected Value
function setSelect(elmID, selectedValue, force) {
	if ((force !== 'undefined') && (force == true)) {
		if (EBI(elmID)) { //Make sure select box exists
			EBI(elmID).value = selectedValue;
		}
	} else {
		if (selectedValue.length!==0 && selectedValue.trim()!=="") { //check that a value was sent
			if (EBI(elmID)) { //Make sure select box exists
				EBI(elmID).value = selectedValue;
			}
		}
	}
}

// Get form Context
function getForm(formName) {
	var obj_frm = null;
	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		try { obj_frm = eval("document." + formName);} catch (ex) {}
	} else {
		try { obj_frm = document.forms[formName]; } catch (ex) {}
	}
	return obj_frm;
}

// Show or Hide an Element
function sh(elmID, elmTarget) {
	var objTarget = null;
	if (elmID) {
		if (EBI(elmID)) {
			objTarget = EBI(elmID);
		}
	} else {
		if (elmTarget) {
			objTarget = elmTarget;
		}
	}
	if (objTarget) {
		if (objTarget.style.display=="none") {
			objTarget.style.display = "inline";
		} else {
			objTarget.style.display = "none";
		}
	}
}
/*
	Form Validation Functions
	Shows/Hide Validation Messages
*/
function fnSendXMLHTTPRequest_Post(strURL, strXMLData){
	    var objHTTP, strResult;
	    // >> Create The XMLHTTP Object
	    objHTTP = new ActiveXObject('Microsoft.XMLHTTP');
	    // >> Initialize The XMLHTTP Object 
	    objHTTP.Open('POST',strURL,false);
	    // >> Set Compatible Request Header
	    objHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	    // >> Encode The XML Data As Valid Data For Secure Call
	    strXMLText = fnEncodeXMLForXMLHTTPPost(strXMLData);
	    // >> Post The Data To The Server
	    objHTTP.send(strXMLText);
	    // Return The Response Text
	    return objHTTP.responseText;
}
function fnEncodeXMLForXMLHTTPPost(strXMLText){
	    var blnInvalidCharPresent = true;
	    // >> Loop Through The XML String To Replace The < With &lt; And > With &gt;
	    do
	    {	strXMLText = strXMLText.replace("<", "&lt;");
		    strXMLText = strXMLText.replace(">", "&gt;");
		    if ( strXMLText.indexOf("<") < 0 && strXMLText.indexOf(">") < 0 )
			    {blnInvalidCharPresent = false;}
	    }	while (blnInvalidCharPresent == true);
	    // >> Return The Replaced String
	    return strXMLText;
}
function frmVal() {    
    var failCount=0
    failCount+=ValidateNodes('select');
    failCount+=ValidateNodes("input");
    failCount+=ValidateNodes("textarea");
    
    if (failCount>0) {            
        return false;        
    } 
    return true;      
}
var hasError = 0;
function ValidateNodes(nodeType) {
    var er = 0;
    if(!document.getElementsByTagName) return; 
    var nodeCount = document.getElementsByTagName(nodeType);
    if(!nodeCount ) return;

    for( var i = 0; i < nodeCount.length; i++ ) {
        var domObj = nodeCount.item(i);

        if( domObj.title.toLowerCase() == "compulsory") {
            if (domObj.parentNode.getElementsByTagName('img')[0]) {
                if (domObj.parentNode.getElementsByTagName('img')[0].id=='notify') {
                    if (domObj.parentNode.getElementsByTagName('img')[1]) { domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[1]); }
                } else {
                    domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[0]);
                }
            }    
            if (domObj.value == "") {
                er = 1;                
//                domObj.style.width='88%';
                if (hasError==0) {
                    var currWidth = parseInt(domObj.offsetWidth);
                    var newWidth = currWidth - parseInt(30);
                    domObj.style.width=newWidth;
                }
                var imgObj = newimg=document.createElement('img');
                imgObj.src='images/fail.gif';
                imgObj.style.float='left';
                imgObj.style.marginBottom='-5px';   
                imgObj.style.marginLeft='5px';                
                
                domObj.parentNode.appendChild(imgObj);                
            } else {
                //domObj.style.width='88%';
                if (hasError==0) {
                     var currWidth = parseInt(domObj.offsetWidth);
                    var newWidth = currWidth - parseInt(30);
                    domObj.style.width=newWidth;
                }               
                var imgObj = newimg=document.createElement('img');
                imgObj.src='images/pass.gif';
                imgObj.style.float='left';
                imgObj.style.marginLeft='5px'; 
                imgObj.style.marginBottom='-5px';                   
                domObj.parentNode.appendChild(imgObj);                
            }
        }           
    }   
    hasError = 1;       
    return er;  
}
function frmNotify(obj,msg) {
    obj.style.color='red';
    obj.innerHTML=msg;    
}
function frmValCustom(domObj) {
    if (domObj.parentNode.getElementsByTagName('img')[0]) {
        if (domObj.parentNode.getElementsByTagName('img')[0].id=='notify') {
            if (domObj.parentNode.getElementsByTagName('img')[1]) { domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[1]); }
        } else {
            domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[0]);
        }
    }               
    //domObj.style.width='88%';
    var imgObj = newimg=document.createElement('img');
    imgObj.src='images/fail.gif';
    imgObj.style.float='left';
    imgObj.style.marginBottom='-5px';                   
    imgObj.style.marginLeft='5px';                   
    domObj.parentNode.appendChild(imgObj);    
}
function frmValReset(domObj) {
    if (domObj.parentNode.getElementsByTagName('img')[0]) {
        if (domObj.parentNode.getElementsByTagName('img')[0].id=='notify') {
            if (domObj.parentNode.getElementsByTagName('img')[1]) { domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[1]); }
        } else {
            domObj.parentNode.removeChild(domObj.parentNode.getElementsByTagName('img')[0]);
        }
    }    
    var imgObj = newimg=document.createElement('img');
    imgObj.src='images/pass.gif';
    imgObj.style.float='left';
    imgObj.style.marginBottom='-5px';                   
    imgObj.style.marginLeft='5px';                   
    domObj.parentNode.appendChild(imgObj);        
}
    function changeForms(obj) {
        if (obj.checked==true) {
            document.getElementById('q1').style.display='block';
            document.getElementById('q2').style.display='block';
            document.getElementById('qq_1').style.display='none';
            document.getElementById('qq_2').style.display='none';
        } else {
            document.getElementById('q1').style.display='none';
            document.getElementById('q2').style.display='none';
            document.getElementById('qq_1').style.display='block';
            document.getElementById('qq_2').style.display='block';
        }
    }
    function getMakes(obj) {
        document.getElementById("car_make").value="2"
        document.getElementById("make_options").innerHTML=XMLHttp("", 'lookups/ajax/vehicle.aspx?cmd=makes&car_year='+obj.value,  false);
        document.objFrm.car_model.disabled=true;
        document.objFrm.car_desc.disabled=true;
    }
    function getModels(obj) {
        document.getElementById("car_model").value="2"
        document.getElementById("model_options").innerHTML=XMLHttp("", 'lookups/ajax/vehicle.aspx?cmd=models&car_make='+obj.value,  false);
        document.objFrm.car_desc.disabled=true;
    }
    function getDescriptions(obj) {
        document.getElementById("car_desc").value="2"
        document.getElementById("desc_options").innerHTML=XMLHttp("", 'lookups/ajax/vehicle.aspx?cmd=descriptions&car_model='+obj.value,  false);         
    }
    function getSuburbs() {
        var suburb_name = document.getElementById("suburb").value;
        document.objFrm.suburb_id.disabled=true;
        
        if (suburb_name == "" || suburb_name.length < 3) {
            alert("Please enter atleast 3 letters of your suburb name.");
        } else {
            document.getElementById("suburb_id").value="2"
            document.getElementById("suburb_options").innerHTML=XMLHttp("", 'lookups/ajax/vehicle.aspx?cmd=suburbs&name='+suburb_name,  false);
        }
    }
    
    var blCell = false;
    var blContact = false;
    function quickValidation() {
        var erMsg = ""
        
        if (EBI('title_qq').value=="") {
            frmValCustom(EBI('title_qq'));
            erMsg+="Please select a title.<br>";
        } else {frmValReset(EBI('title_qq'));}
        
        if (EBI('name_qq').value=="") {
            frmValCustom(EBI('name_qq'));
            erMsg+="Please enter a name.<br>";
        } else {frmValReset(EBI('name_qq'));}
        
        if (EBI('surname_qq').value=="") {
            frmValCustom(EBI('surname_qq'));
            erMsg+="Please enter a surname.<br>";
        } else {frmValReset(EBI('surname_qq'));}
        
        if (EBI('cell_qq').value=="") {
            blCell = true;
            frmValCustom(EBI('cell_qq'));
        } else { 
            if (EBI('cell_qq').value.length!==10) {
                frmValCustom(EBI('cell_qq'));
                erMsg+="Please enter a valid 10 digit cell number.<br>";
            } else {
                frmValReset(EBI('cell_qq'));
            }
        }
        if (EBI('contact_qq').value=="" || EBI('contact_qq').value=="0" || EBI('code_qq').value=="") {
            blContact = true;
            frmValCustom(EBI('contact_qq'));
        } else { 
            frmValReset(EBI('contact_qq'));
        }
        if (!ValidateEmail(EBI('email_qq').value)) {
            frmValCustom(EBI('email_qq'));
            erMsg+="Please enter a valid email address.<br>";
        } else {frmValReset(EBI('email_qq'));}
        
       
        if (blContact==true && blCell==true) {
            erMsg+="Please provide either a cell number or contact no and area code.<br>";
        }  
        if (document.objFrm.qq_terms.checked==false) {
            erMsg+="Please read the terms and conditions, and if you wish to continue you will need to check the terms and conditions.<br>";
        }
        if (erMsg!=='') {
            EBI('pMsg').style.display="block";
            frmNotify(EBI('pMsg'),erMsg);
            return false;
        }
        EBI("action").value="quick";
        document.getElementById('submit_quick').style.display="none";
        document.forms[0].submit();
    }
    function validateForm() {
        var erMsg = ""
        var blCell = false;
        var blContact = false;
        
        if (!frmVal()) {
            erMsg+='Please Complete all compulsory fields (*)<br>';
        }
        if (EBI('cell').value=="" || EBI('cell').value=="0") {
            blCell = true;
            frmValCustom(EBI('cell'));
        } else { 
            if (EBI('cell').value.length!==10) {
                frmValCustom(EBI('cell'));
                erMsg+="Please enter a valid 10 digit cell number.<br>";
            } else {
                frmValReset(EBI('cell'));
            }
        }
        
        if (EBI('landline').value=="" || EBI('landline').value=="0" || EBI('code').value=="") {
            blContact = true;
            frmValCustom(EBI('landline'));
        } else { 
            frmValReset(EBI('landline'));
        }
        if (!ValidateEmail(EBI('email').value)) {
            frmValCustom(EBI('email'));
            erMsg+="Please enter a valid email address.<br>";
        } else {frmValReset(EBI('email'));}
        
        if (EBI('id').value=="" || EBI('id').value.length!==13) {
            frmValCustom(EBI('id'));
            erMsg+="Please enter a valid 13 digit id number.<br>";
        } else {frmValReset(EBI('id'));}
        
        if (document.objFrm.terms.checked==false) {
            erMsg+="Please read the terms and conditions, and if you wish to continue you will need to check the terms and conditions.<br>";
        }
        
        if (blContact==true && blCell==true) {
            erMsg+="Please provide either a cell number or contact no and area code.<br>";
        }    
          
        if (erMsg!=='') {
            EBI('pMsg').style.display="block";
            frmNotify(EBI('pMsg'),erMsg);
            return false;
        }
        document.getElementById('submit_main').style.display="none";
        document.forms[0].submit();
    }
