/* /// AJAX functions (naming convention: funcNameResponse for the response) /// */
// Generic AJAX request.
// URL must be in the form something.php?var=name for it to work (stick in random var if nothing to pass)
var xmlHttp;
function postRequest(URL, responseFunc) {
	// for Safari, Firefox
	if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
	
	// for IE
	else if (window.ActiveXObject) 
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	
	// return error if no support
	if (xmlHttp==null)
		{alert ("Browser does not support HTTP Request"); return;}
	
	// add random number to prevent data being repeated due to page caching
	var url = URL + "&mr=" + Math.random();
	
	xmlHttp.onreadystatechange=responseFunc; // set response function
	xmlHttp.open("GET", url, true); // send to url
	xmlHttp.send(null);
}

/* ///////////////////// Form checks ////////////////////// */
/* Generic form checks (helper methods) */
function validate_email(email) {
	// returns true if valid email, false if not
	// @email: the email address to be validated
	// email validator regex taken from http://regexlib.com/REDetails.aspx?regexp_id=26
	if (!email.match(/^([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 false;
	return true;   
}

function validate_price(value) {
	// returns true if valid price, false if not
	if (!value.match(/^[0-9]+(\.[0-9]{2})?$/))
		return false;
	return true;
}

/* Specific forms */
function checkForm(formid) {
	if (!document.getElementById) return;
	// Wrapper for form checking
	var form = document.getElementById(formid);
	var error_string = this['check_'+formid](form, "\n");
	// if no error string submit form, else print error string and fail
	if (error_string == "") return true;
	alert(error_string);    
	if (document.getElementById('error_messages'))
	document.getElementById('error_messages').innerHTML = "<p>" + this['check_'+formid](form, "<br />") + "<br /></p>";
	return false;
}

function check_bandEnquiryForm(form, delimiter) {
// checks the band enquiry form on contactform.php
// @delimiter: the separator between each error statement
    var error_string = ""; // string if elements of form not passed
    // Fail if designated missing fields
    var missing_array = new Array('forename', 'surname', 'venue', 'weddingInterestOption', 'whereDidYouHearAboutUs');
    for (var i=0; i<missing_array.length; i++) {
        if (form.elements[missing_array[i]].value == "") 
            error_string += "Please enter '" + missing_array[i] + "' field."+delimiter;
    }
    // validate email
    if (!validate_email(form.elements['email'].value))
        error_string += "Please enter a vaild email address."+delimiter;
    // check if email & confirm email are the same
    if (form.elements['email'].value != form.elements['emailconfirm'].value)
        error_string += "Please ensure you entered the same email address twice."+delimiter;
    // validate date
    var today = new Date;
    var eventDate = new Date;
    eventDate.setDate(form.elements['eventday'].value);
    eventDate.setMonth(form.elements['eventmonth'].value -1); // Jan = 0
    eventDate.setFullYear(form.elements['eventyear'].value);
        if (today >= eventDate)
            error_string += "Please check the event date!" + delimiter;
    // validate times
    if (form.elements['timefromHr'].value == form.elements['timetoHr'].value
        && form.elements['timefromMin'].value == form.elements['timetoMin'].value) 
        error_string += "Please check your event times are correct!" + delimiter;
    return error_string;
}

function check_bandResponseForm(form, delimiter) {
// checks the band response form on enqs_bandResponse.php
// @delimiter: separator for each error
    if (!form.elements) return;
    var error_string = ""; // string if elements of form not passed
    // fail if not accepted 
    if (form.elements['accept'].value == 0)
        error_string += "Please indicate whether you are free or not."+delimiter;
    // fail if accepted but travel/quote prices are not valid
    if (form.elements['accept'].value == 1 && 
    (!validate_price(form.elements['quote_price'].value) || 
    !validate_price(form.elements['travel_expenses'].value)))
        error_string += "At least one of your prices is invalid!"+delimiter;
    // fail if terms and conditions box not checked
    if (!form.elements['confirmTerms'].checked)
        error_string += "Please confirm you have read the terms and conditions."+delimiter;
    return error_string;
}

function check_clientDepositForm(form, delimiter) {
// checks the client deposit form on enqs_deposit.php
// @delimiter: separator between each error statement
    var error_string = ""; // string if elements of form not passed
    if (!form.elements['terms'].checked)
        error_string += "Please indicate agreement to the terms and conditions."+delimiter;
//    if (!form.elements['confirmBook'].checked)
//        error_string += "Please indicate booking confirmation."+delimiter;
//    if (!form.elements['confirmNoRefund'].checked)
//        error_string += "Please indicate agreement to no refund."+delimiter;
    return error_string;
}

function replaceText(elementId, text) {
    var element = document.getElementById(elementId);
    // if text is hidden away show text
    // class "displaying" means text is currently showing
    if (element.className != "displaying") {
        element.className = "displaying";
        var hideText = '<p><a href="javascript:replaceText(\'' + elementId +
            '\', \'' + text + '\');">Hide</a></p>';        
        element.innerHTML = "<p style=\"margin-top:0px\">" + text + "</p>" + hideText;
    }
    else {
        element.className = "hidden";
        var showText = '<p><a href="javascript:replaceText(\'' + elementId +
            '\', \'' + text + '\');">View all</a></p>';
        element.innerHTML = showText;
    }    
}


//copied from header.php
		function MM_preloadImages() { //v3.0
		  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
			var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
			if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
		}
		
		function MM_swapImgRestore() { //v3.0
		  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
		}
		
		function MM_findObj(n, d) { //v4.01
		  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
			d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
		  if(!x && d.getElementById) x=d.getElementById(n); return x;
		}
		
		function MM_swapImage() { //v3.0
		  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
		   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
		}
		function MN_preloadImages() { //v3.0
		  var d=document; if(d.images){ if(!d.MN_p) d.MN_p=new Array();
			var i,j=d.MN_p.length,a=MN_preloadImages.arguments; for(i=0; i<a.length; i++)
			if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
		}
		
		function MN_swapImgRestore() { //v3.0
		  var i,x,a=document.MN_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
		}
		
		function MN_findObj(n, d) { //v4.01
		  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
			d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MN_findObj(n,d.layers[i].document);
		  if(!x && d.getElementById) x=d.getElementById(n); return x;
		}
		
		function MN_swapImage() { //v3.0
		  var i,j=0,x,a=MN_swapImage.arguments; document.MN_sr=new Array; for(i=0;i<(a.length-2);i+=3)
		   if ((x=MN_findObj(a[i]))!=null){document.MN_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
		}
		
		function MM_openBrWindow(theURL,winName,features) { //v2.0
		  window.open(theURL,winName,features);
		}
		
		
		// more.php get band travel cost
		function band_travelCostSelect(locations) {
			//if (!document.getElementById) return;
		  	if (location == "None") {
				document.getElementById("more_travelCost").innerHTML = "Please select a location to view cost.";
		  	}else{
				document.getElementById("more_travelCost").innerHTML = "<p>Retrieving request, please wait...</p>";
				var URL = "/includes/band_travelCostSelectHandler.php?loc="+locations;
				postRequest(URL, band_travelCostSelectResponse);
			}
		}
		
		// more.php band travel cost response
		function band_travelCostSelectResponse() {
			if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
				document.getElementById("more_travelCost").innerHTML = xmlHttp.responseText;
			}
		}
		
		// more.php band enquiry package when band is selected
		function bandEnquiry_selectPackage(selectNum) {
			if(!document.getElementById) return;
			var selectValue = document.getElementById("bandselect"+selectNum).value;
			if(selectValue == "<Please select>"){
				document.getElementById("bspackage"+selectNum).innerHTML = "";
			}else{
				document.getElementById("bspackage"+selectNum).innerHTML = "<p>Retrieving request, please wait...</p>";
				var URL = "/includes/band_selectPackageHandler.php?band=" + selectValue + "&num="+selectNum;
				postRequest(URL, bandEnquiry_selectPackageResponse);
			}
		}
		
		// xmlHttp response called from bandEnquiry_selectPackage()
		function bandEnquiry_selectPackageResponse() {
		  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
			var strings = xmlHttp.responseText.split("||", 2);
			// alert (strings[0]);
			// alert (strings[1]);
			document.getElementById("bspackage"+strings[0]).innerHTML = strings[1];
		  }
		}