/* this file contains js code speciall for use by edit.tpl.php
   these script should run after the form gets loaded */

function one_more_field(field)
{
	var remove_button = document.getElementById("sample_one_less_field_button").cloneNode(true);
	var ps = field.parentNode.getElementsByTagName("p");
	var newfield = field.cloneNode(true);
	newfield.value = "";
	newfield.removeAttribute('onchange');
	newfield.removeAttribute('style');
	newfield.removeAttribute('isError');
	newfield.className="inputText";
	if(newfield.tagName == "INPUT" && newfield.type == "text") {
		if(useGoogleSuggest)
			newfield.onfocus=onfocusHandler;
		else
			newfield.onblur=function() {
				form_text_input_validate(this); 
			};
	}
	remove_button.style.display = "";
	//remove_button.style.display = "inline";
	if(ps.length) {
		field.parentNode.insertBefore(newfield,ps[0]);
		field.parentNode.insertBefore(remove_button,ps[0]);
	}
	else {
		field.parentNode.appendChild(newfield);
		field.parentNode.appendChild(remove_button);
	}
}

function one_less_field(field) {
	if(!field.previousSibling.value || (field.previousSibling.value && confirm(langs.remove_field_warning))) {
		//valid this field if it was invalid and remove the error message if necessary
		field.previousSibling.value='';
		form_text_input_validate(field.previousSibling);
		checkMaxLength(field.previousSibling);
		field.parentNode.removeChild(field.previousSibling);
		field.parentNode.removeChild(field);
	}
}

var invalidElements = [];

function edit_onsubmit(contact_form) {
	var result = validate_form(contact_form);
	if(result === true)
		return true;
	else {
		alert(result);
		return false;
	}
}

function validate_form(contact_form) {
	/* check if there are some synax errors */
	if(invalidElements.length > 0) {
		// now list all invalid attributes, tts#2524
		var invalid_name = [];
		for (var i = 0; i < invalidElements.length; i++) {
			try{
			invalid_name.push(document.getElementById(invalidElements[i]).cells[0].firstChild.nodeValue);
			} catch(e) {}
		}
		return langs.field_has_given_syntax_error.replace('^^^^', "\r\n\r\n  * " + invalid_name.join("\r\n  * ") + "\r\n\r\n");
	}
	/* check the necessary fields */
	var lostNecField = false;
	for(var i=0; i < necessary_fields.length; i++) {
		var fields = contact_form[necessary_fields[i]];
		if(fields.length && fields.type != 'select-one') {
			var field = fields[0];
			for(var j=1; j < fields.length; j++)
				if(fields[j].value != '') {
					field = fields[j];
					break;
				}
		}
		else
			var field = fields;
		var firstcell = field.parentNode.parentNode.cells[0];
		if(field.value == '')
		{
			field.style.borderColor = "red";
			firstcell.style.color = "red";
			firstcell.getElementsByTagName("span")[0].style.textDecoration="blink";
			lostNecField = true;
		}
		else
		{
			field.style.borderColor = "black";
			firstcell.style.color = "black";
			firstcell.getElementsByTagName("span")[0].style.textDecoration="none";
		}
	}
	if(lostNecField) {
		//we switch to the default lang, kill tts#1370
		var lang_select = document.getElementById('lang_select');
		if(lang_select.selectedIndex != 0) {
			lang_select.selectedIndex = 0;
			switch_lang();
		}
		return langs.fields_not_filled_warning;
	}
	/* this should only be disabled if the page is going to be submitted.  
	 * Don't do this before all input are correctly validated */
	if(contact_form.namegen) {
		for (var i=0; i< contact_form.namegen.length; i++) {
			contact_form.namegen[i].setAttribute('disabled', 'disabled');
		}
	}
	return true;
}

/* this function removes all fields that are empty before a search form is 
   submitted. This is because, unlike contact editing, perference settings,
   the search form should be submitted using GET. It makes sense to present
   a meaningful URI for search result page, and it makes sense for the search
   result URI be copy and pasted to another user or getting bookmarked.
   this function is used as form.onsubmit
 */
function search_onsubmit(contact_form)
{
	var ts = new Array('lastrecapdate','createtimestamp','changetime');
	for (var i=0; i < ts.length; i++) {
		if (contact_form[ts[i]]) {
			var from = contact_form[ts[i]+"_from"];
			var to = contact_form[ts[i]+"_to"];
			var t = '';
			if(from.value)
				t = get_date(from.value);
			if(to.value)
				t += '-' + get_date(to.value);
			contact_form[ts[i]].value = t;
			from.disabled = true;
			to.disabled = true;
		}
	}

	// fix nace selector, tts#1438, wbshang
	var bc_value = NACE_get_selected_value();
	if(bc_value != '*')
		contact_form["businesscategory"].value = bc_value + '*';

	for (var i = 0; i < contact_form.length; i++)
	{
		if (contact_form[i].value == '')
			contact_form[i].disabled = true;
		else if ( (contact_form[i].type == "text" || contact_form[i].tagName == "TEXTAREA")
				 && document.getElementById('add_asterisk').checked )
		{
					contact_form[i].value = '*' + contact_form[i].value + '*';
		}
	}
}

function set_default_onsubmit(contact_form)
{
}

//mark this element as invalid
// hack oldbc check
function invalidateElement(ele, errMsg, oldbc) {
	//has been marked as error
	if(ele.isError)
		return;
	var eleParent = oldbc ? ele.parentNode.parentNode : ele.parentNode;
	ele.isError = true;
	ele.className = 'inputErr';
	//increate the count of error
	if(!eleParent.errcount)
		eleParent.errcount = 1;
	else 
		eleParent.errcount++;

	if(eleParent.errcount == 1) {
		if(eleParent.parentNode.id.search(/businesscategory:lang/) == -1)
			invalidElements.push(eleParent.parentNode.id);
		//creat the error msg
		if(errMsg && errMsg.length > 0) {
			var p = document.createElement("div");
			//p.appendChild(document.createTextNode(errMsg));
			p.innerHTML = errMsg;
			p.className = 'errormsg';
			/*
			var ps = eleParent.getElementsByTagName('p');
			if(ps.length > 0)
				eleParent.insertBefore(p, ps[0]);
			else
				eleParent.appendChild(p);
			*/
			eleParent.appendChild(p);
		}
	}
}

//mark this element as valid
function validateElement(ele, oldbc) {
	if(!ele.isError)
		return;
	var eleParent = oldbc ? ele.parentNode.parentNode : ele.parentNode;
	ele.isError = false;
	ele.className = 'inputText';
	eleParent.errcount--;
	//if count of error is 0, remove the error msg if there is
	if(!eleParent.errcount) {
		var i;
		if((i = invalidElements.find(eleParent.parentNode.id)) !== false)
			invalidElements.splice(i, 1);
		/*
		var ps = eleParent.getElementsByTagName('p');
		if(ps.length > 0 && ps[0].className == 'errormsg')
			eleParent.removeChild(ps[0]);
		*/
		if(eleParent.lastChild && eleParent.lastChild.className == "errormsg")
			eleParent.removeChild(eleParent.lastChild);
	}
}

//throw a error msg immediately if the textarea exceed the maxlength, Shang Wenbin
function checkMaxLength(ele) {
	var maxLength= ele.getAttribute ? parseInt(ele.getAttribute("maxlength")) : 0;
	if (!maxLength)
		return true;
	/* the customer requests Chinese ideograph should be $scale characters */
	var scale = 2.5238;
	var len1 = ele.value.replace(/[^\x00-\xff]/g, "").length;
	var len2 = ele.value.replace(/[\x00-\xff]/g, "").length;
	var len = len1 + len2 * scale;
	//alert(len);
	if(len > maxLength && !ele.isError)
		invalidateElement(ele, msg['exceedlength']);
	if(len <= maxLength && ele.isError)
		validateElement(ele);
	return true;
}

//throw a error msg immediately after edit a input text if something wrong, Shang Wenbin
function form_text_input_validate(ele) {
	if(calledFrom != 'edit') 
		return;
	var syntax = false;
	if(ele.name && (syntax = ele.getAttribute('syntax'))) {
		//ok, some tricks here, tobe completed
		if(ele.name == 'labeleduri')
			syntax = 'uri';
		if(reg[syntax]) {
			if(ele.value.length && ele.value.search(reg[syntax]) == -1) 
				invalidateElement(ele, msg[syntax]);
			else
				validateElement(ele);
		}
	}
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function before_switch_lang()
{
	/* check if there are some synax errors */
	// bc error will not stop switch lang, tts#2507
	if(invalidElements.length ==1 && invalidElements[0].search(/businesscategory/) != -1)
		return true;
	if(invalidElements.length > 0) {
		alert(langs.field_has_syntax_error);
		return false;
	}
}

function switch_lang()
{
  // switch_lang only works when there is lang_selection
  // lang_selection could be omitting on search form, for example
  var lang_select = document.getElementById('lang_select');
  if(lang_select) {
	//generate fullname, wbshang
	var selectedLang = lang_select.options[lang_select.selectedIndex].value;
	init_gen_fullname(selectedLang);

	// amf = all_multilingual_fields
	var amf = getElementsByClassName
		(document.getElementById("contact_form"),'multilingual');
	var i, j, k;
	for (i = 0; i < amf.length; i++ )
	if (amf[i].id.indexOf(':')  == -1 && selectedLang == 'Default' 
		||
		(j = amf[i].id.split(':')) && j[1] == "lang-" + selectedLang
	   )
	// this loop: for each amf that is in current language
	{
		amf[i].title  = new String();
		try {
			amf[i].style.display = "table-row";
		}
		catch (e) {
			// this is for IE
			amf[i].style.display = "block";
		}
		if (!j) j = new Array(amf[i].id);
		for (var k = 0; k < lang_select.options.length; k++)
			if (lang_select.options[k].value != lang_select.value)
				with( lang_select.options[k].value == 'Default' ?
					document.getElementById(j[0]) :
					document.getElementById(j[0] + ':lang-' + lang_select.options[k].value)
				)
					for (var l = 0; l < getElementsByTagName('input').length; l++)
						with (getElementsByTagName('input')[l])
							if (value != "")
								amf[i].title += lang_select.options[k].innerHTML + ':' + value + ';';
	}
	// for each amf that is NOT in current language
	else
		amf[i].style.display = "none";
  }
}

/* now we add event to sn, givenname, so that fullname (cn) 
   could be generated automatically
   ================================================================*/

  // we don't generate full name when lang_select doesn't exist
  // when there is no lang_select then we might be in preference / search page
  // we only do this when the page is in multilanguage mode, that is
  // lang_select exists
// use this function to initialize full name when switch lang, wbshang
var currentLang = '';
var genmethodCache = new Object();
function init_gen_fullname(lang) {
  if( document.getElementById('lang_select'))
  {
	currentLang = lang;
	var ext = '';
	if(lang != 'Default')
		ext = ':lang-' + lang;
	var form = document.getElementById('contact_form');
	var cn, sn, givenname;
	if((sn = form['sn'+ext] )
		&& (givenname = form['givenname'+ext] )
		&& (cn = form['cn'+ext] )
		)
	{
		if (sn.length) sn = sn[0];
		if (givenname.length) givenname = givenname[0];
		if (cn.length) cn = cn[0];
		var genmethod = 'sg';
		if(genmethodCache[lang])
			genmethod = genmethodCache[lang];
		else if(!cn.value && defaultGenmethod)
			genmethod = defaultGenmethod[lang];
		else if (cn.value != sn.value)
		// if we can tell what method is used to generate fullname
		{
			genmethod = 
				cn.value == sn.value + givenname.value ? 'sg' : 
				(cn.value == givenname.value + ' ' + sn.value ? 'g_s' : 'no' );
		}
		for (var i = 0; i < form.namegen.length; i++) {
			if (form.namegen[i].value == genmethod) {
				form.namegen[i].checked = true;
				break;
			}
		}
		generate_fullname();
		sn.onchange = generate_fullname;
		givenname.onchange = generate_fullname;
	}
  }
}

function generate_fullname()
{
	var form = document.getElementById('contact_form');
	var ext = '';
	if(currentLang != 'Default')
		ext = ':lang-' + currentLang;
	var cn, sn, givenname;
	if  (  (sn = form['sn'+ext] )
		&& (givenname = form['givenname'+ext] )
		&& (cn = form['cn'+ext] )
		)
	{
		if (sn.length) sn = sn[0];
		if (givenname.length) givenname = givenname[0];
		if (cn.length) cn = cn[0];
		var genmethod; 
		for( var i=0; i< form.namegen.length; i++)
		{
			if (form.namegen[i].checked ) {
				genmethod = form.namegen[i].value;
				break;
			}
		}
		genmethodCache[currentLang] = genmethod;
		switch(genmethod)
		{
		case 'sg':
			cn.readOnly = true;
			cn.value = sn.value + givenname.value ;
			cn.style.backgroundColor = "silver";
			cn.onclick = function() {alert('You can edit this item in surname and given name.');}
			break;
		case 'g_s':
			cn.readOnly = true;
			cn.value = givenname.value + ' ' + sn.value ;
			cn.style.backgroundColor = "silver";
			cn.onclick = function() {alert('You can edit this item in surname and given name.');}
			break;
		case 'no':
			cn.readOnly = false;
			cn.style.backgroundColor = "white";
		}
	}
}


  var alignIndex = {
	  st: [
		["Anhui", "安徽"],
		["Beijing", "北京"],
		["Chongqing", "重庆"],
		["Fujian", "福建"],
		["Gansu", "甘肃"],
		["Guangdong", "广东"],
		["Guangxi", "广西"],
		["Guizhou", "贵州"],
		["Hainan", "海南"],
		["Hebei",  "河北"],
		["Heilongjiang", "黑龙江"],
		["Henan", "河南"],
		["Hubei", "湖北"],
		["Hunan", "湖南"],
		["Inner Mongolia", "内蒙古"],
		["Jiangsu", "江苏"],
		["Jiangxi", "江西"],
		["Jilin", "吉林"],
		["Liaoning", "辽宁"],
		["Ningxia", "宁夏"],
		["Shaanxi", "陕西"],
		["Shandong", "山东"],
		["Shanghai", "上海"],
		["Shanxi", "山西"],
		["Sichuan", "四川"],
		["Tianjin", "天津"],
		["Xinjiang", "新疆"],
		["Yunnan", "云南"],
		["Zhejiang", "浙江"],
		["Outside of China", "非中国"]
	  ],
	  region: [
		["Mainland China", "中国大陆"],
		["Hong Kong", "香港"],
		["Macau", "澳門"],
		["Taiwan", "台灣"],
		["Germany", "德国", "Deutschland"],
		["Other Countries", "其它国家", "Andere Staaten"]
	  ],
	  ahkpcstate: [
		["Baden-Wuerttemberg", "巴登－符腾堡", "Baden-Württemberg"],
		["Bavaria", "巴伐利亚", "Bavaria"],
		["Berlin", "柏林"],
		["Brandenburg", "勃兰登堡"],
		["Bremen", "不来梅"],
		["Hamburg", "汉堡"],
		["Hesse", "黑森"],
		["Mecklenburg-Western Pomerania", "梅克伦堡－前波莫瑞"],
		["Lower Saxony", "下萨克森"],
		["North Rhine-Westphalia", "北莱茵－威斯特法伦"],
		["Rhineland-Palatinate", "莱茵兰－法耳茨"],
		["Saarland", "萨尔"],
		["Saxony", "萨克森"],
		["Saxony-Anhalt", "萨克森－安哈特"],
		["Schleswig-Holstein", "石勒苏益格－荷尔斯泰因"],
		["Thuringia", "图林根", "Thüringen"]
	  ],
	  ahkcompanytype: [
		["Representative Office", "代表处"],
		["Equity Joint Venture", "合资公司"],
		["Contractual Joint Venture", "合作公司"],
		["Wholly Foreign-Owned Enterprise", "独资企业"],
		["Institution", "机构"],
		["Project", "项目"],
		["Branch Company (Ch)", "分公司（总公司在中国）"],
		["Branch Company (G)", "分公司（总公司在德国）"]
	  ]
  };

  function multialign(name,value) {
	var p=name.lastIndexOf(':');
	if(p > 0)
		var attr = name.substring(0,p);
	else
		var attr = name;
	var names = [attr,attr+':lang-de',attr+':lang-zh'];
	var index = alignIndex[attr];
	var edit_form = document.getElementById('contact_form');
	for(var i=0; i<index.length; i++) {
		if(index[i].find(value) !== false)
			break;
	}
	i++; //the first one is N/A
	for(var j=0; j<names.length; j++) {
		if(names[j] != name)
			edit_form[names[j]].options[i].selected = true;
	}
  }

  function addLoadEvent(fn)
  {
  	if (window.addEventListener) {
		window.addEventListener('load', fn, true);
		return true;
	}
	else if (window.attachEvent) {
		var r = window.attachEvent("onload", fn);
		return r;
	}
	else {
		return false;
	}
  }

/* for business categories order, wbshang, tts#1523 */
var selectedBCDiv = null;
var bcContainersID = ["businesscategory", "businesscategory-lang-zh", "businesscategory-lang-de"];

function addBCEvents() {
	try {
	for( var i=0; i<bcContainersID.length; i++) {
		var catDivs = document.getElementById(bcContainersID[i]).getElementsByTagName("div");
		for(var j=0; j<catDivs.length; j++) {
			addMouseEvent(catDivs[j]);
		}
	}
	} catch(e) {}
}
function addMouseEvent(ele) {
	ele.onmouseover = function() { addClassName(this, "bcover"); };
	ele.onmouseout = function() { removeClassName(this, "bcover"); };
	ele.onmousedown = bcMousedownHandler;
}

function bcMousedownHandler() {
	if(selectedBCDiv)
		removeClassName(selectedBCDiv, "bcselected");
	addClassName(this, "bcselected");
	selectedBCDiv = this;
}

function moveUpDown(direction) {
	if(!selectedBCDiv)
		return;
	try {
	var code = selectedBCDiv.getElementsByTagName("input")[0].value.split(" ")[0];
	for (var i = 0; i < bcContainersID.length; i++) {
		var c = document.getElementById(bcContainersID[i]);
		var list = c.getElementsByTagName("input");
		for (var j = 0; j < list.length; j++) {
			if(list[j].value.split(" ")[0] == code) {
				doMoveUpDown(list[j].parentNode, direction);
				break;
			}
		}
	}
	} catch(e) {}
}

function doMoveUpDown(ele, direction) {
	if(direction == "up") {
		if(ele.previousSibling) {
			ele.parentNode.insertBefore(ele, ele.previousSibling);
		}
	}
	else {  // down
		if(ele.nextSibling) {
			ele.parentNode.insertBefore(ele.nextSibling, ele);
		}
	}
}

function delete_bc() {
	try {
	if(!selectedBCDiv)
		return;
	var code = selectedBCDiv.getElementsByTagName("input")[0].value.split(" ")[0];
	for (var i = 0; i < bcContainersID.length; i++) {
		var c = document.getElementById(bcContainersID[i]);
		var list = c.getElementsByTagName("input");
		for (var j = 0; j < list.length; j++) {
			if(list[j].value.split(" ")[0] == code) {
				validateElement(list[j].parentNode, true);
				c.removeChild(list[j].parentNode);
				break;
			}
		}
	}
	} catch(e) {}
}
/* end BC Order */
// open BC selector
function open_bcselector(url) {
	var iframe = document.getElementById("bc_selector");
	if(iframe) {
		try {
			// ie??? iframe.contentDocument
			iframe.reset_selector();
		} catch(e) {
			// ff??? iframe.contentWindow.document
			iframe.contentWindow.reset_selector();
		}
	}
	else {
		iframe = document.createElement("iframe");
		iframe.id = "bc_selector";
		iframe.src = url;
		document.body.appendChild(iframe);
	}
	iframe.style.display = "";
}
function hide_bcselector() {
	document.getElementById("bc_selector").style.display = "none";
}

/* for category select, kill tts#1560, wbshang */
function checkCategorySelected() {
	var catwrapper = document.getElementById("categorywrapper");
	if( !catwrapper )
		return false;
	var cats = catwrapper.getElementsByTagName("input");
	for( var i=0; i<cats.length; i++ ) {
		if( cats[i].checked )
			selectCategory( cats[i] );
		cats[i].onclick = function() { selectCategory(this); };
	}
}

//enable or disable the sub cats
function selectCategory(ele) {
	var catid = parseInt( ele.value, 10 );
	if( isNaN(catid) )
		return false;
	var classname = "subcatof" + catid;
	var disabled = ele.checked ? false : true;
	var sibling = ele.parentNode;
	while( sibling = sibling.nextSibling )  {
		if( hasClassName(sibling, classname) )  {
			var cat = sibling.getElementsByTagName("input")[0];
			if( disabled && cat.checked )  {
				cat.checked = false;
				selectCategory(cat);
			}
			cat.disabled = disabled;
		}
	}
}
/* end category select */

/* validate wrong bc caused by migration to nace */
function validateOldBC() {
	try {
	for (var i = 0; i < bcContainersID.length; i++) {
		var seled = document.getElementById(bcContainersID[i]).getElementsByTagName("input");
		for(var j=0; j < seled.length; j++) {
			// the nace code should be 6 chars
			if(seled[j].value.split(" ")[0].length < 6) {
				invalidateElement(seled[j].parentNode, msg.oldbc, true);
			}
		}
	}
	} catch(e) {}
}

function switch_tabs(url) {
	var form = document.getElementById('contact_form');
	var result = validate_form(form);
	if(result === true) {
		var confirm_str = 'Do you want to save the modification on the present page?' + String.fromCharCode(10) +
			'Please press OK to save and continue to the next page or Cancel to leave the page without saving the update.';
		if (confirm(confirm_str)) {
			form.redirect_url.value = url;
			form.submit();
			return false;
		}
		else
			return true;
	}
	else {  // there are errors in form
		var confirm_str = 'There are following errors in the form: ' + String.fromCharCode(10) + 
			result + String.fromCharCode(10) + 
			'Continue editing until all errors are corrected? Press "Cancel" will abandon all the changes you made.';
		return !confirm(confirm_str);
	}
}

if(calledFrom == 'edit') {
  addLoadEvent(switch_lang);
  addLoadEvent(addBCEvents);
  addLoadEvent(checkCategorySelected);
  addLoadEvent(validateOldBC);
  //auto align in different lang version,wbshang
  addLoadEvent(function() {
	var edit_form = document.getElementById('contact_form');
	var alignAttr = ['st','region','ahkpcstate','ahkcompanytype'];
	for(var i=0; i<alignAttr.length; i++) {
		var attr = alignAttr[i];
		if(edit_form[attr]) {
			var names = [attr,attr+':lang-de',attr+':lang-zh'];
			for(var j=0; j<names.length; j++) {
				edit_form[names[j]].onchange = function() { multialign(this.name,this.value); };
			}
		}
	}
  });
}


