addEvent(window, 'load', initForm);

var highlight_array = new Array();

function initForm(){
	initializeFocus();
	initAutoResize();
	ifInstructs();
	browserDetect();
	checkPaypal();
	checkMechanicalTurk();
}

// for radio and checkboxes, they have to be cleared manually, so they are added to the
// global array highlight_array so we dont have to loop through the dom every time.
function initializeFocus(){
	fields = getElementsByClassName(document, "*", "field");
	for(i = 0; i < fields.length; i++) {
		if(fields[i].type == 'radio' || fields[i].type == 'checkbox' || fields[i].type == 'file') {
			fields[i].onclick = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode, "focused", true)};
			fields[i].onfocus = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode, "focused", true)};
			highlight_array.splice(highlight_array.length,0,fields[i]);
		}
		if(fields[i].className.match('addr')){
			fields[i].onfocus = function(){clearSafariRadios();addClassName(this.parentNode.parentNode.parentNode, "focused", true)};
			fields[i].onblur = function(){removeClassName(this.parentNode.parentNode.parentNode, "focused")};
		}
		else {
			fields[i].onfocus = function(){clearSafariRadios();addClassName(this.parentNode.parentNode, "focused", true)};
			fields[i].onblur = function(){removeClassName(this.parentNode.parentNode, "focused")};
		}
	}
}

function initAutoResize() {
	//var par = window.location.href.toString();
	//parent.location = par+'#height='+document.body.offsetHeight;
}

function clearSafariRadios() {
	for(var i = 0; i < highlight_array.length; i++) {
		if(highlight_array[i].parentNode) {
			removeClassName(highlight_array[i].parentNode.parentNode, 'focused');
		}
	}
}

function ifInstructs(){
	var container = document.getElementById('public');
	if(container){
		removeClassName(container,'noI');
		var instructs = getElementsByClassName(document,"*","instruct");
		if((container.offsetWidth <= 450) || (instructs == '')){
			addClassName(container,'noI',true);
		}
	}
}

function browserDetect(){
	var detect = navigator.userAgent.toLowerCase();
	var container = document.getElementsByTagName('html');
	if(detect.indexOf('safari') + 1){
		addClassName(container[0], 'safari', true);
	}
	if(detect.indexOf('firefox') + 1){
		addClassName(container[0], 'firefox', true);
	}
}

function checkPaypal() {
	if(document.getElementById('merchant')) {
		document.getElementById('merchantMessage').innerHTML = 'Your order is being processed. Please wait while the page redirects to the merchant checkout.';
		document.getElementById('merchantButton').style.display = 'none';
		document.getElementById('merchant').submit();
	}
}

function checkMechanicalTurk() {
	if(document.getElementById('mechanicalTurk')) {
		document.getElementById('merchantMessage').innerHTML = 'Your submission is being processed. You will be redirected shortly.';
		document.getElementById('merchantButton').style.display = 'none';
		document.getElementById('mechanicalTurk').submit();
	}
}

/*--------------------------------------------------------------------------*/

//http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

//http://www.bigbold.com/snippets/posts/show/2630
function addClassName(objElement, strClass, blnMayAlreadyExist){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      if ( blnMayAlreadyExist ){
         var strClassUpper = strClass.toUpperCase();
         for ( var i = 0; i < arrList.length; i++ ){
            if ( arrList[i].toUpperCase() == strClassUpper ){
               arrList.splice(i, 1);
               i--;
             }
           }
      }
      arrList[arrList.length] = strClass;
      objElement.className = arrList.join(' ');
   }
   else{  
      objElement.className = strClass;
      }
}

//http://www.bigbold.com/snippets/posts/show/2630
function removeClassName(objElement, strClass){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      var strClassUpper = strClass.toUpperCase();
      for ( var i = 0; i < arrList.length; i++ ){
         if ( arrList[i].toUpperCase() == strClassUpper ){
            arrList.splice(i, 1);
            i--;
         }
      }
      objElement.className = arrList.join(' ');
   }
}

//http://ejohn.org/projects/flexible-javascript-events/
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj["e"+type+fn] = fn;
    obj[type+fn] = function() { obj["e"+type+fn]( window.event ) };
    obj.attachEvent( "on"+type, obj[type+fn] );
  } 
  else{
    obj.addEventListener( type, fn, false );	
  }
}

function changeClass(elementName, newClassName){
	var elem = document.getElementById("fo6li" + elementName);
	elem.className = newClassName;
}
function getFieldValue(fieldNumber){
	
	var fld = "Field" + fieldNumber;
	
	var x=document.getElementById("empwork");
	for (var i=0;i<x.length;i++){
		if(x.elements[i].id == fld){
			elem = x.elements[i].value;
		}
	}
	return elem;
}

function setFieldValue(fieldNumber, _value){
	
	var fld = "Field" + fieldNumber;
	
	var x=document.getElementById("formpart01");
	for (var i=0;i<x.length;i++){
		if(x.elements[i].id == fld){
			x.elements[i].value = _value;
		}
	}
}

function isNotBlank(fld){
	var ret = true;
	var _element = getFieldValue(fld); 
	if(_element.length == 0){
		changeClass(fld, "error");
		ret = false;
	}else{
		changeClass(fld, "");
	}
	return ret;
}

function validateForm(x) {
	var ret = true;
	var fld = "";
	
	// name :
	fld = "23"; // Field23
	var _lname = getFieldValue(fld); // Last name
	fld = "22"; // Field22
	var _fname = getFieldValue(fld); // First name
	if(_fname.length == 0 && _lname.length == 0){
		changeClass(fld, "error");
		ret = false;
	}else{
		if(_fname.length == 0){
			changeClass(fld, "error");
			ret = false;
			//alert("First");
		}
		else if(_lname.length == 0){
			changeClass(fld, "error");
			ret = false;
		}
		else{
			changeClass(fld, "");
		}
	}
	
	// Title : Field13
	fld = "12";
	if(isNotBlank(fld)){
		var _title = getFieldValue(fld); 
	}
	else{
		ret = false;
	}

	// email address : Field13
	fld = "13";
	if(isNotBlank(fld)){
		var _email = getFieldValue(fld); 
		if(echeck(_email) == false){
			changeClass(fld, "error");
			ret = false;
		}
	}
	else{
		ret = false;
	}
	
	// phone :
	fld = "25-2"; // Field25-2
	var _ph3 = getFieldValue(fld); // ####
	fld = "25-1"; // Field25-1
	var _ph2 = getFieldValue(fld); // ###
	fld = "25"; // Field25
	var _ph1 = getFieldValue(fld); // (###)
	if(_ph3.length < 4 || _ph2.length < 3 || _ph1.length < 3){
		changeClass(fld, "error");
		ret = false;
	}else{
		if(isNum(_ph3) && isNum(_ph2) && isNum(_ph1)){
			changeClass(fld, "");
		}else{
			changeClass(fld, "error");
			ret = false;
		}
	}

	// Provinece/State : Field17
	fld = "17";
	if(isNotBlank(fld)){
		var _prov = getFieldValue(fld); 
	}
	else{
		ret = false;
	}

	// Country : Field18
	fld = "18";
	if(isNotBlank(fld)){
		var _cnty = getFieldValue(fld); 
	}
	else{
		ret = false;
	}

	// Company : Field34
	fld = "34";
	if(isNotBlank(fld)){
		var _cmpy = getFieldValue(fld); 
	}
	else{
		ret = false;
	}

	// People to Hire : Field32
	fld = "32";
	if(isNotBlank(fld)){
		var _ppl = getFieldValue(fld); 
	}

/*	if(isNotBlank(fld)){
		var _ppl = getFieldValue(fld); 		
		if(parseInt(_ppl) > 0){
			changeClass(fld, "");
		}else{
			changeClass(fld, "error");
			ret = false;
		}
	}*/

	// Company Size: Field33
	fld = "33";
	if(isNotBlank(fld)){
		var _size = getFieldValue(fld); 
	}

/*	if(isNotBlank(fld)){
		var _size = getFieldValue(fld); 		
		if(parseInt(_size) > 0){
			changeClass(fld, "");
		}else{
			changeClass(fld, "error");
			ret = false;
		}
	}*/
	
	
	// Industry: Field35
	fld = "35";
	if(isNotBlank(fld)){
		var _idry = getFieldValue(fld); 
	}

	return ret;
}

function isNum(str){
	var s;
	var ret = true;
	
	for(var i=0; i<str.length; i++){
		s = str.charAt(i);
		if(isNaN(parseInt(s))){
			ret = false;
		}
	}
	return ret;
}


function echeck(str) {

		var ret = true;
		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		
		if (str.indexOf(at)==-1){
		   ret = false;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   ret = false;
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    ret = false;
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    ret = false;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    ret = false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    ret = false;
		 }
		
		 if (str.indexOf(" ")!=-1){
		    ret = false;
		 }

 		 return ret					
	}
