addEvent(window, 'load', initForm);



var highlight_array = new Array();



function initForm(){

	var paymentRedirecting = checkPaypal();

	browserDetect();

	initializeFocus();

	var activeForm = document.getElementsByTagName('form')[0];

	addEvent(activeForm, 'submit', disableSubmitButton);

	ifInstructs();

	showRangeCounters();

	checkMechanicalTurk();

	if(!paymentRedirecting) initAutoResize();

}



function disableSubmitButton() {

	document.getElementById('saveForm').disabled = true;

}



// 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].onclick = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode.parentNode, "focused", true)};

			fields[i].onfocus = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode.parentNode, "focused", true)};

			highlight_array.splice(highlight_array.length,0,fields[i]);

		}

		else 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 if(fields[i].className.match('other')){

			fields[i].onfocus = function(){clearSafariRadios(); addClassName(this.parentNode.parentNode.parentNode, "focused", true)};

		}

		else {

			fields[i].onfocus = function(){clearSafariRadios();addClassName(this.parentNode.parentNode, "focused", true)};

			fields[i].onblur = function(){removeClassName(this.parentNode.parentNode, "focused")};

		}

	}

}



function initAutoResize() {

	var key = 'wufooForm';

	if(typeof(__EMBEDKEY) != 'undefined') key = __EMBEDKEY;

	if(parent.postMessage) {

		parent.postMessage(document.body.offsetHeight+'|'+key, "*");

	}

	else createTempCookie(key, document.body.offsetHeight);

}



function createTempCookie(name, value)

{

	var date = new Date();

	date.setTime(date.getTime()+(60*1000));

	var expires = "; expires="+date.toGMTString();

	document.cookie = name+"="+value+expires+"; domain=.wufoo.com; path=/";

	if(readTempCookie(name) != value) {

		var script = document.createElement("script");

	    script.setAttribute("src", "http://wufoo.com/forms/height.js?action=set&embedKey="+name+"&height="+value+"&timestamp = "+ new Date().getTime().toString());

	    script.setAttribute("type","text/javascript");

	    document.body.appendChild(script);

	}

}



function readTempCookie(name)

{

	var nameEQ = name + "=";

	var ca = document.cookie.split(';');

	for(var i=0;i < ca.length;i++)

	{

		var c = ca[i];

		while (c.charAt(0)==' ') c = c.substring(1,c.length);

		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);

	}

	return '';

}



function clearSafariRadios() {

	for(var i = 0; i < highlight_array.length; i++) {

		if(highlight_array[i].parentNode) {

			removeClassName(highlight_array[i].parentNode.parentNode.parentNode, 'focused');

		}

	}

}



function ifInstructs(){

	var container = document.getElementById('public');

	if(container){

		removeClassName(container,'noI');

		var instructs = getElementsByClassName(document,"*","instruct");

		if(instructs == ''){

			addClassName(container,'noI',true);

		}

		if(container.offsetWidth <= 450){

			addClassName(container,'altInstruct',true);

		}

	}

}



function browserDetect(){

	var detect = navigator.userAgent.toLowerCase();

	var container = document.getElementsByTagName('html');

	if(detect.indexOf('firefox') + 1){

		addClassName(container[0], 'firefox', true);

	}

	else if(detect.indexOf('chrome') + 1){

		addClassName(container[0], 'chrome', true);

	}

	else if(detect.indexOf('safari') + 1){

		addClassName(container[0], 'safari', true);

	}

}



function checkPaypal() {

	var ret = false;

	if(document.getElementById('merchant')) {

		ret = true;

		if(typeof(__EMBEDKEY) == 'undefined'){

			document.getElementById('merchantMessage').innerHTML = 'Your order is being processed. Please wait a moment while we redirect you to our payment page.';

			document.getElementById('merchantButton').style.display = 'none';

		}

		document.getElementById('merchant').submit();

	}

	return ret;

}



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();

	}

}



function showRangeCounters(){

	counters = getElementsByClassName(document, "em", "currently");

	for(i = 0; i < counters.length; i++) {

		counters[i].style.display = 'inline';

	}

}



function validateRange(ColumnId, RangeType) {

	if(document.getElementById('rangeUsedMsg'+ColumnId)) {

		var field = document.getElementById('Field'+ColumnId);

		var msg = document.getElementById('rangeUsedMsg'+ColumnId);



		switch(RangeType) {

			case 'character':

				msg.innerHTML = field.value.length;

				break;

				

			case 'word':

				var val = field.value;

				val = val.replace(/\n/g, " ");

				var words = val.split(" ");

				var used = 0;

				for(i =0; i < words.length; i++) {

					if(words[i].replace(/\s+$/,"") != "") used++;

				}

				msg.innerHTML = used;

				break;

				

			case 'digit':

				msg.innerHTML = field.value.length;

				break;

		}

	}

}



/*--------------------------------------------------------------------------*/



//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 );	

  }

}