var READY_STATE_UNINITIALIZED = 0;
var READY_STATE_LOADING = 1;
var READY_STATE_LOADED = 2;
var READY_STATE_INTERACTIVE = 3;
var READY_STATE_COMPLETE = 4;

function createXMLHttpObject(){
	var xmlhttpobject = null;
	try{
		xmlhttpobject = new XMLHttpRequest();
		}catch(e){
			//try differnet versions of	 xml http object
			var xmlHttpVersions = Array("Microsoft.XMLHTTP",
										"MSXML2.XMLHTTP",
										"MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0");
			//going through all the versions
			for(var i=0;i<xmlHttpVersions.length;i++){
				try{
						if(xmlhttpobject = new ActiveXObject(xmlHttpVersions[i]))
							break;
					}catch(e){}	
			}
		}
	return xmlhttpobject;
}

function createXmlDomObj(){
	var xmlDom;
	try{
		xmlDom = new ActiveXObject("Microsoft.XMLDOM");
	}catch(e){
		try{
			xmlDom = document.implementation.createDocument("","",null);	
		}catch(e){
			try{
				xmlDom = document.ActiveXObject("MSXML2.XMLDOM");
			}catch(e){}
		}
	}
	if(xmlDom) return xmlDom;
	else return null;
}

function changeOpacity(opac, id){
	var obj = document.getElementById(id).style;
	//check if necessary
	obj.opacity = opac/100;
	obj.MozOpacity = opac/100;
	obj.KhtmlOpacity = opac/100;
	obj.filter = "alpha(opactity="+opac+")";
}
function opacity(id,opacStart, opacEnd, miliSec){
	var speed = Math.round(miliSec/100);
	var timer = 0;
	if(opacStart >opacEnd){
		for(var i = opacStart; i>=opacEnd;i--){
			setTimeout("changeOpacity(" + i + ",'"+id+"')",(timer*speed));
			timer++;
		}   
	}else if(opacStart < opacEnd){
		for(var i=opacStart;i<=opacEnd;i++){
			setTimeout("changeOpacity(" + i + ",'"+id+"')",(timer*speed));
			timer++;
		}   
	}
}

function validateEmail(email) {
	if(email=="") return false;
   var regStr = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   if(regStr.test(email) == false) {
      return false;
   }else return true;
}
function validateZipCode(zip){
	var zipcode = zip + "";
	if(zipcode.length!=5)
		return false;
	try{
		var intZip = parseInt(zipcode);	
		return true;
	}catch(e){
		return false;
	}
}
function checkMyContactForm(form){
	var name = form.name.value;
	var email = form.email.value;
	var phone = form.phone.value;
	var message = form.message.value;
	var errormessage = "Error:\n";
	var code = form.randomstring.value;
	var count = 0;
	if(!validateEmail(email)){
		count++;
		errormessage +=count + ". Please double check your email\n";
	}
	if(name==""){
		count++;
		errormessage +=count + ". Please fill in your name\n";
	}
	if(!validatePhoneNumber(phone)){
		count++;
		errormessage +=count + ". Please check the phone number field\n";	
	}
	if(message==""){
		count++;
		errormessage +=count + ". The message body is empty\n";	
	}
	if(validateMagicText(code)=="false"){
		count++;
		errormessage +=count + ". Please fill in the box with provided code\n";
	}
	if(count>0){
		alert(errormessage);
		return false;
	}else return true;
}
function checkFeedbackForm(form){
	var name = form.name.value;
	var email = form.email.value;
	var message = form.message.value;
	var errormessage = "Error:\n";
	var code = form.randomString.value;
	var count = 0;
	if(!validateEmail(email)){
		count++;
		errormessage +=count + ". Please double check your email\n";
	}
	if(name==""){
		count++;
		errormessage +=count + ". Please fill in your name\n";
	}
	if(message==""){
		count++;
		errormessage +=count + ". The message body is empty\n";	
	}
	if(validateMagicText(code)=="false"){
		count++;
		errormessage +=count + ". Please fill in the box with provided code\n";
	}
	if(count>0){
		alert(errormessage);
		return false;
	}else return true;
}
function validatePhoneNumber(num){
	if(num=="") return false;
	var strPhoneNum = num + "";
	if(strPhoneNum.length!=10) return false;
	try{
		var intPhoneNum = parseInt(strPhoneNum);
		return true;
	}catch(e){
		return false;
	}
}

function validateMagicText(text){
	var textXmlHttp = createXMLHttpObject();
	var returnData = "";
	if(textXmlHttp){
		textXmlHttp.open("GET","script/validateMagicText.php?text="+text,false);
		textXmlHttp.send(null);
		return textXmlHttp.responseText;		
	}else{
		throw('can\'t validate input text. Please refresh browser.')
	}
}

function stripInvalidCharsFrom(text){
	var newText = text + "";
	var invalidChars = "':\"*&^%$#@!~`|}{][\\";
	for(var i=0;i<invalidChars.length;i++)
		newText.replace(invalidChars[i],"");
	
	return newText;
}

function sendfeedback(){
	var name = document.getElementById('feedbackform_name').value;
	var email = document.getElementById('feedbackform_email').value;
	var message = document.getElementById('feedbackform_message').value;
	var errormessage = "";
	var haserror = false;
	if(name==""){
		haserror=true;
		errormessage+="Name\n";
	}if(!validateEmail(email)){
		haserror=true;
		errormessage+="Invalid Email.\n";
	}
	if(message==""){
		haserror=true;
		errormessage+="Empty Message\n";
	}
	if(haserror){
		alert("Error 1009:\nPlease check the following fields\n" + errormessage);
		return false;
	}
	//create param
	params = "?name=" + name + "&email="+email + "&message=" + message;
	var xmlhttpobj = createXMLHttpObject();
	if(xmlhttpobj){
		xmlhttpobj.open("GET","sendfeedback_script.php" + params,true);
		xmlhttpobj.onreadystatechange = function(){
			if(xmlhttpobj.readyState==READY_STATE_COMPLETE){
				if(xmlhttpobj.status==200){
					if(xmlhttpobj.responseText=="true"){
						document.getElementById('feedbackform').innerHTML="<br/><br/>Your feedback has been sent. Thank you for your opinion.<br/><br/>";
					}else{
						document.getElementById('feedbackform').innerHTML="<br/><br/>We are sorry to encounter server's busy time. Please check back later. <br/><br/>";	
					}
				}else{
					document.getElementById('feedbackform').innerHTML="<br/><br/>We are sorry. Our server is busy. Please check back later.<br/><br/>" + xmlhttpobj.responseText;
				}
			}else{
				document.getElementById('feedbackform').appendChild(prepareAjaxLoaderCircle());
			}
		};
		xmlhttpobj.send(null);
	}
	
	
	return false;
}

function prepareAjaxLoaderCircle(){
	var ajaxLoaderImageEl = document.createElement("span");
	ajaxLoaderImageEl.setAttribute("class","ajaxLoaderIcon");
	var aEl = document.createElement("a");
	aEl.appendChild(ajaxLoaderImageEl);
	return aEl;
}
function prepareAjaxLoaderBar(){
	var ajaxLoaderImageEl = document.createElement("span");
	ajaxLoaderImageEl.setAttribute("class","ajaxLoaderBar");
	var aEl = document.createElement("a");
	aEl.appendChild(ajaxLoaderImageEl);
	return aEl;	
}
