// EditForm.js
// (c) 2006 Re-evolved ltd
// Tristan 'doctea' Rowley

var tabgroups = new Array ();


/*
tabgroups["AdminOptions"] = new Array ();

tabgroups["AdminOptions"][0]='Tree';
tabgroups["AdminOptions"][1]='Shipping';
tabgroups["AdminOptions"][2]='Currency';
tabgroups["AdminOptions"][3]='Email';
tabgroups["AdminOptions"][4]='SecPay';
tabgroups["AdminOptions"][5]='PayPal';
tabgroups["AdminOptions"][6]='Checkout';
*/


function removeElement(divNum) {
  var olddiv = document.getElementById(divNum);
  //if (null!=olddiv) alert ("got olddiv '" + olddiv + "'");
  olddiv.parentNode.removeChild (olddiv);
}

function isArray()
{
  if (typeof arguments[0] == 'object')
  {  
    var criterion = arguments[0].constructor.toString().match(/array/i);
   return (criterion != null);  
  }
  return false;
}

var installedtabs = new Array();

function loadTab(FormName, Tab, BlockName) {
	if (!installedtabs[BlockName]) {
		SectionHelper.callRefresh(BlockName);
		installedtabs[BlockName] = true;
	}
	selectTab(FormName, Tab);
}
	

function selectTab (FormName, Tab) {
	/*alert ("selectTab: FormName is '" + FormName + "'!");
	alert ("selectTab: length of tabgroups is '" + tabgroups.length + "'!");
	alert ("selectTab: length of tabgroups[" + FormName +"] is '" + tabgroups[FormName].length +"'!");*/
	//alert ("selectTab: Requested Tab is '" + Tab + "'");
		
	
	if (isArray(tabgroups[FormName])) {
  	for (i = 0 ; i < tabgroups[FormName].length; i++) { 
  		//alert ("Got tabgroups[FormName]["+i+"] of '" + tabgroups[FormName][i] + "'");
  		//if (Tab == tabgroups[FormName][i]) alert ("FOUND TABGROUP!");
  		//alert ("Looking for tab to hide '" + FormName+'_'+tabgroups[FormName][i] + "'");
		 	var obj = document.getElementById(FormName+'_'+tabgroups[FormName][i]);
     	if (obj!=null && isObject(obj)) /* != null)*/ obj.style.display = 'none'; //else alert ('didnt get obj ' + obj + '!');
		 	var obj2 = document.getElementById(FormName+'_'+tabgroups[FormName][i]+'_tabheader');
		 	if (obj!=null && isObject(obj2))/* != null)*/ obj2.className = 'FormTabTab';
  	}
  }
  if (isObject(obj)) { // != null) {
  	//alert ("Obj content is '" + obj.innerHTML + "'");
	 	var obj = document.getElementById(FormName+'_'+Tab);
	 	obj.style.display = 'block';
	 	//alert ("Obj2 content is '" + obj2.innerHTML + "'");
	 	var obj2 = document.getElementById(FormName+'_'+Tab+'_tabheader');
	 	obj2.className = 'FormTabSelectedTab';
	 	//alert ("Obj3 content is '" + obj3.innerHTML + "'");
	 	var obj3 = document.getElementById(FormName+'_ShowAll_tabheader');
  	if (isObject(obj3)) obj3.className = 'FormTabTab';
	 	ShowFCK();
  } /*else {
  	alert ("Obj is null!");
  }*/
}

function ShowAll (FormName) {
	//alert ("FormName is '" + FormName + "'");
  for (i = 0 ; i < tabgroups[FormName].length; i++) {
  	//alert ("Looping over tabgroup["+i+"]: " + tabgroups[FormName][i]);
  	var obj = document.getElementById(FormName+'_'+tabgroups[FormName][i]);
	 	obj.style.display = 'block'
	 	var obj2 = document.getElementById(FormName+'_'+tabgroups[FormName][i]+'_tabheader');
	 	obj2.className = 'FormTabTab';
	}
	var obj3 = document.getElementById(FormName+'_ShowAll_tabheader')
  if (isObject(obj3)) obj3.className = 'FormTabSelectedTab';
  ShowFCK();
}

function ShowFCK()
{
	//alert ("ShowFCK!");	
	//document.getElementById('eEditor').style.display	= '' ;
	//document.getElementById('eNoEditor').style.display	= 'none' ;

	// This is a hack for Gecko... it stops editing when the editor is hidden.
	if ( !document.all )
	{
		if (typeof(FCKeditorAPI)!="undefined" && typeof(fckeditorarray)!="undefined") {
			//alert ("size of fckeditorarray is " + fckeditorarray.length);
			for (i = 0 ; i < fckeditorarray.length ; i++) {
				//alert ("making editable " + fckeditorarray[i]);
				var oEditor = FCKeditorAPI.GetInstance( fckeditorarray[i] ) ;
	       	//oEditor.EditorDocument.designMode = "off";//force off
			
				//alert ("oEditor designmode is " + oEditor.EditorDocument.designMode);
				
	    	if (oEditor && oEditor.EditorDocument && oEditor.EditMode == FCK_EDITMODE_WYSIWYG){
	       	oEditor.EditorDocument.designMode = "on";
	    	}
				
				if (  oEditor.EditMode == FCK_EDITMODE_WYSIWYG )
					oEditor.MakeEditable() ;
			}
		}
	} else {
		//alert ("not gecko?");
	}
}

var SubmitButtonName;
var SubmitButtonValue;

var SubmitButtonArray = new Array ();

function setSubmitButton (FormName, setSubmitButtonName, setSubmitButtonValue) {
	//alert ("setSubmitButton (" + FormName + ", '" + setSubmitButtonName + "', '" + setSubmitButtonValue + "')!");
	SubmitButtonArray["VanillaStatus"] = "Edit_" + FormName;

	SubmitButtonArray["SubmitButtonName"] = setSubmitButtonName;
	SubmitButtonArray["SubmitButtonValue"] = setSubmitButtonValue;
	
	//alert ("set values to VanillaStatus='" + SubmitButtonArray["VanillaStatus"] + "', SubmitButtonName='" + SubmitButtonArray["SubmitButtonName"] + "', SubmitButtonValue='" + SubmitButtonArray["SubmitButtonValue"] + "'!");	
}

function getMungedFormValues (FormName, prefix) {
	var FormValues = new Array ();
	/*alert('SubmitButtonArray VanillaStatus is ' + SubmitButtonArray['VanillaStatus']); */
	
	var NeedsRefreshing = SectionHelper.getNeedsRefreshing(FormName);
	//var NeedsBlurring = SectionHelper.getNeedsBlurring(FormName);
	var t;
	if (null!=NeedsRefreshing && undefined!=NeedsRefreshing) {
		for (i = 0 ; i < NeedsRefreshing.length ; i++) {
			//alert (i + ": looped over '" + NeedsRefreshing[i] + "'!");
			t = document.getElementById(NeedsRefreshing[i]);
			t.value = FCKeditorAPI.GetInstance(NeedsRefreshing[i]).GetXHTML();
		}
	}
	var NeedsBlurring = SectionHelper.getNeedsBlurring(FormName);
	var t;
	if (null!=NeedsBlurring && undefined!=NeedsBlurring) {
		for (i = 0 ; i < NeedsBlurring.length ; i++) {
			t = NeedsBlurring[i];
			t._confirmSelection();
			/*alert ('blurring index ' + i);// + ' ' + NeedsBlurring[i]);
			t = document.getElementById(NeedsBlurring[i]);

			//alert ('value is ' + t.value);
			t.focus();
			t.blur();*/
			//t._confirmSelection(); //onblur();
		}
	}
	
	
	
	FormValues = xajax.getFormValues(FormName, false, prefix);
	/*alert ('FormValues is ' + FormValues);*/
	FormValues = FormValues.replace('</q></xjxquery>', '&VanillaStatus='+SubmitButtonArray['VanillaStatus']+'&'+SubmitButtonArray['SubmitButtonName']+'='+SubmitButtonArray['SubmitButtonValue']+'</q></xjxquery>');
	/*alert ('New FormValues is ' + FormValues);*/
	return FormValues;
}

function getURLFormValues (FormName, prefix) {
	var FormValues = new Array ();
	FormValues = xajax.getFormValues(FormName, false, prefix);
	
	//alert ("getURLFormValues: starts off '" + FormValues + "'!");
	
	FormValues = FormValues.replace('</q></xjxquery>', '');
	FormValues = FormValues.replace('<xjxquery><q>', '');
	
	//alert ("getURLFormValues: modified to '" + FormValues + "!");
	
	return FormValues;
}


function setSearchValue (SearchFormName, SearchOrderName, value) {
	var SearchForm = document.getElementById(SearchFormName);	
	
	var SearchOrderInput = document.getElementById(SearchOrderName);
	if (SearchOrderInput!=null) {
		SearchOrderInput.value = value
	} else {
		alert ("Couldn't find '" + SearchOrderName + "'");
	}
	
	//SearchForm.submit();
}





function setTimeSpanClass(timespanmode, untildivname, hiddenelementname) {
	//alert ("setTimeSpanClass (" + (timespanmode?"true":"false") + ", '" + untildivname + "', '" + hiddenelementname + "')");
	var hid = document.getElementById(hiddenelementname);
	if (timespanmode) {
		showElementInline (untildivname);
		hid.value = 'TimeSpan';
	} else {
		hideElement (untildivname);
		hid.value = 'Milestone';
	}
}
/*
{*if (this.checked) {literal}{{/literal} showElementInline('{$Form->getName()}_{$widget->getFormName()}_untildiv_{$TimeSpan->getTimeSpanID()}'); {literal}} else {{/literal} hideElement('{$Form->getName()}_{$widget->getFormName()}_untildiv_{$TimeSpan->getTimeSpanID()}'); {literal}}{/literal} "*}
*/



function addOneToManyAddRow (templateidname, targetidname, postfunction/*, afterrowidname*/) {
	var template = document.getElementById (templateidname);
	
	var html = template.innerHTML;
	var guid = getGUID ();
	
	var browserName=navigator.appName; 
	if (browserName=="Microsoft Internet Explorer") {
		// Internet Explorer version - "The innerHTML property of the TABLE, TFOOT, THEAD, and TR elements are read-only."
		// todo: 09/11/2006 17:56 this needs fixing so the same one works in both.  don't know why they don't.
		// in firefox, this aligns all columns from teh template with the *first* column of the target table.  
		var clone = template.cloneNode (true);
		
		clone.id = "Row" + guid;
		clone.style.display = "block";
		var inputs = clone.getElementsByTagName ("input");
		//var inputs = getElementsByTagNames ("input,select", clone);
		//inputs.push (select);
		for (i = 0 ; i < inputs.length ; i++) {
			//alert ("Got '" + inputs.item(i).tagName + "' of '" + inputs.item(i).className + "'!");
			inputs.item(i).disabled = "";
			inputs.item(i).name = inputs.item(i).name.replace (/###GUID###/g, guid);
			inputs.item(i).id = inputs.item(i).id.replace (/###GUID###/g, guid);
			//inputs.item(i).onchange = inputs.item(i).onchange.replace (/###GUID###/g, guid);
		}
		
		/*alert ("test loop:");
		var inputs = clone.getElementsByTagName ("input");
		for (i = 0 ; i < inputs.length ; i++) {
			alert ("Got '" + inputs.item(i).tagName + "' of '" + inputs.item(i).className + "' - name is '" + inputs.item(i).name + "'!");
			// inputs.item(i).disabled = "";
			// inputs.item(i).name = inputs.item(i).name.replace (/###GUID###/g, guid);
		}*/	
		
		var selects = clone.getElementsByTagName ("select");
		for (i = 0 ; i < selects.length ; i++) {
			select = selects.item(i);
			select.disabled = "";
			select.name = select.name.replace (/###GUID###/g, guid);
		}
	
		//var newrow = target.insertRow(-1)
		var target = document.getElementById (targetidname);
		var tbody = target.getElementsByTagName("TBODY")[0];
		tbody.appendChild(clone);
		//target.appendChild(clone);

	/*	var row = tbody.insertRow(-1);
		var cell = row.insertCell(0);
		cell.innerHTML = "new cell ffs";*/

	} else {
		// works in firefox version
		// code here works fine in firefox... however in IE, "The innerHTML property of the TABLE, TFOOT, THEAD, and TR elements are read-only."

		//alert ("got html " + html);	
		
		html = html.replace (/###GUID###/g, guid);
		//alert ("got html " + html);
		html = html.replace (/disabled/g, " ");
		//alert ("got html " + html);
	
		//alert ("Looking for targetidname '" + targetidname + "'!");
	
		var target = document.getElementById (targetidname);
		
		/*if (afterrowidname!="") {
			index = target.getElementById (afterrowidname).index;
		} else {*/
			index = -1;
		//}		
		
		//target.innerHTML += "<tr>" + html + "</tr>";
		var newrow = target.insertRow(index);
		//alert ("just did insertrow... newrow classname is '" +newrow.className +"'!");
		newrow.innerHTML = html;
	}
	
	/*alert ("guid is " + guid);
	alert ("postfunction is '  " + postfunction + "'  ");*/
	
	eval (postfunction);
	
}




function doNeedsRefreshing(FormName) {
		
	//alert ('doNeedsRefreshing for ' + FormName);
		
	// should do something here to refresh the hidden form element with the updated value.
	// so we need to ask SectionHelper (fe) which fields of this form need updating ..
	//alert ("getneedsrereshing for '" + FormName + "'");
	var NeedsRefreshing = SectionHelper.getNeedsRefreshing(FormName);
	var t;
	if (null!=NeedsRefreshing && undefined!=NeedsRefreshing) {
		for (i = 0 ; i < NeedsRefreshing.length ; i++) {
			//alert (i + ": looped over '" + NeedsRefreshing[i] + "'!");
			t = document.getElementById(NeedsRefreshing[i]);
			t.value = FCKeditorAPI.GetInstance(NeedsRefreshing[i]).GetXHTML();
		}
	}
	/*var els = getElementsByClassName('dhx_combo_input');
	for (i = 0 ; i < els.length ; i++) {
		alert ('blurring dhx combo input index ' + i + ': ' + i.id);
		els[i].focus();
		els[i].blur();
	}*/
	
}

function doNeedsBlurring(FormName) {
	
	//alert ('doNeedsBlurring for ' + FormName);
	
	var NeedsBlurring = SectionHelper.getNeedsBlurring(FormName);
	var t;
	if (null!=NeedsBlurring && undefined!=NeedsBlurring) {
		for (i = 0 ; i < NeedsBlurring.length ; i++) {
			//alert ('blurring index ' + i + ' ' + NeedsBlurring[i]);
			
			t = NeedsBlurring[i];
			t._confirmSelection();
			/*t = document.getElementById(NeedsBlurring[i]);

			//alert ('value is ' + t.value);
			t.focus();
			t.blur();*/
			//t._confirmSelection(); //onblur();
		}
	} else {
		//alert ('No NeedsBlurring found for ' + FormName + '!');
	}
	
}

function pre_xajax_SubmitMultipleEditForm(FormName) {
	
	for(var index in SectionHelper.NeedsBlurring) {
		//alert ("index is '" + index + "'");
		doNeedsRefreshing(index);
		doNeedsBlurring(index);
	}
	
	//doNeedsRefreshing(FormName);
	//doNeedsBlurring(FormName);
	
	var FormValues = new Array();
	//alert ("FormName is '" + FormName + "'");
	FormValues = xajax.getFormValues(FormName, false, FormName+'_');
	//alert ("before concat, FormValues is '" + FormValues + "'");
	
	var v = xajax.getFormValues(FormName, false, 'Vanilla').replace('<xjxquery><q>','');
	//alert ('got vanilla formvalues ' + v);
	//FormValues.concat (xajax.getFormValues(FormName, false, 'Vanilla'));
	//FormValues = FormValues.replace('</q></xjxquery>', '&Vanilla
	FormValues = FormValues.replace('</q></xjxquery>', "&"+v);
	
	//alert ("Final FormValues is: " + FormValues);	
	
	xajax_SubmitMultipleEditForm(FormValues);
	return false;
}

function pre_xajax_SubmitEdit(FormName, SubmitButtonArray, Template, NextTemplate, SourceType, SourceID, idname) {
	//alert ("pre_xajax_SubmitEdit!");

	var div = document.getElementById(idname);
	div.focus();

	doNeedsRefreshing(FormName);
	doNeedsBlurring(FormName);

	//SectionHelper	
	
	// var content = FCKeditorAPI.GetInstance('HiddenInputName'').GetXHTML();
	
	var FormValues = new Array(); 
	FormValues = xajax.getFormValues(FormName, false, FormName+'_');
	FormValues = FormValues.replace('</q></xjxquery>', '&VanillaStatus='+SubmitButtonArray['VanillaStatus']+'&'+SubmitButtonArray['SubmitButtonName']+'='+SubmitButtonArray['SubmitButtonValue']+'</q></xjxquery>');
	//alert ("got formvalues:" + FormValues);
	//alert ("Got SubmitButtonArray['SubmitButtonName']: " + SubmitButtonArray['SubmitButtonName'] + ", SubmitButtonArray['SubmitButtonValue']: " + SubmitButtonArray['SubmitButtonValue'] + "!");
	//xajax_SubmitEdit(Template, NextTemplate, SourceType, SourceID, idname, 'submit', FormValues); 
	xajax_SubmitEdit(Template, NextTemplate, SourceType, SourceID, idname, SubmitButtonArray['SubmitButtonValue'], FormValues); 
	return false;
}


/*
function pre_xajax_ShowQuickPick(displayid, idid, SourceType, prepend) {
	var d = document.getElementById(displayid);
	var i = document.getElementById(idid);
	
	var SearchText = d.value;
	
	//alert ("prepend is '" + prepend + "'!");
	
	return xajax_ShowQuickPick(displayid, idid, SourceType, SearchText, prepend);
}

function QuickPick_selectdirect (displayid, idid, selectedname, selectedid, prepend) {
	//alert ("QuickPick_selectdirect ('" + displayid + "', '" + idid + "', '" + selectedname + ", " + selectedid + ", " + prepend + ")");
	
	var d=document.getElementById(displayid); 
	var i=document.getElementById(idid); 

	if (prepend!="")
		i.value = prepend + selectedid;
	else
		i.value = selectedid;
	d.value = selectedname;
	
	showElementInline (idid + "_verified_true");
	hideElement 			(idid + "_verified_false");
}

function QuickPick_close (id) {
	//alert ("got QuickPick_close " + id + "!");
	hideElement (id);
}

function QuickPick_select(displayid, idid, resultsid, prepend) {
	//var d=document.getElementById(displayid); 
	//var i=document.getElementById(idid); 
	
	var src=document.getElementById(resultsid); 
	
	if (src.selectedIndex>=0) {	
		var t = src.options[src.selectedIndex].text; 
		if (t=="") t = src.options[src.selectedIndex].textContent;
		
		//alert ("about to QuickPick_selectdirect ('" + displayid + "', '" + idid + "', '" + t + "', '" + src.options[src.selectedIndex].value);
		
		QuickPick_selectdirect (displayid, idid, t, src.options[src.selectedIndex].value, prepend);
	} else {
		alert ("QuickPick error: Nothing selected!");
	}
	
	//d.value = t; 
	//i.value = src.options[src.selectedIndex].value;
	
	//alert ("set " + idid + " to '" + i.value + "'")
	
}

*/