function InitXMLHttpRequest() {
	var req=null;
	// Make a new XMLHttp object
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return req;
}
function AjaxQuery(query, dest, func, params){
	var req=InitXMLHttpRequest();
	
	if(dest!=null) var field=document.getElementById(dest);
	req.onreadystatechange = function() {
		if(dest=='') return 0;
		if (req.readyState == 4) {
			if(dest!=null) RunJS(dest, req.responseText);
			if(func!=null) {
				exec_str="func(";
				if(params!=null){
					var len=params.length;
					for(var i=0;i<len;i++){
						exec_str+="params["+i+"]";
						if(i!=(len-1)) exec_str+=', ';
					}
				}
				exec_str+=");";
				eval(exec_str);
			}
		}
	}
	req.open("GET", query+'&rnd='+Math.random(), true);
	req.send(null);
	if(dest!=null) field.innerHTML = '<div align="center"><img src="'+window.images_path+'/ajax.gif"> Loading data...</div>';
}

function GetSectionAttrs(id_sec, dest, dest1, dest2){
	last=document.getElementById('sec_'+id_section);
	cur=document.getElementById('sec_'+id_sec);
	last.className='inactive_section';
	cur.className='active_section';
	id_section=id_sec;
	var del_button=document.getElementById('del_button');
	
	if(s_const[id_section]!=null){
		del_button.disabled=true;
	}
	else{
		del_button.disabled=false;
	}
	var field1=null, field2=null;
	field1=document.getElementById(dest1);
	if(dest2) field2=document.getElementById(dest2);
	field1.innerHTML='';
	if(field2) field2.innerHTML='';
	
	AjaxQuery("ajax_sections.php?sel=get_section_attrs&id_section=" + id_sec, dest);
}

function DelSecAttibute(id_section, id_attr){
	var params=new Array(4);
	params[0]=id_section;
	params[1]='sec_attrs_div';
	params[2]='cur_section_div';
	params[3]='attr_props_div';
	
	AjaxQuery("ajax_sections.php?sel=del_section_attr&id_attr="+id_attr, null, GetSectionAttrs, params);
}

function LoadAtributeForm(id_sec, id_attr, dest, dest2){
	field2=document.getElementById(dest2);
	if(field2) field2.innerHTML="";
	var act=(id_attr!=null)?'edit':'new';
	AjaxQuery("ajax_sections.php?sel=get_attr_form&act="+act+"&id_sec="+id_sec+"&id_attr="+id_attr, dest);
}

function LoadAttrPropsForm(control_type, id_attr, dest){
	query="ajax_sections.php?sel=get_attr_props_form&control_type="+control_type;
	if(id_attr!=null) query+="&id_attr="+id_attr;
	AjaxQuery(query, dest);
}

function RunJS(div_name, response){
	var d2 = document.getElementById(div_name);

	//Check user browser
	var agent=(window.navigator.appName=='Netscape')?'Firefox':'IE';

	if(agent=='IE'){
		d2.innerHTML=response;
		var arr_scripts = d2.getElementsByTagName("script");
		for(i in arr_scripts){
			var src = arr_scripts[i].src;
			if(null!=src){
				var has_question = (src.indexOf('?', 1)>0 ? true : false);
				if(0==src.length)
					arr_scripts[i].setAttribute('src', '');
				else
					arr_scripts[i].setAttribute('src', arr_scripts[i].src + (has_question==true ? '&' : '?') + '1=1');
			}
		}
	}
	else{
		//Mozilla
		var d1=d2.parentNode;
		var d_new=document.createElement('div');
		
		//Set same attributes as original
		var attributes=d2.attributes;
		var len=attributes.length;

		d_new.innerHTML=response;
		for(var i=0; i<len; i++){
			d_new.setAttribute(attributes[i].name, attributes[i].value);
		}
		
		d1.replaceChild(d_new, d2);
	}
}

function LoadSectionAttrs(id_sec, id_form, dest){
	id_section=id_sec;

	var after_load=function(dest){
		Sortable.destroy(sections[0]);
		Sortable.destroy(sections[1]);
		Sortable.create(sections[0],{tag:'div', onUpdate: updateForm, dropOnEmpty: true, containment: sections, only:'lineitem', constraint:false});
		Sortable.create(dest,{tag:'div', dropOnEmpty: true, containment: sections, only:'lineitem', constraint:false});
		
		//Force constant attributes to constraint
		if(id_form==1) ForceConstraint();
	}
	var params=Array(1);
	params[0]=dest;
	AjaxQuery("ajax_forms.php?sel=get_section_attrs&id_section=" + id_sec+"&id_form="+id_form, dest, after_load, params);
}

function LoadSectionAttrsView(id_sec, dest){
	last=document.getElementById('sec_'+id_section);
	cur=document.getElementById('sec_'+id_sec);
	last.className='inactive_section';
	cur.className='active_section';
	id_section=id_sec;

	var after_load=function(dest){
		var attrs_div=document.getElementById(dest);
		var divs=attrs_div.getElementsByTagName('div');
		var arr_len=divs.length;
		for(var i=0; i<arr_len;i++){
			new Draggable(divs[i], {ghosting:true, revert:true});
		}
	}
	var params=Array(1);
	params[0]=dest;
	AjaxQuery("ajax_forms.php?sel=list_attrs&id_section=" + id_sec, dest, after_load, params);
}

function LoadFormAttrs(id_form, id_b, dest){
	id_block=id_b;
	
	var after_load=function(dest){
		Sortable.destroy(sections[0]);
		Sortable.destroy(sections[1]);
		Sortable.create(sections[1],{tag:'div', onUpdate: updateForm, dropOnEmpty: true, containment: sections, only:'lineitem', constraint:false});
		Sortable.create(sections[0],{tag:'div', dropOnEmpty: true, containment: sections, only:'lineitem', constraint:false});
		
		//Force constant attributes to constraint
		if(id_form==1) ForceConstraint();
	}
	var params=Array(1);
	params[0]=dest;
	AjaxQuery("ajax_forms.php?sel=get_form_attrs&id_form="+id_form+"&id_block="+id_b, dest, after_load, params);
}

//Attribute edit form
function CheckValues(){
	var form=document.attr_props;
	var len=form.control_type.length;
	var c_type='';
	for(var i=0; i<len;i++){
		if(form.control_type[i].checked){
			c_type=form.control_type[i].value;
			break;
		}
	}
	switch(c_type){
		case 'date':
					if(form.min_age.value>form.max_age.value){
						var temp=form.max_age.value;
						form.max_age.value=form.min_age.value;
						form.min_age.value=temp;
					}
					if(form.min_age.value==form.max_age.value){
						alert(err_age_invalid);
						return false;
					}
					break;
	}

	if(form.field_name.value==''){
		alert(err_field_name);
		form.field_name.focus();
		return false;
	}
	return true;
}

//Attribute properties form
function addElement(){
	var form=document.attr_props;
	
	if(form.new_value.value=='') return;
	temp_id++;
	form.values.options[form.values.length]=new Option(form.new_value.value, temp_id);
	form.s_data.value=serializeArr(form.values.options);
}

function delElement(){
	var form=document.attr_props;
	form.values.options[form.values.selectedIndex]=null;
	form.s_data.value=serializeArr(form.values.options);
}

function moveUp(){
	var form=document.attr_props;
	
	var index=form.values.selectedIndex;
	if(index==0) return false;
	
	var options=form.values.options;
	var temp_text=options[index-1].text;
	
	options[index-1].text=options[index].text;
	options[index].text=temp_text;
	options[index-1].selected=true;
	options[index].selected=false;
	form.s_data.value=serializeArr(form.values.options);
}

function moveDown(){
	var form=document.attr_props;
	
	var options=form.values.options;
	var index=form.values.selectedIndex;
	if(index==(options.length-1)) return false;
	var temp_text=options[index+1].text;
	
	options[index+1].text=options[index].text;
	options[index].text=temp_text;
	options[index+1].selected=true;
	options[index].selected=false;
	form.s_data.value=serializeArr(form.values.options);
}

function serializeArr(arr){
	var str='';
	var arr_len=arr.length;
	for(var i=0;i<arr_len;i++){
		str+=arr[i].value+'<!!>'+arr[i].text+'<!;>';
	}
	return str;
}

function DisableListboxSetup(type){
	var form=document.attr_props;
	
	if(type!='listbox'){
		form.vsize.disabled=true;
		form.is_mult.disabled=true;
	}
	else{
		form.vsize.disabled=false;
		form.is_mult.disabled=false;		
	}
}

function DisableListboxPanel(disable){
	var form=document.attr_props;
	
	form.add_btn.disabled=disable;
	form.del_btn.disabled=disable;
	form.mu_btn.disabled=disable;
	form.md_btn.disabled=disable;
	form.new_value.disabled=disable;
}

function GetDsValues(id_ds){
	
	//Block add/delete operations if Datasource is User Types
	if (id_ds==10) DisableListboxPanel(true);
		else DisableListboxPanel(false);
	
	var field=document.attr_props;
	var myFunc=function(){
		var form=document.attr_props;
		var arr_len=form.values.options.length;
		form.s_data.value=serializeArr(form.values.options);
		temp_id=0;
		for(var i=0; i<arr_len; i++){
			if(form.values.options[i].value>temp_id) temp_id=form.values.options[i].value;
		}
	}
	AjaxQuery('ajax_sections.php?sel=get_ds_values&id_ds='+id_ds, 'values_div', myFunc, null);
	return true;
}

function LoadPossibleFields(id_attr, ass_type, control_type, dest){
	AjaxQuery('ajax_sections.php?sel=get_ass_fields&id_attr='+id_attr+'&c_type='+control_type+'&ass_type='+ass_type, dest);
}

function SwitchDiv(id_attr){
	var text_div=document.getElementById("listtext_"+id_attr);
	var attr_div=document.getElementById("listdiv_"+id_attr);
	var imgstatus=document.getElementById("liststatus_"+id_attr);
	
	var act=(text_div.style.display=="none")?"close":"open";
	switch(act){
		case "open":
			setCookie("lst"+id_attr, 1, 365);
			if(text_div!=null) text_div.style.display="none";
			if(attr_div!=null) attr_div.style.display="block";
			if(imgstatus!=null) imgstatus.src=window.images_path+"/list_opened.gif";
			break;
		case "close":
			setCookie("lst"+id_attr, 0, 365);
			if(text_div!=null) text_div.style.display="block";
			if(attr_div!=null) attr_div.style.display="none";
			if(imgstatus!=null) imgstatus.src=window.images_path+"/list_closed.gif";
			break;
	}
}
		
//Location functions
function SelectRegion(id_country, destination, destination2, id_page) {
	if (id_country != 0) {
		var query=window.server_path+"/location.php?sel=region&id_country=" + id_country+"&idp="+id_page;
		AjaxQuery(query, destination);
	} else {
		document.getElementById(destination).innerHTML = "Country is not selected";
	}
	document.getElementById(destination2).innerHTML = "";
}

function SelectCity(id_region, destination, id_page) {
	if (id_region>0) {
		var query=window.server_path+"/location.php?sel=city&id_region=" + id_region+"&idp="+id_page;
		AjaxQuery(query, destination);
	} 
	else if(id_region==0){
		TransferData();
	}
	else {
		document.getElementById(destination).innerHTML = "Region is not selected";
	}
}

function HandlePlaceCtrl(id_attr, id_user, ctrl, id_page){
	var win=window.open(window.server_path+"/location.php?sel=map&id_attr="+id_attr+"&id_user="+id_user+"&idp="+id_page, 'map_table', 'menubar=0, resizable=0, scrollbars=0,status=0,toolbar=0, width=690,height=350');
	win.focus();
	ctrl.options[1].selected=true;
}

function HandleRangeCtrl(id, type, ctrl, def_value, action){
	switch(action){
		case "focus":
			if(ctrl.value==def_value){
				ctrl.className='';
				ctrl.value='';
			}
			break;
		case "blur":
			if(ctrl.value==''){
				ctrl.className='ctrl_hidden';
				ctrl.value=def_value;
			}
			break;
	}
}

function ShowOtherField(show, id_attr){
	var obj=document.getElementById('ado_other_'+id_attr);

	if(obj.tagName=='DIV') obj.style.display=(show)?'block':'none'; else obj.disabled=!show;
}

function check_empty(id_attr, field){
	//Checkbox sets control
	if(field.type=="checkbox"){
		var form=field.form;
		var len=form.length;
		var count=0;
		var checked=false;
		for(var i=0; i<len; i++){
			if(form.elements[i].name.indexOf("attr_"+id_attr)!=-1){
				if(form.elements[i].checked) checked=true;
				count++;
				if(checked==true) break;
			}
		}
		
		if(count>1 && checked==false){
			error = err_empty.replace(/\[field\]/, fields[id_attr]);
			return error;
		} else return "";
	}
	
	//Files
	if(files[id_attr]!=null){
		if(files[id_attr]==1) return "";
	}
	
	//Other cases
	if(field.value==""){
		error = err_empty.replace(/\[field\]/, fields[id_attr]);
		return error;
	} else return "";
}

function check_pattern(id_attr, field){
	var pattern=regs[id_attr];
	if (field.value && pattern.test(field.value) == false)	{
		error = err_invalid.replace(/\[field\]/, fields[id_attr]);
		return error;
	} else return "";
}

function check_pwd_equal(id_attr, field){
	var rePwd=document.getElementById("attr_re_"+id_attr);
	if(field.value!=rePwd.value) return err_pwd_equal;
	return "";
}

//Cookie functions
function setCookie(c_name,value,expiredays){
	var exdate=new Date()
	exdate.setDate(exdate.getDate()+expiredays)
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

function getCookie(c_name){
	if (document.cookie.length>0)	{
		c_start=document.cookie.indexOf(c_name + "=")
		if (c_start!=-1){
			c_start=c_start + c_name.length+1 
			c_end=document.cookie.indexOf(";",c_start)
			if (c_end==-1) c_end=document.cookie.length
			return unescape(document.cookie.substring(c_start,c_end))
		} 
	}
	return ""
}