/* Adding the index of function because IE is stupid */
if (!Array.indexOf){
  Array.prototype.indexOf = function (obj, start) {
    for (var i = (start || 0); i < this.length; i++) {
      if (this[i] == obj) {
        return i;
      }
    }
    return -1;
  }
}

function submitForm(formId){
	var f = document.getElementById(formId);
	if(f){f.submit();}
}

function showNotAcceptingMessage(month,brandName){
	var elm1 = document.getElementById("notAcceptingBlock");
	var elm2 = document.getElementById("notAcceptingMessage");
	var school = document.getElementById("notAcceptingSchool");
	school.innerHTML = brandName;
	var m = document.getElementById("notAcceptingMonth");
	m.innerHTML = month;
	elm1.style.display = "block";
	elm2.style.left = (document.body.clientWidth-500)/2+"px";
	elm2.style.display = "block";
	elm1.style.height = "2000px";
	window.scrollTo(0,0);
}

function hideNotAcceptingMessage(){
	var elm1 = document.getElementById("notAcceptingBlock");
	var elm2 = document.getElementById("notAcceptingMessage");
	elm1.style.display = "none";
	elm2.style.display = "none";
	elm1.style.height = "0px";
}

function joinPhone(p1,p2,p3,joined){
	var areas = document.getElementsByName(p1);
	var area = areas[0];
	var part1s = document.getElementsByName(p2);
	var part1 = part1s[0];
	var part2s = document.getElementsByName(p3);
	var part2 = part2s[0];
	var joined = document.getElementById(joined);
	if(area.value != '' && part1.value != '' && part2.value != ''){
		joined.value = "("+area.value+") "+part1.value+"-"+part2.value;
	}
}

function setCheckboxHiddenValue(checkboxId,hiddenId,checkedValue,uncheckedValue){
	var cb = document.getElementById(checkboxId);
	var target = document.getElementById(hiddenId);
	if(cb.checked){
		target.value = checkedValue;
	}else{
		target.value = uncheckedValue;
	}
}

function DataSource(url,pCallback,dojoClass){
	this.dojo = dojoClass;
	
	this.sourceUrl = url;
	
	if(pCallback != null){
		this.callback = pCallback;
	}else{
		this.callback = function(data,args){};
	}
	
	this.query = function(params){
		var qString = "";
		if(params != null){
			for(k in params){
				qString += "&"+k+"="+params[k];
			}
			qString = "?"+qString.substring(1);
		}
		this.dojo.xhrGet({
			    url: this.sourceUrl+qString,
			    handleAs: "json",
			    load: this.callback,
			    error: function(error,args){
					var s = "";
					for(var k in args){
						s += " k="+args[k]+"\n";
					}
					//alert(s+"\n"+error);//this line should be commented out on prod, live on dev
			    }
		});
	}
};

function SelectOptionsDataSource(elmId,url,reqParams,initialValue,dojoInstance){
	var self = this;

	self.selectId = elmId;
	
	self.initialValue = initialValue;
	
	self.requiredParams = reqParams;

	self.getText = function(object){ return object["text"]; }
	
	self.getValue = function(object){ return object["value"]; }
	
	self.load = function(data, args){
		onChangeResponse(self.selectId);
		if(data.length == 0){
			onEmptyResponse(self.selectId);
		}
		data.unshift({id:"", name:"-- Select One --"});
		var selElm = document.getElementById(self.selectId);
		selElm.length = 0;
	 	var curOptGroup = null;
	 	var debugstring="";
		for(var i=0; i<data.length;i++){
			debugstring=debugstring+self.getText(data[i])+" "+self.getValue(data[i])+"\n";
			if(i > 0){
				var theName = self.getText(data[i]);
				var theId = self.getValue(data[i]);
			}else{
				var theName = data[i].name
				var theId = data[i].id;
			}
			if(theId == "OPT_GROUP"){
				var og = document.createElement('optgroup');
				og.label = theName;
				curOptGroup = og;
			}else if(theId == "END_OPT_GROUP"){
				selElm.appendChild(curOptGroup);
				curOptGroup = null;
			}else{
				var opt = document.createElement('option');
				opt.innerHTML = theName;
				opt.value = theId;
				if(curOptGroup != null){
					curOptGroup.appendChild(opt);
				}else{
					selElm.appendChild(opt);
				}
			}
		}
		//Now select the initial value if one was given
		debugstring=debugstring+"init value: "+self.initialValue+"\n";
		for(var idx=0; idx<selElm.options.length; idx++){	
			if(self.initialValue == selElm.options[idx].value){
				selElm.selectedIndex = idx;
				//If preselected value is found, we trigger others
				t = formManager.getLoadTrigger(self.selectId);
				formManager.queryAll(t.affected);
			}
		}
	}
	
	self.dataSource = new DataSource(url,self.load,dojoInstance);

	self.query = function(params){
		var allParams = new Array();
		if(params && params instanceof Array){
			allParams = params;
		}
		if(self.requiredParams){
			for(var i=0; i<self.requiredParams.length; i++){
				var elm = document.getElementById(self.requiredParams[i]);
				if(elm){
					allParams[self.requiredParams[i]] = elm.value;
				}
			}
		}
		self.dataSource.query(allParams);
	};
};

function onChangeResponse(param){}//override
function onEmptyResponse(param){}//override
//function clientSideCleanData(data, id){return data}//override

function FormManager(webId,dojoInst){
	var self = this;
	
	self.selectBoxDataSources = new Array();
	
	self.loadElements = new Array();
	
	self.loadTriggers = new Array();
	
	self.websiteId = webId;
	self.previousValues = new Array("t");
	
	self.dojoInstance = dojoInst;
	
	self.addPreviousValues = function (ar){
		self.previousValues = ar;
	}
	self.addSelectBoxDataSource = function(elmId,dataSourceUrl,reqParams,initialValue){
		self.selectBoxDataSources[elmId] = 
			new SelectOptionsDataSource(elmId,dataSourceUrl,reqParams,initialValue,self.dojoInstance);
	}
	
	self.getSelectBoxDataSource = function(elmId){
		return self.selectBoxDataSources[elmId];
	}
	
	self.addLoadElement = function(elmId){
		self.loadElements.push(elmId);
	}
	
	
	self.addLoadTrigger = function(elmId,trigger,affected){
		self.loadTriggers.push({"elementId":elmId,"trigger":trigger,"affected":affected});
	}
	
	self.getLoadTrigger = function(elmId){
		for(var i=0; i<self.loadTriggers.length; i++){
			var t = self.loadTriggers[i];
			if(t.elementId == elmId){
				return t;
			}
		}
		return false;
	}
	
	self.queryAll = function(elements){
		if(elements){
			for(var i=0; i<elements.length; i++){
				var params = new Array(); 
				params["website_id"] = self.websiteId;
				for ( keyVar in self.previousValues ) {
   					//alert(keyVar+" "+self.previousValues[keyVar]);
   					params[keyVar] = self.previousValues[keyVar];
				}
				if(self.selectBoxDataSources[elements[i]]){
					self.selectBoxDataSources[elements[i]].query(params);
				}
			}
		}
	}
	
	self.init = function(){
		//Initialize all loadElements
		self.queryAll(self.loadElements);
		//Initialize loadTriggers
		for(var i=0; i<self.loadTriggers.length; i++){
			var params = new Array(); 
			params["website_id"] = self.websiteId;
			var elmTrigger = self.loadTriggers[i];
			var elm = document.getElementById(elmTrigger.elementId);
			elm[elmTrigger.trigger] = function(){
				t = formManager.getLoadTrigger(this.id);
				self.queryAll(t.affected);
			}
		}
		self.initPrePopTriggers();
		self.initCustom();
	} 
	
	self.initPrePopTriggers = function(){
		for(var i=0; i<document.forms.length; i++){
			for(var k=0; k<document.forms[i].elements.length; k++){
				var trig = formManager.getLoadTrigger(document.forms[i].elements[k].id);
				if(trig){
					var e = document.getElementById(trig.elementId);
					if (e && typeof(e.nodeName) != 'undefined' && (e.nodeName != 'SELECT')) {
						self.queryAll(trig.affected);
					}
				}
			}
		}
	}
	
	//Override
	self.initCustom = function(){
		
	}
};

function setFormValue(theForm,fieldName,fieldValue){
	for(var i=0; i<theForm.elements.length;i++){
		if(theForm.elements[i].name == fieldName){
			theForm.elements[i].value = fieldValue;
			break;
		}
	}
}

function FormCollection(formIdsArray,masterFormId){
	var self = this;
	self.formIds = formIdsArray;
	self.masterId = masterFormId;
	self.collectAndSubmit = function(){
		var masterForm = document.getElementById(masterFormId);
		for(var i=0; i<self.formIds.length;i++){
			var formId = self.formIds[i];
			var theForm = document.getElementById(formId);
			var fields = theForm.elements;
			for(var k=0; k<fields.length;k++){
				setFormValue(masterForm,fields[k].name,fields[k].value)
			}
		}
		if(self.isValid(masterForm)){
			masterForm.submit();
		}
	}
	
	self.isValid = function(aForm){
		for(var i=0; i<aForm.elements.length;i++){
			aForm.elements[i].name +"="+aForm.elements[i].value
			if(aForm.elements[i].name == "interest" && aForm.elements[i].value == "0"){
				alert("Please enter your program of interest");
				return false;
			}
			if(aForm.elements[i].name == "email" && aForm.elements[i].value == ""){
				alert("Please enter a valid email");
				return false;
			}
			if(aForm.elements[i].name == "zip" && aForm.elements[i].value == ""){
				alert("Please enter your zip code");
				return false;
			}
			if((aForm.elements[i].name == "first_name" && aForm.elements[i].value == "") || 
					aForm.elements[i].name == "last_name" && aForm.elements[i].value == ""){
				alert("Please enter both your first and last name");
				return false;
			}
		}
		return true;
	}
};



function isZip(s) {
     // Check for correct zip code
     reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);

     if (!reZip.test(s)) {
          return false;
     }
	return true;
}



var oktoleave=0;
var acceptabledomains='abovelinemedia.com,plpf:8887,misc,unknown,cma:8887,ec2-174-129-108-83.compute-1.amazonaws.com,edulocate.com';

function configLinks(){
	var string='';
	$("a").each(
		function(i){
			var domain=getDomain(this.href);
			if(acceptabledomains.indexOf(domain)>=0){
				string+=domain+"\n";
				this.onclick=function(){oktoleave=1;}
			}
		}
	);
	//alert(string);	
	$("area").each(
		function(i){this.onmousedown=function(){oktoleave=1;} }
	);
	$("form").each(
		function(i){this.onsubmit=function(){oktoleave=1;} }
	);
	$("input").each(
		function(i){//can't use onchange because that overrides the logic for the forms
			this.onkeyup=resetcounter;
		}//this is for the session pop
	);
	$("select").each(
		function(i){this.onclick=resetcounter;}//this is for the session pop
	);
}

function getDomain (thestring) {
	var urlpattern = new RegExp("(http|ftp|https)://(.*?)/.*$");
	var parsedurl = thestring.match(urlpattern);
	var isweird=thestring.indexOf('document.location')>0;
	if(parsedurl && parsedurl[2])
		return parsedurl[2];
	else if(isweird){/*some times the href is not a link but a javascript call that sets the document.location to something, we have to NOT show the popup in that case*/
		return 'misc';
	}
	else{
		return 'unknown';
	}
}
function ExitPop(e){
	if(oktoleave==0){
		var windowname = 'exitpop';
		var url="index/exit";
		//var w = window.open(url, windowname, 'top=100,left=100,height=306,width=620,location=no,resizable=no,scrollbars=no,status=no');
	}
}




var closetime = 0; // Close window after __ number of seconds? 0 = do not close, anything else = number of seconds
var sessioncount=0;
var delay = 3*60;  // time in seconds before popup opens
delay=10;//TODO remove this

function doSessionPop() {
	//document.getElementById("header").innerHTML=sessioncount;//debugging code, watch the count, TODO remove this
	if(sessioncount>=delay){
		windowprops = 'toolbar=no,statusbar=no,location=no,scrollbars=yes,resizable=yes,width=520,height=250';
		url = "index/reminder";
		//preview = window.open(url, "preview", windowprops);
		if (closetime) setTimeout("preview.close();", closetime*1000);
		sessioncount=-1;//this turns everything off
	}
	else if(sessioncount>=0){
		sessioncount++;
		timer = setTimeout("doSessionPop()", 1000);
	}	
}

function resetcounter(){
	sessioncount=0;
}

function submitFormFromPop(){
	for(var i=0;i<5;i++){
		var f = document.getElementById('form_'+i);
		if(f) {
			oktoleave=1;//put this here so the exit pop doesn't go
			f.submit();
			return;//quit the function
		}
	}
}









