var nbsp = 160;    // non-breaking space char
var node_text = 3; // DOM text node-type
var emptyString = /^\s*$/
var glb_vfld;      // retain vfld for timer thread
// -----------------------------------------
//                  trim
// Trim leading/trailing whitespace off string
// -----------------------------------------
function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
};
// -----------------------------------------
//                  setfocus
// Delayed focus setting to get around IE bug
// -----------------------------------------
function setFocusDelayed()
{
    glb_vfld.focus()
}
function setfocus(vfld)
{
  // save vfld in global variable so value retained when routine exits
  glb_vfld = vfld;
  setTimeout( 'setFocusDelayed()', 100 );
}
// -----------------------------------------
//                  msg
// Display warn/error message in HTML element
// commonCheck routine must have previously been called
// -----------------------------------------
function msg(message) // string to display
{
  // setting an empty string can give problems if later set to a
  // non-empty string, so ensure a space present. (For Mozilla and Opera one could
  // simply use a space, but IE demands something more, like a non-breaking space.)
  var dispmessage;
  if (emptyString.test(message))
    dispmessage = String.fromCharCode(nbsp);
  else
    dispmessage = message;

  //var elem = document.getElementById(fld);
  //elem.innerHTML = dispmessage;
  //elem.className = msgtype;   // set the CSS class to adjust appearance of message
  return dispmessage;
};


// -----------------------------------------
//            commonCheck
// Common code for all validation routines to:
// (a) check for older / less-equipped browsers
// (b) check if empty fields are required
// Returns true (validation passed),
//         false (validation failed) or
//         proceed (don't know yet)
// -----------------------------------------

var proceed = 2;
function commonCheck (vfld, msg, reqd)
{
  //if (!document.getElementById)
    //return true;  // not available on this browser - leave validation to the server
  if (emptyString.test(vfld.value)) {
      if (reqd) {
	      alert(msg);
		  setfocus(vfld);
		  return false;
    }
  }
  return true;
}

function validateDate(obj, type, msg, ifld) { 
    eval ("var dtStr = obj." + type + "_month[obj." + type + "_month.selectedIndex].value");
    dtStr += "/";
    eval ("dtStr += obj." + type + "_day[obj." + type + "_day.selectedIndex].value");
    dtStr += "/";
    eval ("dtStr += obj." + type + "_year[obj." + type + "_year.selectedIndex].value");
    if (!isDate(dtStr)) { 
		if(ifld) {
            alert(msg);
			return false;
		}
    }
	return true;
}

// this is for combo box control
function commonComboCheck (vfld, msg, reqd)
{
	if (emptyString.test(vfld.options[vfld.selectedIndex].value)) {
		if (reqd) {
			alert(msg);
			setfocus(vfld);
			return false;
		} else {
			return true;
		}
	}
	return true;
}
// -----------------------------------------
//            validatePresent
// Validate if something has been entered
// Returns true if so
// -----------------------------------------

function validatePresent(vfld, msg, reqd)  
{
  var stat = commonCheck (vfld, true);
  if (stat != proceed) return stat;
  if(reqd) {
	  alert(msg);
	  setfocus(vfld);
	  return false;
  }
  return true;
};

function validatefullname(vfld, msg, reqd)
{
	var tfld = trim(vfld.value);
	var fullname_pattern = /^[a-zA-Z]+[a-zA-Z\s\ \'\.]*[a-zA-Z]*$/
	if (! fullname_pattern.test(tfld)) {
	    setfocus(vfld);
		alert(msg);
		return false;
	}
	return true;
}
// -----------------------------------------
//               validateEmail
// Validate if e-mail address
// Returns true if so (and also if could not be executed because of old browser)
// -----------------------------------------

function validateEmail  (vfld, msg, reqd)
{
    var tfld = trim(vfld.value);
	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
	if (!email.test(tfld)) {
		alert(msg);
		setfocus(vfld);
		return false;
	}
	var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/
	if (!email2.test(tfld)) {
		alert("Unusual email address, please enter valid email address");
		return false;
	}
	else
		return true;
};


function compareDates(obj, from, to, ifld, msg) { 
    eval ("var fromDate = new Date(obj." + from + "_year[obj." + from + "_year.selectedIndex].value,(obj." + from + "_month[obj." + from + "_month.selectedIndex].value - 1),obj." + from + "_day[obj." + from + "_day.selectedIndex].value)");
    eval ("var toDate = new Date(obj." + to + "_year[obj." + to + "_year.selectedIndex].value,(obj." + to + "_month[obj." + to + "_month.selectedIndex].value - 1),obj." + to + "_day[obj." + to + "_day.selectedIndex].value)");
	
	if (toDate.getTime() < fromDate.getTime()) { 
		if(trim(msg)!="")
			alert(msg);
		else
			alert(to + " date has to be greater than or equal to " + from + " date");
	    return false;
    } else {
        return true;
    }

}
function compareDateTimes(obj, from, to, ifld, msg) {
    eval ("var fromDate = new Date(obj." + from + "_year[obj." + from + "_year.selectedIndex].value,(obj." + from + "_month[obj." + from + "_month.selectedIndex].value - 1),obj." + from + "_day[obj." + from + "_day.selectedIndex].value, obj." + from + "_hour[obj." + from + "_hour.selectedIndex].value, obj." + from + "_minute[obj." + from + "_minute.selectedIndex].value, obj." + from + "_second[obj." + from + "_second.selectedIndex].value)");
    eval ("var toDate = new Date(obj." + to + "_year[obj." + to + "_year.selectedIndex].value,(obj." + to + "_month[obj." + to + "_month.selectedIndex].value - 1),obj." + to + "_day[obj." + to + "_day.selectedIndex].value, obj." + to + "_hour[obj." + to + "_hour.selectedIndex].value, obj." + to + "_minute[obj." + to + "_minute.selectedIndex].value, obj." + to + "_second[obj." + to + "_second.selectedIndex].value)");
	
	if (toDate.getTime() < fromDate.getTime()) {
		if(trim(msg)!="")
			alert(msg);
		else
			alert(to + " date has to be greater than or equal to " + from + " date");
	    return false;
    } else {
        return true;
    }

}
function validateNumber (vfld, msg, reqd)
{
    var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	var pattern = /[0-9]+$/
    if (!pattern.test(tfld)) {
		alert(msg);
		setfocus(vfld);
		return false;
	} 
	return true;
}
function validatephoneNumber(vfld, msg)
{
	if(trim(vfld.value)!="")
	{
        var regex = /^[\d]+$/;
        if(!regex.test(trim(vfld.value)))
        {
            alert(msg);
			setfocus(vfld);
			return false;
	    } 
	}
	return true;
}
function validatemobileNumber(vfld, msg)
{
	if(trim(vfld.value)!="")
	{ 
	    var regex1 = /^[\d]{10}$/;
	    var regex2 = /[\(][\+][\d]{2}[\)][\d]{10}/;
		if(!regex1.test(trim(vfld.value)) && !regex2.test(trim(vfld.value)))
	    {
		    alert(msg);
			setfocus(vfld);
			return false;
		}
	}
	return true;
}
function validatezipCode(vfld, msg)
{
	if(trim(vfld.value)!=""){
		var regex1 = /^[\d]{5,6}$/;
		var regex2 = /^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/;
		if(!regex1.test(trim(vfld.value)) && !regex2.test(trim(vfld.value)))
		{
			alert(msg);
			setfocus(vfld);
			return false;
		}
	}
	return true;
}
function validateCity(vfld, msg)
{

	if(trim(vfld.value)!=""){
		var regex = /^[a-zA-Z]+[a-zA-Z\.\'\ \s]*[a-zA-Z]+$/;
		if(!regex.test(trim(vfld.value)))
		{
			alert(msg);
			setfocus(vfld);
			return false;
		}
	}
	return true;
}
function validateFileExtension (obj, msg, ifld)
{  
	if (!obj.value.match(/(.gif|.png|.jpg|.jpeg)$/i)) {
		alert(msg);
		obj.focus();
		return false;
	}
	return true;
}

function validateWebsite  (vfld, msg, reqd)   // true if required
{
    var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
    var website = /^(((h|H?)(t|T?)(t|T?)(p|P?)(s|S?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]*[\/]*$/  //expression accepts any URL with or without http/https
	if (!website.test(tfld)) {
	    alert (msg);
		vfld.focus();
		return false;
    }  else {
	    return true;
	}
}
function validateUrlPath(vfld, msg, reqd)   // true if required
{
    var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
    var website = /^(((h|H?)(t|T?)(t|T?)(p|P?)(s|S?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]*([\/]*[a-zA-Z0-9\.\_\?\&\/\~]*)*$/  //expression accepts any URL with or without http/https
	if (!website.test(tfld)) {
		alert (msg);
		vfld.focus();
		return false;
    }  else {
	    return true;
	}
}
function submitfrmnewsletter(obj) 
{  
    frm = obj;
    var errs = 0;	
    if (trim(obj.newsletter_email.value)=="") {
        alert('Please enter your email id');
        setfocus(obj.newsletter_email);
    }
    var trim_email = trim(obj.newsletter_email.value);
    if (trim_email!="") {
        var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
        if (!email.test(trim_email)) {
            setfocus(obj.newsletter_email);            
			alert("Unusual e-mail address - check if correct");
        } else {		
            var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/
            if (!email2.test(trim_email))
                alert("Unusual e-mail address - check if correct");
            else { 
				
				var unsub = (document.getElementById('unsubscribe').checked?1:0);			
                process_subscribe_newsletter(trim_email, unsub);
            }
        
        }	 	   

    }    
}
function process_subscribe_newsletter(subscribe_email, unsub) 
{   
    var objemail = document.getElementById("newsletter_email");
    var objunsub = document.getElementById('unsubscribe');
    var reqsubscribe = new XMLHttpRequest();
    reqsubscribe.onreadystatechange = function()
    {
        if (reqsubscribe.readyState == 4) {
            if (reqsubscribe.status == 200) {
                if (reqsubscribe.responseText == 1) {
                    //alert("Sucess: You have been subscribed");
                    alert("Sucess: Thank you for subscribing to our newsletter");
                    objemail.value="";
                } else if (reqsubscribe.responseText == 2) {
                    //alert("Sucess:You have been unsubscribed");
                    alert("Unsubscribed from our newsletter");
                    objemail.value="";
                    objunsub.checked=false;
                } else if (reqsubscribe.responseText == 3) {
                    alert("Error: Subscriber emaill address does not exists, please check it");
                    objemail.focus();
                    objunsub.checked=false;
                }else if (reqsubscribe.responseText == 0) {
                    alert("Error: Subscriber emaill address already exists");
                    objemail.focus();
                } else {
                    alert("Error: In processing, please try again");
                }
            } else {
                    alert("Error: In processing, please try again");
            }
        }
    }
    reqsubscribe.open("GET", "newsletter_subscribe.process.php?email="+subscribe_email+"&unsubscribe="+unsub, true);
    reqsubscribe.send("");
}

function getOffsetLeft (imgID) {
        return docjslib_getRealLeft(imgID);
}

function getOffsetTop (imgID) {
        return docjslib_getRealTop(imgID);
}

function docjslib_getRealLeft(imgElem) {
	xPos = eval(imgElem).offsetLeft-12;
	/*
	tempEl = eval(imgElem).offsetParent;
  	while (tempEl != null) {
  		xPos += tempEl.offsetLeft;
  		tempEl = tempEl.offsetParent;
  		alert(xPos);
  	}
	*/
	return xPos;
}

function docjslib_getRealTop(imgElem) {
	yPos = eval(imgElem).offsetTop-26;
	return yPos;
}

function emptyComboBox(comboboxid) {
	var combo_obj = document.getElementById(comboboxid);
     var combo_len =  combo_obj.options.length;
      if (combo_len > 0 ) {
         for (j=(combo_len-1); j>=0;j--) {
              combo_obj.remove(j);
         }
      }
}