//keep initial values as 0, this case if no form exist, JS will not try to display it:
var iFormPages=0, iCurrPage=0, aFormInputs = new Array(), aRefAttributes = new Array(), aSummaryKeys=new Array(), referralKey = "" , aFormSections = new Array(), bUpdate=false, sRSVP=null, isSF=false, iFormName = "", iProductsId = "", objHidden = null, iFocus = 0;;
var oMeta=null, oMetaSF=null, oMetaEmailDest=null, oMetaEmailConf=null;
var industryType=null;
(window.attachEvent)?window.attachEvent('onload',setFocus):window.addEventListener('load',setFocus,false);
//(window.attachEvent)?window.attachEvent('onload',chkOffshore):window.addEventListener('load',chkOffshore,false);
//debug for Anil:
var okToSubmit=false;

//for FF fix LS footer placement bug:
//window.addEventListener('load', fixFFFooter, false);

//cancel updates on current page, and goto verify page
function cancelToVerify() {
  //since we are in update mode, values are already stored in verify page
  //copy them over to current page, and switch back to verify page:
  	bUpdate = false;
  for (var i=0; i < aFormInputs[iCurrPage].length; i++) {
	if(typeof aFormInputs[iCurrPage][i]=='object') { //object can be array: radio, checkbox, multi-select.
		var objId = document.getElementsByName(aFormInputs[iCurrPage][i][0])[0].id;
		var typeIdentifier = objId.substring(0,1);
	  var iNum=1, oArr=$(typeIdentifier+aFormInputs[iCurrPage][i]+iNum);
	  if(oArr) { //radio, or checkbox
	  var sSelects=$(aFormInputs[iCurrPage][i]+'Verify').innerHTML; //get object's selected values:
	  var aSelects=sSelects.split(', ');
	  do { //loop through all object's elements, unselect all, then re-set selected ones:
	    oArr.checked=false; //unselect all
		for(var j=0;j<aSelects.length;j++)if(oArr.getAttribute('label')==aSelects[j])oArr.checked=true;
		oArr=$(typeIdentifier+aFormInputs[iCurrPage][i]+(++iNum)); //get next element
	  } while(oArr);
	  } else { //multi-select
		var sSelects=$(aFormInputs[iCurrPage][i]+'Verify').innerHTML; //get object's selected values:
		var aSelects=sSelects.split(', ');
	    var oInput=$(aFormInputs[iCurrPage][i]), iLen=oInput.options.length;
		for(var k=0;k<iLen;k++){ //loop through all object's elements, unselect all, then re-set selected ones:
		  oInput.options[k].selected=false; //unselect all
		  for(var j=0;j<aSelects.length;j++)if(oInput.options[k].value==aSelects[j])oInput.options[k].selected=true;
		} //for
	  } //if oArr
	} else $(aFormInputs[iCurrPage][i]).value=$(aFormInputs[iCurrPage][i]+'Verify').innerHTML;
  } //for
  hidePageErrs(iCurrPage); //hide errors in case user generated them through "Update", then decided to "Cancel"
  hideFormPage(iCurrPage);displayFormPage('Verify');window.scrollTo(0,0);
} //cancelToVerify()

//check whether to display or hide section headers on verify page
//if all input elements for given section are blank, hide section header:
function checkVerifySections() {
  for (var i=1;i<aFormInputs.length;i++)
    for(var j=0;j<aFormSections[i].length;j++){ //sections loop
	  var bSection=false, sValue='';
	  var nPipePos=aFormSections[i][j].indexOf('|');
	  var nStart=parseInt(aFormSections[i][j].substring(0,nPipePos));
	  var nEnd=parseInt(aFormSections[i][j].substr(nPipePos+1));
		//check if value exists, obtain object's value from verify page: 
		for(var k=nStart;k<=nEnd;k++)
	    if(typeof aFormInputs[i][k]=='object'){if(trimSpace($(aFormInputs[i][k]+'Verify').innerHTML)){bSection=true;break;}
      } else {
		  if($(aFormInputs[i][k]).type!='hidden' && trimSpace($(aFormInputs[i][k]).value)!=""){
			if($('Q'+aFormInputs[i][k]).className == 'formFieldCMS' 
				|| $('Q'+aFormInputs[i][k]).style.display == 'block')bSection=true;break;}
			}
	  var nSection=j+1, oSection=$('p'+i+'_s'+nSection); //try to obtain object, might not exist
		//hide/show section, they are in "p9_s9" (page number and section number) format:
	  if(oSection){
		  if(!bSection)oSection.style.display='none';
		  else oSection.style.display='';
		} //if oSection
  } //for aFormSections
} //checkVerifySections()

//display form page with spacified page index:
function displayFormPage(iPageIndex) {
  $("formPage"+iPageIndex).style.display="block";iCurrPage=iPageIndex;
} //displayFormPage()

//edit specific page (from verify page):
function editPage(iPage) {
  hideFormPage('Verify');
  if(!bUpdate) {
	//switch to update mode:
	switchToUpdateMode(iPage); bUpdate=true;
  } //if !bUpdate
  displayFormPage(iPage);window.scrollTo(0,0);
} //editPage()

//fix LiveSite bug for footer placement in FireFox:
function fixFFFooter(sFormName) {
  if (navigator.userAgent.indexOf('MSIE ')==-1 || navigator.userAgent.indexOf('MSIE 7.')!=-1) {$(sFormName).parentNode.style.height="auto";}
} //fixFFFooter()

//fix LiveSite bug for footer placement:
function fixFooter(sFormName){$(sFormName).parentNode.style.height="auto";}

//form constructor for meta data:
function formConstr(_formId, _formName, _formType, _formAction, _formSuccess, _formSuccess2, _formError, _formExpDate) {
  this.formId=_formId; this.formName=_formName; this.formType=_formType; this.formAction=_formAction;
  this.formSuccess=_formSuccess; this.formSuccess2=_formSuccess2; this.formError=_formError; this.formExpDate=_formExpDate;
} //formConstr()

//form constructor for Email confirmation data:
function formConstrEmailConf(_send, _from, _fromField, _to, _toField, _subject, _body, _inclFields, _attachment, _template) {
  this.send=_send; this.from=_from; this.fromField=_fromField; this.to=_to; this.toField=_toField; this.subject=_subject;
  this.inclFields=_inclFields; this.body=_body; this.attachment=_attachment; this.template=_template;
} //formConstrEmailConf()

//form constructor for Email destination data:
function formConstrEmailDest(_from, _fromField, _to, _cc, _bcc, _subject, _subjectField) {
  this.from=_from; this.fromField=_fromField; this.to=_to; this.cc=_cc; this.bcc=_bcc; this.subject=_subject; this.subjectField=_subjectField;
} //formConstrEmail()

//form constructor for SalesForce data:
function formConstrSF(_url, _oid, _leadSource, _webToLead, _campaignId, _recordType, _nzmd, _rsvp) {
  this.url=_url; this.oid=_oid; this.leadSource=_leadSource; this.webToLead=_webToLead;
  this.campaignId=_campaignId; this.recordType=_recordType; this.nzmd=_nzmd; this.rsvp=_rsvp;
} //formConstrSF()

//return form page index value offset from current:
function getFormPageIndex(iOffset) {
  var iTempIndex=Number(iCurrPage)+Number(iOffset);
  while(iTempIndex<1 || iTempIndex>iFormPages) {
	if(iTempIndex>iFormPages)iTempIndex-=iFormPages;
	else if(iTempIndex<1)iTempIndex+=iFormPages;
  } //while
  return iTempIndex;
} //getArrIndex()

//generate XML of passed form name
function generateXML(sForm) {
  var sSuccess=sRSVP=='Declined'?oMeta.formSuccess2:oMeta.formSuccess;
  var sXML='<Form name="'+oMeta.formName+'" type="'+oMeta.formType+'" action="'+oMeta.formAction+'" expDate="'+oMeta.formExpDate+
  '" successpage="'+sSuccess+'" errorpage="'+oMeta.formError+'">\n';
  sXML+=generateXMLFields();
  sXML+=generateXMLSF(); //SalesForce
  sXML+=generateXMLEmailDest(); //Email destination
  sXML+=generateXMLEmailConf();  //Email Confirmation
  sXML+='</Form>';
//populateDiv(sXML);
/*
if( navigator.userAgent.indexOf( 'MSIE' ) == -1 )populateDiv(sXML);
else okToSubmit=true;
*/
//alert(sXML);
  return sXML;
} //generateXML()

//generate form email confirmation meta data in XML format
function generateXMLEmailConf() {
  var sXML='<EmailConfirmation send="'+oMetaEmailConf.send+'" template="'+oMetaEmailConf.template+'">\n';
  var sEmailFrom=getEmailConfFrom();
  //cc and bcc always blank, used only for parsing purposes:
  sXML+='<from><![CDATA['+sEmailFrom+']]></from><to><![CDATA['+getEmailConfTo()+']]></to><cc></cc><bcc></bcc><subject>'+oMetaEmailConf.subject+'</subject>\n';
  sXML+='<body><![CDATA['+oMetaEmailConf.body+']]></body><includeFields>'+oMetaEmailConf.inclFields+'</includeFields><attachment>'+oMetaEmailConf.attachment+'</attachment>\n';
  return sXML+'</EmailConfirmation>\n';
} //generateXMLEmailConf()

//generate form email destination meta data in XML format
function generateXMLEmailDest() {
  var sXML='<EmailDestination>\n';
  var sEmailDest=getEmailDestFrom();
  var sEmailDestSubject=getEmailDestSubject();
  //body and attachment always blank, used only for parsing pursposes:
  sXML+='<from><![CDATA['+sEmailDest+']]></from><to><![CDATA['+oMetaEmailDest.to+']]></to><cc><![CDATA['+oMetaEmailDest.cc+']]></cc><bcc><![CDATA['+oMetaEmailDest.bcc+']]></bcc>\n';
  sXML+='<subject>'+sEmailDestSubject+'</subject><body></body><attachment></attachment>\n';
  return sXML+'</EmailDestination>\n';
} //generateXMLEmailDest()

//generate form fields data in XML format
function generateXMLFields() {
  var sXML='<Fields>\n', sField;
  //aFormInputs[0] has form metadata
/*  
  for(var i=0;i<aFormInputs[0].length;i++) {
//TODO: get meta fields here (possibly)
  } //for metadata
*/
  if(oMeta.formId){
	sXML+='<Field name="formId" salesforceid="" validation="" email="yes"><value>'+oMeta.formId+'</value></Field>\n';
  }
  for(var j=1;j<aFormInputs.length;j++)
    for(var k=0;k<aFormInputs[j].length;k++) {
	  sField=aFormInputs[j][k];
	  //for string types get value from verify page, for objects loop through actual form objects to get value:
	  if(typeof sField=='object') {
		var objId = document.getElementsByName(sField[0])[0].id;
		var typeIdentifier = objId.substring(0,1);
		var m=1, oArr=$(typeIdentifier+sField+m);
		if(oArr) { //radio, or checkbox:
		do {
		  if(oArr.checked){
			  if(oArr.getAttribute("ref")){
				  if(oArr.value == '1') sXML+='<Field name="'+sField+'" salesforceid="'+oArr.getAttribute('sf')+'" validation="" email="'+oArr.getAttribute('email')+'" secure="'+oArr.getAttribute('secure')+'" label="'+getXMLValueAttribute(oArr.getAttribute('label'))+'"><value>'+oArr.getAttribute("ref")+'</value></Field>\n';
			  }
			  else{ 
				  if(!isNaN(oArr.value))sXML+='<Field name="'+sField+'" salesforceid="'+oArr.getAttribute('sf')+'" validation="" email="'+oArr.getAttribute('email')+'" secure="'+oArr.getAttribute('secure')+'" label="'+getXMLValueAttribute(oArr.getAttribute('label'))+'"><value>'+getXMLValue(oArr.value)+'</value></Field>\n';
				  else sXML+='<Field name="'+sField+'" salesforceid="'+oArr.getAttribute('sf')+'" validation="" email="'+oArr.getAttribute('email')+'" secure="'+oArr.getAttribute('secure')+'" label="'+getXMLValueAttribute(oArr.getAttribute('label'))+'"><value>'+oArr.value+'</value></Field>\n';
			  }
		  }
		  oArr=$(typeIdentifier+sField+(++m));
		} while(oArr);
		} else { //multi-select:
		  var oInput=$(sField), iLen=oInput.options.length;
		  for(var m=0;m<iLen;m++)if(oInput.options[m].selected)sXML+='<Field name="'+sField+'" salesforceid="'+oInput.getAttribute('sf')+'" validation="" email="'+oInput.getAttribute('email')+'" secure="'+oInput.getAttribute('secure')+'" label="'+getXMLValueAttribute(oInput.getAttribute('label'))+'"><value>'+getXMLValue(oInput.options[m].value)+'</value></Field>\n';
		} //if oArr
	  } else {
		  if($(sField+'Verify')){
			if(trimSpace($(sField+'Verify').innerHTML)!='')
				sXML+='<Field name="'+sField+'" salesforceid="'+$(sField).getAttribute('sf')+'" validation="" email="'+$(sField).getAttribute('email')+'" secure="'+$(sField).getAttribute('secure')+'" label="'+getXMLValueAttribute($(sField).getAttribute('label'))+'"><value>'+$(sField+'Verify').innerHTML+'</value></Field>\n';
		  }
		  else sXML+='<Field name="'+sField+'" salesforceid="'+$(sField).getAttribute('sf')+'" validation="" email="'+$(sField).getAttribute('email')+'" secure="'+$(sField).getAttribute('secure')+'" label="'+getXMLValueAttribute($(sField).getAttribute('label'))+'"></Field>\n';
		  /*if($(sField+'Verify'))
			sXML+='<Field name="'+sField+'" salesforceid="'+$(sField).getAttribute('sf')+'" validation="" email="'+$(sField).getAttribute('email')+'" secure="'+$(sField).getAttribute('secure')+'" label="'+getXMLValueAttribute($(sField).getAttribute('label'))+'"><value>'+$(sField+'Verify').innerHTML+'</value></Field>\n';
		  else sXML+='<Field name="'+sField+'" salesforceid="'+$(sField).getAttribute('sf')+'" validation="" email="'+$(sField).getAttribute('email')+'" secure="'+$(sField).getAttribute('secure')+'" label="'+getXMLValueAttribute($(sField).getAttribute('label'))+'"></Field>\n';*/
		  }
	} //for (inner)
	if(sRSVP!='false')sXML+='<Field name="acceptDecline" salesforceid="'+oMetaSF.rsvp+'" validation="" email="no"><value>'+sRSVP+'</value></Field>\n';
	//else sXML+='<Field name="acceptDecline" salesforceid="" validation="" email="yes"><value></value></Field>\n';
  return sXML+'</Fields>\n';
} //generateXMLFields()

//generate form SalesForce meta data in XML format
function generateXMLSF() {
  var sXML='<SalesForce>\n';
  sXML+='<url>'+oMetaSF.url+'</url>\n';
  sXML+='<oid>'+oMetaSF.oid+'</oid>\n';
  //sXML+='<lead_source>'+oMetaSF.leadSource+'</lead_source>\n';
  sXML+='<leadSource>'+oMetaSF.leadSource+'</leadSource>\n';
  sXML+='<webToLead>'+oMetaSF.webToLead+'</webToLead>\n';
  //sXML+='<Campaign_ID>'+oMetaSF.campaignId+'</Campaign_ID>\n';
  sXML+='<campaignId>'+oMetaSF.campaignId+'</campaignId>\n';
  sXML+='<recordType>'+oMetaSF.recordType+'</recordType>\n';
  sXML+='<NZMD>'+oMetaSF.nzmd+'</NZMD>\n';
  return sXML+'</SalesForce>\n';
} //generateXMLSF()

//get email "from" confirmation value both from "from" and email from field:
function getEmailConfFrom() {
  var emailConf=oMetaEmailConf.from;
  if(oMetaEmailConf.fromField!='')emailConf+=getFieldValue(oMetaEmailConf.fromField);
  return emailConf;
} //getEmailConfFrom()

//get email "to" confirmation value both from "to" and email to field:
function getEmailConfTo() {
  var emailConf=oMetaEmailConf.to;
  if(oMetaEmailConf.toField!='')emailConf+=getFieldValue(oMetaEmailConf.toField);
  return emailConf;
} //getEmailConfTo()

//get email destination "from" value, get it from "from" as well as from "fromField":
function getEmailDestFrom() {
  var emailDest=oMetaEmailDest.from;
  if(oMetaEmailDest.fromField!='')emailDest+=getFieldValue(oMetaEmailDest.fromField);
  return emailDest;
} //getEmailDestTo()

//get email destination "subject" value, get it from "subject" as well as from "subjectField":
function getEmailDestSubject(){
  var emailSub=oMetaEmailDest.subject;
  if(oMetaEmailDest.subjectField!='')emailSub+=getFieldValue(oMetaEmailDest.subjectField);
  return emailSub;
} //getEmailDestSubject()

//get "field" value for specified field
function getFieldValue(sFieldValue) {
  for(var i=1;i<=iFormPages;i++)
    for (var j=0;j<aFormInputs[i].length;j++)
      if(aFormInputs[i][j]==sFieldValue){
		if($(aFormInputs[i][j]+'Verify'))return $(aFormInputs[i][j]+'Verify').innerHTML;
		else return $(aFormInputs[i][j]).value;
  }
  return '';
} //getFieldValue()

//get user selected value(s) from array element such as radio, checkbox, or multi-select:
function getSelected(sInputElement) {
	var typeIdentifier = "" , objId = "";
	var objNames = document.getElementsByName(sInputElement[0]);
	var objFirstChild = objNames[0];
	if(objFirstChild){
		objId = document.getElementsByName(sInputElement[0])[0].id;
		typeIdentifier = objId.substring(0,1);
	}
  var i=1, oArr=$(typeIdentifier+sInputElement+i), sReturn="";
  if($('Q'+sInputElement).className == 'formFieldHiddenCMS' 
		&& $('Q'+sInputElement).style.display != 'block')return sReturn;
  if(oArr) { //radio, or checkbox
  do {
	if(oArr.checked){
		if(oArr.getAttribute('verifyLabel')!=null)sReturn+=oArr.getAttribute('verifyLabel')+', ';
		else sReturn+=oArr.getAttribute('label')+', ';
	}//Saurabh 16/06/09- Modified the parameter within the getAttribute() from label to verifyLabel to display 'Yes' or 'No' on verify page
	//Saurabh 03/08/09- added an if/else in case the verifyLabel attribute is not there (did in CTS Portal) 
	oArr=$(typeIdentifier+sInputElement+(++i));
  } while(oArr);
  } else { //multi-select
    var oInput=$(sInputElement), iLen=oInput.options.length; 
	for(var j=0;j<iLen;j++)if(oInput.options[j].selected)sReturn+=oInput.options[j].text+', ';
  } //if oArr
  return sReturn.substr(0,sReturn.lastIndexOf(', '));
} //getSelected();

//return valid XML value
//if sValue is null, return nothing, otherwise check for XML not allowed chars, and surround with CDATA
function getXMLValue(sValue){
  if(!trimSpace(sValue))return '';
  if(sValue.match('&')!=-1)return '<![CDATA['+sValue+']]>';
  else return sValue;
} //getXMLValue()

//return valid XML value which can be used as attribute value
//remove ampersands and replace double quotes with two single quotes
function getXMLValueAttribute(sValue){
  if(!trimSpace(sValue))return '';
  sValue=sValue.replace(/&/g,"");
  sValue=sValue.replace(/"/g,"''");
  return sValue;
} //getXMLValueAttribute()

//hide form page with spacified page index:
function hideFormPage(iPageIndex) {
	//alert($("formPage"+iPageIndex));
  $("formPage"+iPageIndex).style.display="none";
  iCurrPage=0;
} //hideFormPage()

//hide all page error messages:
function hidePageErrs(iPageIndex) {
  $("formPage"+iPageIndex+"Err").style.display="none";
  var oDivs=$("formPage"+iPageIndex).getElementsByTagName("div");
  for(var i=0; i < oDivs.length; i++)if(oDivs[i].className=="formErrorFieldCMS")oDivs[i].style.display="none";
} //hidePageErrs()

//temporary function to populate div so Anil can see generated XML in text format:
function populateDiv(sXML) {
  $('hiddenXML').innerHTML=sXML;
  $('debugId').style.display='block';
  okToSubmit=true;
} //populateDiv()

//populate verify page with user entered/selected values.
//for blank values suppress display of that value
//if all section values blank, suppress section header display:
function populateVerifyPage() {
  for (var i=1; i < aFormInputs.length; i++)
    for (var j=0; j < aFormInputs[i].length; j++){
      var oValueWrap=$(aFormInputs[i][j]+'VerifyWrap'), sValue=null;
      if(typeof aFormInputs[i][j]=='object'){
        sValue=getSelected(aFormInputs[i][j]);
        $(aFormInputs[i][j]+'Verify').innerHTML=sValue;
      } else {
		  if($(aFormInputs[i][j]).type == "select-multiple")
			sValue=getSelected(aFormInputs[i][j]);
		  else if($(aFormInputs[i][j]).type == "hidden"){
			if($(aFormInputs[i][j]).value == '{FORM_ID}')
				$(aFormInputs[i][j]).value = Math.random() + '_' + new Date().getTime();
			sValue=$(aFormInputs[i][j]).value;
		  }
		  else{
			if($('Q'+aFormInputs[i][j]).className == 'formFieldCMS' 
				|| $('Q'+aFormInputs[i][j]).style.display == 'block')
					sValue=$(aFormInputs[i][j]).value;
		  }
		if(sValue!=null)
			$(aFormInputs[i][j]+'Verify').innerHTML=sValue;
      } //if object
      if(!sValue || trimSpace(sValue)=="")oValueWrap.style.display="none";
      else oValueWrap.style.display="";
    } //for inner
    checkVerifySections();
} //populateVerifyPage()

//rotate to form page offset from current:
function rotate(iOffset) {
	var isEdit=null;
   var iNextIndex=getFormPageIndex(iOffset);
  if(iOffset == "1"){
	isEdit=$('editable').value;
	if(isEdit == "no"){
		backButtonOverrideBody();
		var btnSection = $('formButtonSection'+iNextIndex);
		var childArr=btnSection.childNodes;
		for(var i=0;i<childArr.length;i++){
			if(childArr[i].name == 'Back') childArr[i].style.display='none';
		}
	}
  }
  if(iNextIndex!=iCurrPage){hideFormPage(iCurrPage);displayFormPage(iNextIndex);window.scrollTo(0,0);}
} //rotate()

//rotate to verify page:
function rotateToVerify() {
	bUpdate = false;
  populateVerifyPage();hideFormPage(iCurrPage);displayFormPage('Verify');window.scrollTo(0,0);
} //rotateVerify()

//attempt to set focus on 1st element on current page:
function setFocus() {
  var sFocus=aFormInputs[iCurrPage][0],oFocus=$(sFocus);
  if(oFocus)oFocus.focus();
} //setFocus()

//show page error
function showErrPage(iPageIndex) {
  $("formPage"+iPageIndex+"Err").style.display="block";
  window.scrollTo(0,190);
} //showErrPage()

//show required field errors for passed input element:
function showErrReq(sInputElement) {
  var oErr=$(sInputElement+"ErrReq");
  if(oErr)oErr.style.display="block";
} //showErrReq()

//show validation field errors for passed input element:
function showErrVal(oInputElement,iNum) {
  var oErr=$(oInputElement.name+"ErrVal"+iNum);
  if(oErr)oErr.style.display="block";
} //showErrVal()

function submitForm(sForm) {
/*
if(!okToSubmit) {
  $('xmlform').value=generateXML(sForm);
  //return false;
} else {
*/
  $('xmlform').value=generateXML(sForm);
//document.write($('xmlform').value);return false;
//okToSubmit=false;
  oForm=$(oMeta.formName);
  if(oMeta.formName!="manageprofile")
	oForm.action='/tucms/requestController.do';
  oForm.method='POST';
  //DIRECTLY CALL FIRECLICK'S ONSUBMIT HANDLER: (unless it's offshore, then skip):
  //if(oMeta.formName!="manageprofile"){
	//if(document.URL.indexOf("isOffshore=y")==-1 && navigator.userAgent.indexOf('Safari')==-1){oForm.onsubmit();}}
//alert('will now submit\noForm = '+oForm+'\noForm.name = '+oForm.name+'\noForm.method='+oForm.method+'\nsubmitting to: '+oForm.action);
  oForm.submit();

//} //if okToSubmit

} //submitForm()

function submitFormAccept(sForm) {
  sRSVP='Accepted';submitForm(sForm);
} //submitFormAccept()

function submitFormDecline(sForm) {
  sRSVP='Declined';submitForm(sForm);
} //submitFormDecline()

function submitFormWrap(sForm) {
  sRSVP='false';
 track_step(sForm,new Date().getTime(),Math.random());
  submitForm(sForm);
} //submitFormWrap()

//switch passed input element to edit mode (from error mode):
function switchToEditMode(oInputElement) {
  switch(oInputElement.type){
  	case "text":
  	case "select-one":
  	  if(oInputElement.className.match('Error'))oInputElement.className=oInputElement.className.substring(0,oInputElement.className.lastIndexOf('Error'));
  	  break;
  	default:
  	  if(oInputElement.className.match('Error'))oInputElement.className=oInputElement.className.substring(0,oInputElement.className.lastIndexOf('Error'));
  } //switch
} //switchToErrMode()

//wrapper used by radio and checkbox inputs, loops through all input element
//and call switchToEditMode()
function switchToEditModes(sInputElement){
	var i=1, oArr=$(sInputElement+'S'+i);
	while(oArr){
		switchToEditMode(oArr);
	  oArr=$(sInputElement+'S'+(++i));
  } //while
} //switchToEditModes()

//switch passed input element to error mode (if not already in that mode):
function switchToErrMode(oInputElement){
  //if(iFocus == 0){oInputElement.focus();iFocus=1}
  switch(oInputElement.type){
  	case "text":
  	case "select-one":
  	  if(!oInputElement.className.match('Error'))oInputElement.className+='Error';
  	  break;
  	default:
  	  if(!oInputElement.className.match('Error'))oInputElement.className+='Error';
  	  //alert(oInputElement.name+' is of type: '+oInputElement.type+'\nit\'s class is: '+oInputElement.className);
  }//switch
}//switchToErrMode()

//wrapper used by radio and checkbox inputs, loops through all input element
//and call switchToErrMode()
function switchToErrModes(sInputElement){
	var i=1, oArr=$(sInputElement+'S'+i);
	while(oArr){
		switchToErrMode(oArr);
	  oArr=$(sInputElement+'S'+(++i));
  }//while
}//switchToErrModes()

//switch to update mode (buttons and certain text):
function switchToUpdateMode(iPage){
	for(var i=1;i<=iFormPages;i++) {
		$('formIntroSection'+i).style.display="none";
		$('formUpdateSection'+i).style.display="block";
		$('formButtonSection'+i).style.display="none";
		$('formButtonSectionUpdate'+i).style.display="block";
  } //for
		$('formTextUpdate'+iPage).style.display="inline";
		$('formTextOriginal'+iPage).style.display="none";
		$('Update'+iPage).className = 'formButtonNext';
		$('Update'+iPage).disabled = false;
} //switchToUpdateMode()

// Switch step images back to original after clicing on update
function switchtoOriginalMode(iPage)
{
	$('formTextUpdate'+iPage).style.display="none";
	$('formTextOriginal'+iPage).style.display="inline";
	$('Update'+iPage).className = 'formButtonCancel';
	$('Update'+iPage).disabled = true;
}

//FireClick's step sequencer, invoked on form buttons clicks
//sFormName ==> current form name, sCurrPage ==> current page (on which button was clicked),
//sAction ==> can be: 'Next', 'Prev', 'Update', 'Cancel', 'Edit'
function track_step(sFormName, sCurrPage, sAction){
	var sName=sFormName+'_'+sCurrPage+'_'+sAction;
	var subCat=sAction+'_'+sCurrPage;
  pageTracker._trackEvent('Form',sFormName,subCat);
  fc_rpt(null,{fc_track: sName});
} //track_step()

//google analytics
function track_input(oFormInput,sFormName,sAction){
  var subCat=sFormName+": "+oFormInput.name;
  pageTracker._trackEvent('Form Fields',subCat,oFormInput.value);
} //track_input()

//trim whitespace from sValue:
function trimSpace(sValue) {
  var regExTrim=/^\s*(.*?)\s*$/;return sValue.replace(regExTrim, "$1");
} //trimSpace()

//validate passed input element (not array, arrays validated through validateArr() function)
//1st find out if this is a required field, and if yes check if value is entered/selected
//2nd find out if RegEx(s) exist for this field, if yes evaluate entered value against it
function validate(oInputElement) {
	switchToEditMode(oInputElement); //in case input element is in error mode
	if($('Q'+oInputElement.name).className == 'formFieldCMS' 
		|| $('Q'+oInputElement.name).style.display == 'block'){
  var sInputRegEx=oInputElement.name+"RegExp";
  var oReq=$(oInputElement.name+"Req"), i=1, oRegExp=$(sInputRegEx+i), sValue=trimSpace(oInputElement.value);
  if(oReq && oReq.value=="true" && !sValue){switchToErrMode(oInputElement);showErrReq(oInputElement.name);return false;}
  while(oRegExp && sValue) {
	tempRegExp=new RegExp(oRegExp.value, "m");
	if(tempRegExp.source=='email'){
	  if(!validateEmail(sValue)){switchToErrMode(oInputElement);showErrVal(oInputElement,i);return false;}
	} else {
	  if(!tempRegExp.test(sValue)){switchToErrMode(oInputElement);showErrVal(oInputElement,i);return false;}
	} //if tempRegExp
	oRegExp=$(sInputRegEx+(++i));
  } //while oRegExp
}
  return true;
} //validate()

//validate array (radios, checkboxes, etc.) by looping through array elements:
//RegEx should not exist for objects, so only validate if required
function validateArr(sInputElement) {
  if($('Q'+sInputElement).className == 'formFieldCMS' 
		|| $('Q'+sInputElement).style.display == 'block'){
  var oReq=$(sInputElement+"Req");
  if(oReq && oReq.value=="true") {
	 var objId = document.getElementsByName(sInputElement[0])[0].id;
	var typeIdentifier = objId.substring(0,1);
	var i=1, oArr=$(typeIdentifier+sInputElement+i);
	if(oArr){ //radio, or checkbox:
	  while(oArr){
	    if(oArr.checked){switchToEditModes(sInputElement);return true;}
	    oArr=$(typeIdentifier+sInputElement+(++i));
    } //while
    switchToErrModes(typeIdentifier+sInputElement);
	} else { //must be multi-select:
	  var oInput=$(sInputElement), iLen=oInput.options.length;
	  for(var j=0;j<iLen;j++)if(oInput.options[j].selected && oInput.options[j].value!=''){switchToEditMode(oInput);return true;}
	  switchToErrMode(oInput);
	} //if oArr
	showErrReq(sInputElement);return false;
  } //if oReq
}
  return true;
} //validateArr()

//validate sValue to email format
//TODO: fix this, should use regEx instead as other input elements
function validateEmail(sValue) {
  var iAtPos=sValue.indexOf('@'), iLen=sValue.length, iDotPos=sValue.lastIndexOf('.');
  var iDotRange=iLen-iDotPos;
  if(sValue.match(' '))return false; //embedded spaces
  if(iAtPos==-1)return false; //no @
  if(iAtPos!=sValue.lastIndexOf('@'))return false; //more than 1 @
  if(iAtPos<1 || iLen-iAtPos<4)return false; //not enough before or after @
  if(iDotPos==-1)return false; //no dot
  if(iDotRange<3 || iDotRange>4)return false; //must be 2 or 3 chars after dot
  if(iDotPos-iAtPos<2)return false; //not enough chars between @ and dot
  return true;
} //validateEmail()

//validate whole form (all pages):
function validateForm() {
  for (var i=1; i<=iFormPages; i++)
    if(!validatePage(i)){editPage(i);return false;}
  return true;
} //validateForm()

//validate page with passed index:
function validatePage(iPageIndex) {
  var bValidated=true;iFocus = 0;
  hidePageErrs(iPageIndex); //hide any existing error messages first
  customSetRequired(iPageIndex);
  for(var i=0;i<aFormInputs[iPageIndex].length;i++)
	if(typeof aFormInputs[iPageIndex][i]=='object') { //object can be array: radio, checkbox, etc.
	  if(!validateArr(aFormInputs[iPageIndex][i]))bValidated=false;
	} else if(!validate($(aFormInputs[iPageIndex][i])))bValidated=false;
  if(!bValidated)showErrPage(iPageIndex);  //display page error message
  return bValidated;
} //validatePage()

//shortcut to get object:
function $(element) {return document.getElementById(element);}

//================= TEXTAREA HELPER FUNCIONTS START ========================
//limit textarea length to maxLimit and consecutive chars length to noSpaceLimit
function checkText(elem, maxLimit, noSpaceLimit) {
  if(elem.value.length>maxLimit)elem.value=elem.value.substring(0,maxLimit);
  if(elem.value.length>noSpaceLimit){
    var strArray=elem.value.split(" "), changed=false;
    for(var i=0;i<strArray.length;i++)
      if(strArray[i].length>noSpaceLimit){
        changed=true;
	strArray[i]=insertSpaces(strArray[i],noSpaceLimit);
      } //if length
    if(changed){
      var combinedWord="";
      for(var i=0;i<strArray.length;i++)combinedWord+=strArray[i]+" ";
      elem.value=combinedWord.substring(0,combinedWord.length-1);
    } //if changed
  } //if noSpaceLimit
} //checkText()

//insert spaces into longWord every noSpaceLimit chars
function insertSpaces(longWord, noSpaceLimit) {
  var v_pointer=0, v_return="";
  while( v_pointer < longWord.length ) {
    v_return+=longWord.slice(v_pointer, v_pointer+noSpaceLimit)+" ";
    v_pointer+=noSpaceLimit;
  } //while
  return v_return.substring( 0, v_return.length-1 );
} //insertSpaces()
//================= TEXTAREA HELPER FUNCIONTS END ========================

//===============================Saurabh Saxena - DYNAMIC FORMS=======================================//

//To show dynamic questions
function showDynamicQuestion(elem)
{
	var iDynaFocus = 0;
	if($(elem))var elemPage = $(elem).name.substring(0,1);
	hideDynamicQuestions(elem);
	var currPage = $("formPage"+iCurrPage);
	var parDivId = $(elem).name.substring(0,$(elem).name.lastIndexOf("_"));
	var isFocus = $(elem).getAttribute('isfocus');
	var selectedAnswer = "";
	if($(elem).tagName == 'SELECT') selectedAnswer = $(elem).options[$(elem).selectedIndex].getAttribute('answer');
	else selectedAnswer = $(elem).getAttribute('answer');
	var arr = selectedAnswer.split('|');
	for(var i=0;i<arr.length;i++){
		var arrSubstr = arr[i].substring(1,arr[i].length); // in case of next button or some url
		if(arrSubstr == 'Next'){
			if(!bUpdate){
				$('Next'+elemPage).disabled=false;
				$('Next'+elemPage).className = 'formButtonNext';
				if(isFocus!=null) $('Next'+elemPage).focus();
			}
			else {
				$('Update'+elemPage).disabled=false;
				$('Update'+elemPage).className = 'formButtonUpdate';
				if(isFocus!=null) $('Update'+elemPage).focus();
			}
		}
		else{
			if($(arr[i])){
				var objMainDivId=arr[i].substring(1,arr[i].lastIndexOf("_"));
				$(objMainDivId).style.display="block";
				var oDivs=$(objMainDivId).getElementsByTagName('div');
				for(var j=0;j<oDivs.length;j++){
					if(arr[i] == oDivs[j].id){
						oDivs[j].style.display="block"
						var objName = oDivs[j].id.substring(1,oDivs[j].id.length);
						var objRadElem = document.getElementsByName(objName);
						for(var k=0;k<objRadElem.length;k++){
							if(iDynaFocus==0){
								objRadElem[k].focus();iDynaFocus=1;}
							if(objRadElem[k].type == "select-one" || objRadElem[k].type == "select-multiple"){
								if(objRadElem[k].options.length > 0){
									if(objRadElem[k].type == "select-one")objRadElem[k].selectedIndex = 0;}
								else oDivs[j].style.display="none";
							}
							else if(objRadElem[k].type == "text") objRadElem[k].value = '';
							else if(objRadElem[k].type == "radio") objRadElem[k].checked = false;
						}		
					}
				}
			}
			else{
				if(!bUpdate) $('Next'+iCurrPage).onclick = function(){setLocation(arrSubstr,'show')};
				else $('Update'+iCurrPage).onclick = function(){setLocation(arrSubstr,'show')};
			}
		}
	}
}//showDynamicQuestion

// set the url location to navigate onclick of Next
function setLocation(url,flag){
	var iFlag = flag;
	switch(iFlag){
		case 'show':
			if(url.indexOf('http')==-1) window.location = "http://"+url;
			else window.location = url;
			break;
		case 'hide':
			if(!bUpdate){
				$('Next'+iCurrPage).disabled=true;
				$('Next'+iCurrPage).className = 'formButtonDisabled';
				$('Next'+iCurrPage).onclick = function(){
					if(iCurrPage < iFormPages){
						if(validatePage(iCurrPage)){checkSummary();swapImages(iCurrPage+1,'formWizardHeader');rotate(1);track_step(iFormName, iCurrPage, 'Next');}}
					else{
						if(validatePage(iCurrPage)){checkSummary();swapImages(iFormPages+1,'formWizardHeader');rotateToVerify();track_step(iFormName, iCurrPage, 'Next');}}
				};
			}
			else {
				$('Update'+iCurrPage).disabled=true;
				$('Update'+iCurrPage).className = 'formButtonDisabled';
				$('Update'+iCurrPage).onclick = function(){
						if(validatePage(iCurrPage)){checkSummary();swapImages(iFormPages+1,'formWizardHeader');switchtoOriginalMode(iCurrPage);rotateToVerify();track_step(iFormName, iCurrPage, 'Update');}
				};
			}
			break;
		default:
	}
}//setLocation

//To hide dynamic questions tree
function hideDynamicQuestions(elem)
{
	var objInputs=new Array();
	if($(elem)){
		var elemType = $(elem).type;
		var elemName = $(elem).name;
		var elemName1 = elemName.substring(0,elemName.lastIndexOf("_"));
		var elemPage = elemName.substring(0,1);
		setLocation('','hide');
	}
	objInputs = document.getElementsByName(elemName);
	for(var i=0;i<objInputs.length;i++){
		var objVal=objInputs[i].getAttribute('answer');
		var arrVal = new Array();
		if(objVal!=null)
			arrVal = objVal.split("|");
		for(var j=0;j<arrVal.length;j++){
			var val=arrVal[j];
			var parentDiv = val.substring(1,val.lastIndexOf("_"));
			if($(val) && $(val).style.display=="block"){
				$(val).style.display="none";
				var child = $(val).getElementsByTagName("input");
				var childSelects = $(val).getElementsByTagName("select");
				if(childSelects.length == 0 && elemType != 'select-one'){ // For all inputs like text, radio etc
					for(var k=0;k<child.length;k++){
						var valObj=child[k];
						if(valObj.type == "radio")valObj.checked=false;
						else valObj.value='';
						if(valObj != ''){
							if(valObj.getAttribute('answer')!=''){
								var valObjVal = valObj.getAttribute('answer');
								var arrValInner = new Array();
								if(valObjVal!=null)
									arrValInner = valObjVal.split("|");
								for(var m=0; m<arrValInner.length; m++){
									var valObj1 = arrValInner[m];
									var mainDiv = valObj1.substring(1,valObj1.lastIndexOf("_"));
									if(mainDiv!=''){
										if($(mainDiv)){
											//if($(mainDiv).style.display != "none"){
												if(mainDiv != elemName1){
													if((mainDiv.substring(mainDiv.lastIndexOf('_')+1,mainDiv.length) >
														elemName1.substring(elemName1.lastIndexOf('_')+1,elemName1.length))){
															$(mainDiv).style.display = "none";
													}
												if(!bUpdate){
													$('Next'+elemPage).disabled=true;
													$('Next'+elemPage).className = 'formButtonDisabled';
												}
												else {
													$('Update'+elemPage).disabled=true;
													$('Update'+elemPage).className = 'formButtonDisabled';
												}
												if(valObj.type == "select-one" || valObj.type == "select-multiple"){
													if(valObj.options.length > 0){
														if(valObj.type == "select-one")valObj.value = '';
														else valObj.selectedIndex=1;
													}
												}
												else if(valObj.type == "text") valObj.value = '';
												else if(valObj.type == "radio") valObj.checked = false;
												hideDynamicQuestions(valObj.id);
											}
											else{ 
												var oInputName = valObj1.substring(1,valObj1.length);
												var objElem = document.getElementsByName(oInputName);
												if(!bUpdate){
													$('Next'+elemPage).disabled=true;
													$('Next'+elemPage).className = 'formButtonDisabled';
												}
												else {
													$('Update'+elemPage).disabled=true;
													$('Update'+elemPage).className = 'formButtonDisabled';
												}
												for(var n=0;n<objElem.length;n++){
													var elem = objElem[n];
													if(elem.type == "select-one" || elem.type == "select-multiple"){
														if(elem.options.length > 0){
															if(elem.type == "select-one")elem.value = '';
															else elem.selectedIndex=1;
														}
													}
													else if(elem.type == "text") elem.value = '';
													else if(elem.type == "radio") elem.checked = false;
													hideDynamicQuestions(elem.id);
												}
											}
										}//}
									}
								}
							}
						}
					}
				}
				else{ // When it is select
					//var childSelects = $(val).getElementsByTagName("select");
					var oOptions = new Array();
					if(elemType == 'select-one'){oOptions = $(elem).options;}
					else {if(childSelects[0]){
							childSelects[0].value = "";
							oOptions = childSelects[0].options;
					}}
					for(var x=0;x<oOptions.length;x++){
						var oOptionVal = oOptions[x].getAttribute('answer');
						if(oOptionVal != '' ){
							var arrVal = oOptionVal.split('|');
							for(var y=0;y<arrVal.length;y++){
								var mainDiv = arrVal[y].substring(1,arrVal[y].lastIndexOf("_"));
								if(mainDiv!=''){
									if($(mainDiv)){
										if(mainDiv != elemName1){
											if((mainDiv.substring(mainDiv.lastIndexOf('_')+1,mainDiv.length) >
												elemName1.substring(elemName1.lastIndexOf('_')+1,elemName1.length))){
													$(mainDiv).style.display = "none";
											}
											$(arrVal[y]).style.display="none";
											var val = arrVal[y].substring(1,arrVal[y].length);
											var objNames = document.getElementsByName(val);
											if(!bUpdate){
												$('Next'+elemPage).disabled=true;
												$('Next'+elemPage).className = 'formButtonDisabled';
											}
											else {
												$('Update'+elemPage).disabled=true;
												$('Update'+elemPage).className = 'formButtonDisabled';
											}
											for(var w=0;w<objNames.length;w++){
												var objE = objNames[w];
												if(objE.type == "select-one" || objE.type == "select-multiple"){
													if(objE.options.length > 0){
														if(objE.type == "select-one")objE.value = '';
														else objE.selectedIndex=1;
													}
												}
												else if(objE.type == "text") objE.value = '';
												else if(objE.type == "radio") objE.checked = false;
												hideDynamicQuestions(objE.id);
											}
										}
										else {
											var valInput = arrVal[y].substring(1,arrVal[y].length); 
											var objElem=document.getElementsByName(valInput);
											$(arrVal[y]).style.display="none";
											if(objElem.length > 0){
												if(!bUpdate){
													$('Next'+elemPage).disabled=true;
													$('Next'+elemPage).className = 'formButtonDisabled';
												}
												else {
													$('Update'+elemPage).disabled=true;
													$('Update'+elemPage).className = 'formButtonDisabled';
												}
												for(var z=0;z<objElem.length;z++){
													if(objElem[z].type == "select-one" || objElem[z].type == "select-multiple"){
														if(objElem[z].options.length > 0){
															if(objElem[z].type == "select-one")objElem[z].value = '';
															else objElem[z].selectedIndex=1;
														}
													}
													else if(objElem[z].type == "text") objElem[z].value = '';
													else if(objElem[z].type == "radio") objElem[z].checked = false;
													hideDynamicQuestions(objElem[z].id);
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}//hideDynamicQuestions

//For diabling the browser back buttons
function backButtonOverride()
{
  // Work around a Safari bug
  // that sometimes produces a blank page
  setTimeout("backButtonOverrideBody()", 1);
}
function backButtonOverrideBody()
{
  // Works if we backed up to get here
  try {
	if(history.length>0) history.go(+1);
    history.forward();
  } catch (e) {
    // OK to ignore
  }
  // Every quarter-second, try again. The only
  // guaranteed method for Opera, Firefox,
  // and Safari, which don't always call
  // onLoad but *do* resume any timers when
  // returning to a page
  setTimeout("backButtonOverrideBody()", 500);
}
function swapImages(curPage , valId)
{
	var currPage = curPage;
	var oDivs=new Array();var j=0;
	var oChild = $(valId).childNodes;
	for(var i=0;i<oChild.length;i++){
		if(oChild[i].nodeName == 'DIV'){
			oDivs[j] = oChild[i];j++;}
	}	
	for(var k=0;k<oDivs.length;k++){
		var page = oDivs[k].id.slice(4);
		var oDivFirstChild = oDivs[k].childNodes[0];
		if(page > currPage)
			oDivFirstChild.className = 'incomplete';
		else if(page == currPage)
			oDivFirstChild.className = 'current';
		else if(page < currPage)
			oDivFirstChild.className = 'complete';
	}
}

//To remove http or https from the referrer URL
function GetDomainURL(url)
{
	var URL = url;
	if(URL.indexOf('http')!=-1){
		var index = URL.indexOf("//");
		var startingIndex = index+2;
		URL = URL.substring(startingIndex,URL.length);
	}
	return URL;
}

// to map the refferal URL and get the referral key
function mapReferralURL(mapItem , refArr)
{
	var refKey='', defVal ='', key='';
	for(var i=1;i<refArr.length;i++){
		if(refArr[i][0] == "Default"){defVal = refArr[i][1];}
		if(mapItem == GetDomainURL(refArr[i][0]))refKey = refArr[i][1];
	}
	if(refKey == '')refKey = defVal;
	return refKey;
}

// to map the refferal URL and get the referral key
function mapReferralKey(mapItem , refArr, obj)
{
	var refKey='', defVal ='', key='';
	for(var i=1;i<refArr.length;i++){
		if(refArr[i][0] == "Default"){defVal = refArr[i][1];}
		if(mapItem == refArr[i][0])refKey = refArr[i][1];
	}
	if(refKey == '')refKey = defVal;
	SplitAnswer(refKey , obj) // to split the answer in case of multiple answers using |delimiter
}


//To split the answer incase of inputs
function SplitAnswer(answer , obj)
{
	var ans = answer;var key = '';
	if(ans!=''){
		var arrAns = ans.split('|');
		for(var i=0;i<arrAns.length;i++){key+='Q'+arrAns[i]+'|';}
		key = key.substring(0,key.length-1);
		var attArray = obj.attributes;
		for(var k=0;k<attArray.length;k++){
			if(attArray[k].nodeName == 'answer')
				if(key!='') attArray[k].nodeValue = key;
		}
	}
}
//To split the answer incase of selects/multiselects
function SplitAnswerOptions(id)
{
	var selectId = id;
	var objOptions = $(selectId).options;
	for(var i=0;i<objOptions.length;i++){
		var key = '';
		var ans = objOptions[i].getAttribute('answer');
		if(ans!=''){
			var arrAns = ans.split('|');
			for(var j=0;j<arrAns.length;j++){key+='Q'+arrAns[j]+'|';}
			key = key.substring(0,key.length-1);
			var attArray = objOptions[i].attributes;
			for(var k=0;k<attArray.length;k++){
				if(attArray[k].nodeName == 'answer')attArray[k].nodeValue = key;
			}
		}
	}
}

// Check for summary values
function checkSummary()
{
	var valIndex = '';
	var objSummaryDivArray = new Array();
	if(navigator.userAgent.indexOf('MSIE ')!=-1 || navigator.userAgent.indexOf('MSIE 7.')!=-1)// If IE
		objSummaryDivArray = getElementsByName_iefix('div','summaryDiv');
	else objSummaryDivArray = document.getElementsByName('summaryDiv');
	for(var j=0;j<objSummaryDivArray.length;j++){
		objSummaryDivArray[j].style.display = "none";}
	for(var i=1;i<aSummaryKeys.length;i++){
		valIndex = aSummaryKeys[i][0];
		if(Boolean(valIndex)){
			if(navigator.userAgent.indexOf('MSIE ')!=-1 || navigator.userAgent.indexOf('MSIE 7.')!=-1){
				if(getElementsByName_iefix('div','SummaryValue'+valIndex).length > 0)
					setSummary(valIndex);
			}
			else {
				if(document.getElementsByName('SummaryValue'+valIndex).length > 0) 
					setSummary(valIndex);
			}
		}
	}
}

//To split the answer incase of selects/multiselects
function setSummary(elemId)
{
	var selOptions = '',objSummaryDivArray = new Array(),objSummaryValueArray=new Array(),objSummaryRowArray=new Array(),objDottedBarArray=new Array();
	var objId = document.getElementsByName(elemId)[0].id;
	var typeIdentifier = objId.substring(0,1);
	var i=1, oArr=$(typeIdentifier+elemId+i);
	if(oArr){ //radio, or checkbox:
	  while(oArr){
	    if(oArr.checked && oArr.value=="1"){
			if($('Q'+elemId).className == 'formFieldCMS' || $('Q'+elemId).style.display == 'block')selOptions = referralKey+", ";}
	    oArr=$(typeIdentifier+elemId+(++i));
    } //while
	} else { //must be multi-select:
	  var oInput=$(elemId), iLen=oInput.options.length;
      if($('Q'+elemId).className == 'formFieldCMS' || $('Q'+elemId).style.display == 'block')
		for(var j=0;j<iLen;j++)if(oInput.options[j].selected){selOptions += oInput.options[j].value+", ";}
	} //if oArr
	if(navigator.userAgent.indexOf('MSIE ')!=-1 || navigator.userAgent.indexOf('MSIE 7.')!=-1){// If IE
		objSummaryDivArray = getElementsByName_iefix('div','summaryDiv');
		objSummaryValueArray = getElementsByName_iefix('div','SummaryValue'+elemId);
		objSummaryRowArray = getElementsByName_iefix('div','SummaryRow'+elemId);
		objDottedBarArray = getElementsByName_iefix('div','SummaryDottedBar'+elemId);
	}
	else{// If NOT IE
		objSummaryDivArray = document.getElementsByName('summaryDiv');
		objSummaryValueArray = document.getElementsByName('SummaryValue'+elemId);
		objSummaryRowArray = document.getElementsByName('SummaryRow'+elemId);
		objDottedBarArray = document.getElementsByName('SummaryDottedBar'+elemId);
	}
	for(var i=0;i<objSummaryRowArray.length;i++){
		objSummaryRowArray[i].style.display = "none";}
	/*for(var j=0;j<objSummaryDivArray.length;j++){
		objSummaryDivArray[j].style.display = "none";}*/
	for(var k=0;k<objDottedBarArray.length;k++){
		objDottedBarArray[k].style.display = "none";}

	selOptions = selOptions.substring(0,selOptions.length-2);
	if(selOptions!=''){
		for(var z=0;z<objSummaryValueArray.length;z++){
			objSummaryValueArray[z].innerHTML = selOptions;
			objSummaryDivArray[z].style.display = "block";
			objSummaryRowArray[z].style.display = "block";
			objDottedBarArray[z].style.display = "block";
		}
	}
}

//To set the product select box options
function setProductOptions(selId,optName,optValue,isSelected)
{
	var objSel = $(selId);
	var objOption = document.createElement("option");
	objOption.setAttribute("answer","");
	objOption.value = optValue;
	objOption.innerHTML = optName;
	if(isSelected =='true') objOption.selected = "selected";
	objSel.appendChild(objOption);
}

// to get the array from getElemantsByName in IE
function getElementsByName_iefix(tag, name) {
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}

// To set the answer of select on the basis of option selected
function setSelectAnswer(id)
{
	var selObj = $(id);
	var attArray = selObj.attributes;
	for(var i=0;i<attArray.length;i++){
		if(attArray[i].nodeName == 'answer')
			attArray[i].nodeValue = selObj.options[selObj.selectedIndex].getAttribute('answer');
	}
}

function imposeMaxLength(Event, Object, MaxLen)
{
  return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}


//================================DYNAMIC FORMS END=============================================//