//alert('core_general.js ');

function find_obj_by_key(setting){
	//this function search in an array of objects and return an object's index with certain id
	subject_arr = (setting.subject_arr) ? setting.subject_arr : false;
	field_name = (setting.field_name) ? setting.field_name : false;
	field_value = (setting.field_value) ? setting.field_value : false;
	
	if(!subject_arr || !field_name || !field_value) return false;
	
	for(var i in subject_arr){
		subj_inx = subject_arr[i];
		field_value_inx = eval("subject_arr["+i+"]."+field_name);
		if(field_value_inx==field_value){
			return subject_arr[i];
		}
	}
	return false; 
};

function get_combo_selected_options(id){
    var i;
    var selectedStr = ',';
    var selectedArr = new Array();
	var obj = fObj(id);
    for(i=0; i<obj.length; i++) {
    	if(obj.options[i].selected){
    		//cLog(obj.options[i]);
	    	var value = obj.options[i].value;
	    	selectedArr.push(value);
	    	selectedStr += value+',';
    	}
	}	
	return {s_arr:selectedArr,s_str:selectedStr};
};

function handle_mob_number_box(id, should_replace){
	mob_obj = fObj(id);
	res = is_valid_mob_number(mob_obj.value);
	if(should_replace) mob_obj.value = res.number; 
	if(!res.stus && fObj(id+'_noti_cntnr')){
		fObj(id+'_noti_cntnr').innerHTML = res.number+' '+res.err_msg_fa;
	}else{
		fObj(id+'_noti_cntnr').innerHTML = res.number+' '+res.err_msg_fa;
	}
}

function is_valid_mob_number(number){
	number = number.replace(/[^0-9]/g, "");
	if(number.substr(0,4)=='0098') number = '0'+number.substr(4);
	if(number.substr(0,3)=='098') number = '0'+number.substr(3);
	if(number.substr(0,2)=='98') number = '0'+number.substr(2);
	
	if(number.substr(0,2)!='09') return{stus:false, number:number, err_msg_fa:'پیش شماره 09 در شماره وارد شده نیست'};
	if(number.length!=11) return{stus:false, number:number, err_msg_fa:'طول شماره موبایل 11 رقم نیست'};
	
	return{stus:true, number:number, err_msg_fa:'شماره درست است'};
}

function get_online_cnt_aj(response){
	if(response){
		shouldDspPreload = shouldDspMask = true;
		if(fObj('online_cnt_cntnr')) fObj('online_cnt_cntnr').innerHTML = response+' آنلاین';
		setTimeout("get_online_cnt_aj()", 90000);
	}else{
		shouldDspPreload = shouldDspMask = false;
		Q = 'pg=home&cmd=get_online_cnt_aj';
		aHW(Q, arguments.callee.toString());
	}
}

function enc64(str){return(Base64.encode(str));}
function dec64(str){return(Base64.decode(str));}

var Base64 = {
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

	// public method for encoding
	encode : function(input){
		if( nl(input) ){
			return '';
		}//end if
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = Base64._utf8_encode(input);
		while(i < input.length){

			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if(isNaN(chr2)){
				enc3 = enc4 = 64;
			}else if(isNaN(chr3)) {
				enc4 = 64;
			}//end if

			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
		}//end while
		return(output);
	}//end func
	,

	// public method for decoding
	decode : function(input){
		if( nl(input) ){
			return '';
		}//end if
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		while(i < input.length){
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);
			if(enc3 != 64){
				output = output + String.fromCharCode(chr2);
			}//end if
			if(enc4 != 64){
				output = output + String.fromCharCode(chr3);
			}//end if
		}//end while
		output = Base64._utf8_decode(output);
		return(output);
	}//end func
	,

	// private method for UTF-8 encoding
	_utf8_encode : function(string){
		if( nl(string) ){
			//alert("[base64-_utf8_decode] : input is null. ")
			return;
		}//end if
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for(var n = 0; n < string.length; n++){
			var c = string.charCodeAt(n);
			if(c < 128){
				utftext += String.fromCharCode(c);
			}else if((c > 127) && (c < 2048)){
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}else{
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}//end if
		}//end for
		return(utftext);
	}//end func
	,

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		if( nl(utftext) ){
			//alert("[base64-_utf8_decode] : input is null. ")
			return;
		}//end if
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while( i < utftext.length ){
			c = utftext.charCodeAt(i);
			if(c < 128){
				string += String.fromCharCode(c);
				i++;
			}else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}else{
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}//end if
		}//end while
		return(string);
	}//end func
};

Number.prototype.iFormatMoney = function(){
	return this.formatMoney(0, '.', ',');
};

Number.prototype.formatMoney = function(c, d, t){
	var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
 
function is_valid_email(emailStr){  
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,5}$/;  
	return emailPattern.test(emailStr);  
}

var passStrength=0;
function check_password_power(password){
	//cLog(password);
	var psMsg; 
	psMsg = ['بد','ضعیف','متوسط','خوب','عالی','قوی'];
	//password=pchangepass.newpass.value;
	passStrength=0;
	if(password.length>6) passStrength++;
	if((password.match(/[a-z]/))&&(password.match(/[A-Z]/))) passStrength++;
	if(password.match(/\d+/)) passStrength++;
	if(password.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/)) passStrength++;
	if(password.length>10) passStrength++;
	
	fObj('passwordpowerbarId').style.width= passStrength*20+'%';
	fObj('passwordpowerId').innerHTML = ['بد','ضعیف','متوسط','خوب','عالی','قوی'][passStrength];
}

function slDslChks(obj, id){
	if(obj.checked){
		var stus = 'checked';
	}else{
		var stus = '';
	}
	
	var allChks = $('#'+id+' input[type="checkbox"]');
	if(allChks){
		for(var e in allChks){
			allChks[e].checked = stus;
		}
	}
	
	var allChks = $('.'+id+' input[type="checkbox"]');
	if(allChks){
		for(var e in allChks){
			allChks[e].checked = stus;
		}
	}
	
}

function cLog(inp){
	try{
		//Run some code here
		if(console.log) console.log(inp);
	}catch(err){
	  //Handle errors here
	}
}

var global_array;
global_array = [];
function array_setter(key, value){
	var res;
	res = array_getter(key);
	if(res){
		global_array[res.i].v = value;
	}else{
		global_array.push({k:key, v:value});
	}
}

function array_getter(key){
	for(var i in global_array){
		if(global_array[i].k==key) return {k:global_array[i].k, v:global_array[i].v, i:i}; 
	}
	return false;
}

var ttt;
function slideshower(id, forcedInx){
	clearTimeout(ttt);
	if(forcedInx || (forcedInx=='-1')){
		if(forcedInx=='-1'){
			inx = array_getter('slSh_inx_'+id).v-2;
			if(inx<1) inx = array_getter('slSh_info_'+id).v.length;
		}else{
			inx = forcedInx;
		}
	}else{
		inx = array_getter('slSh_inx_'+id).v;
	}
	trunon_slide(array_getter('slSh_info_'+id).v, inx);
	
	inx++;
	if(inx > array_getter('slSh_info_'+id).v.length) inx = 1;
	array_setter('slSh_inx_'+id, inx);
	
	var delay = array_getter('slSh_delay_'+id).v;
	ttt=setTimeout("slideshower('"+id+"')", (delay ? delay : 10000));
}

function trunon_slide(arr, inx){
	inx--;
	for (var e in arr){
//		cLog('e,inx->'+e+','+inx);
		if(e==inx){
			cLog('slCntnr_'+arr[e]);
			if(fObj('slCntnr_'+arr[e])) fObj('slCntnr_'+arr[e]).style.display = 'block';
			if(fObj('btn_'+arr[e])) fObj('btn_'+arr[e]).className = 'hBtn';
		}else{
			if(fObj('slCntnr_'+arr[e])) fObj('slCntnr_'+arr[e]).style.display = 'none';
			if(fObj('btn_'+arr[e]))	fObj('btn_'+arr[e]).className = 'nrmBtn';
		}
	}
}

var cBF = '';
var isValidAjRes = false;
var ajax_max_respone_time = 900000;
var is_waited_for_ajax_response = false;
function aHW(q, fInfo){
	//Ajax Handler Wrapper
	if(shouldDspPreload) ajPrldHndr(true);//handle preload display
	if(shouldDspMask) handle_aj_g_mask('on');//handle preload display
	is_waited_for_ajax_response = true;
	setTimeout("unsuccessfull_ajax_response()", ajax_max_respone_time);
	
//	cBF = fInfo.substr('function '.length).substr(0, fInfo.substr('function '.length).indexOf('('));
//	var spacefix = / /gi;
//	cBF = cBF.replace(spacefix, "");
	cBF = get_pure_func_name(fInfo);
	
	isValidAjRes = false;
	$.ajax({ url: "../"+PROJECT_FOLDER_NAME+"/ajax.handler.php?reqType=ajax&"+q, context: document.body, success: function(data){ajaxCallback(data);}});
}

function aHWC(q, fInfo){
	//Ajax Handler Wrapper whit clean callback
	if(shouldDspPreload) ajPrldHndr(true);//handle preload display
	if(shouldDspMask) handle_aj_g_mask('on');//handle preload display
	is_waited_for_ajax_response = true;
	setTimeout("unsuccessfull_ajax_response()", ajax_max_respone_time);
	
	cBF = fInfo;
	
	isValidAjRes = false;
	$.ajax({ url: "../"+PROJECT_FOLDER_NAME+"/ajax.handler.php?reqType=ajax&"+q, context: document.body, success: function(data){ajaxCallback(data);}});
}

function get_pure_func_name(inp){
	cBFN = inp.substr('function '.length).substr(0, inp.substr('function '.length).indexOf('('));
	var spacefix = / /gi;
	cBFN = cBFN.replace(spacefix, "");
	return cBFN;	
}

var cBFoF = '';
function unsuccessfull_ajax_response(){
	ajPrldHndr(false); 
	handle_aj_g_mask('off'); 
	if(is_waited_for_ajax_response){
		//cLog(cBFoF);
		var cbfNoF = eval(cBFoF);//callback function on fail
		if(typeof cbfNoF == 'function') cbfNoF();
	}
}

var aResArr;
function ajaxCallback(response){
//	response = response.replace(/TAKQOT/g, "\\'" );
	is_waited_for_ajax_response = false;
	ajPrldHndr(false);
	handle_aj_g_mask('off');
	
	aResArr = response.split('[*]');
	if(!aResArr[1]){
		isValidAjRes = false;
		alert('Inv Aj Res');
		return;
	}
	
	if(aResArr[1]=='ok'){
		isValidAjRes = true;
		if(aResArr[2]=='no'){
			var fRes = aResArr[3]; 
			
		}else if(aResArr[2]=='b64'){
		
		}else if(aResArr[2]=='json'){
			eval('var fRes = '+aResArr[3]); 
		}
		
	}else if(aResArr[1]=='err'){
		isValidAjRes = false;
		var fRes = aResArr[3]; 
		
	}else{
		isValidAjRes = false;
		fRes = 'Inv Aj Res:';
		alert(fRes);
		//return;
	}
	var cbfN = eval(cBF);
	cbfN(fRes?fRes:'.');
	
//	(function(fRes){eval(cBF+"('"+fRes+"')");
//	eval(cBF+"('"+fRes+"')");
}

var iframe_p, form_p, cbf_p;
iframe_p = false;
function _fAP(response, fcbf, ap_key_value){ 
	//frame associative poster
	//this function fakes an AJAX functionality
	
	if(response){
		ajPrldHndr(false); 
		handle_aj_g_mask('off'); 
		//alert(cbf_p);
		
		aResArr = response.split('[*]');
		if(!aResArr[1]){
			isValidAjRes = false;
			alert('Inv fAj Res');
			return;
		}
		
		if(aResArr[1]=='ok'){
			isValidAjRes = true;
			if(aResArr[2]=='no'){
				var fRes = aResArr[3]; 
				
			}else if(aResArr[2]=='b64'){
			
			}else if(aResArr[2]=='json'){
				eval('var fRes = '+aResArr[3]); 
			}
			
		}else if(aResArr[1]=='err'){
			isValidAjRes = false;
			var fRes = aResArr[3]; 
			
		}else{
			isValidAjRes = false;
			fRes = 'Inv ffAj Res:';
			alert(fRes);
			//return;
		}
		
		eval("tmpFunc = "+cbf_p);
		//alert(tmpFunc);
		//alert(response);
		tmpFunc(fRes?fRes:'.+');
		
		//var cbfN = eval(cBF);
		//cbfN(fRes?fRes:'.');
	}else{
		if(shouldDspPreload) ajPrldHndr(true);//handle preload display
		if(shouldDspMask) handle_aj_g_mask('on');//handle preload display
		
		//create an iframe by dom
		if(fObj('iframe_p_id')){
			document.body.removeChild(fObj('iframe_p_id'));
		}
		iframe_p = document.createElement('iframe');
		iframe_p.setAttribute("id", "iframe_p_id"); 
		iframe_p.setAttribute("name", "iframe_p_id"); 
		iframe_p.setAttribute("style", "font-weight:bold; background-color:#fff; position:absolute; top:0px; left:0px; "+(((ap_key_value[0][0]=='dsp_frame') && (ap_key_value[0][1]))?'height:500px; width:900px; display:block;':'height:0px; width:0px; display:none;')+";");
		iframe_p.frameborder='0';
		iframe_p.src = SITE_MAIN_URL; 	
		document.body.appendChild(iframe_p);
		
		var form_p = document.createElement('form');
		form_p.setAttribute("method", "POST"); 
		form_p.setAttribute("id", "form_p_id"); 
		form_p.setAttribute("name", "form_p_id"); 
		form_p.setAttribute("target", "iframe_p_id"); 
		form_p.setAttribute("enctype", "multipart/form-data"); 
		form_p.setAttribute("id", "form_p_id"); 
		form_p.setAttribute("action", ""+'/core/fap_handler.php');//http://asreonline.ir/?pg=home&cmd=fap_handler   
		form_p.setAttribute("style", "display:none;");

		cbf_p = get_pure_func_name(fcbf);
		var tmp_inp = document.createElement('input');
		tmp_inp.setAttribute("id", "fcbf");//frame callback function
		tmp_inp.setAttribute("name", "fcbf"); 
		tmp_inp.setAttribute("value", cbf_p); 
		form_p.appendChild(tmp_inp);
		
		if(ap_key_value){
			var e=0;
			while(e<100){
				if(ap_key_value[e]){
					//add new hidden input
					tmp_inp = document.createElement('input');
					tmp_inp.setAttribute("id", ap_key_value[e][0]); 
					tmp_inp.setAttribute("name", ap_key_value[e][0]); 
					tmp_inp.setAttribute("value", ap_key_value[e][1]); 
					form_p.appendChild(tmp_inp);
				}
				e++;
			}
		}
		document.body.appendChild(form_p);
			
		
		//cLog(iframe_p);
		//cLog(form_p);
		form_p.submit();
	}
}

function dsblAClk(evt){
	dsblAClk2(evt);
	return false;
}

function dsblAClk2(evt){
		if(evt.preventDefault)evt.preventDefault();
		if(evt.stopPropagation)evt.stopPropagation();
		evt.returnValue = false;
		return false;
//		if(isFf()){
//			evt.preventDefault();
//			evt.stopPropagation();
//		}
//		evt.returnValue = false;
//		return false;
}


function loginFrmChk(evt){
	if(fObj('uName').value && (fObj('uName').value!='Email') && fObj('pWord').value && (evt.keyCode==13)){
		fObj('mainSignInFrm').submit();
	}
}

function CreateBookmarkLink(){

 title = " سایت  ایران، مرجع سفر، تور و تفریحات - .com Iran's tour & travel guide "; 
  
 url = "http://www..com";

	if (window.sidebar) { 
		window.sidebar.addPanel(title, url,"");
	} else if( window.external ) { 
		window.external.AddFavorite( url, title); }
	else if(window.opera && window.print) { 
		return true; }
 }

function tMOver(num){
	var i=1;
	while(i<11){
		if(fObj('topSubMenu_'+i)) fObj('topSubMenu_'+i).style.display = (i==num) ? 'block' : 'none';
		i++;
	}
}

var dMOut;
function tMOut(){
	clearTimeout(dMOut);
	dMOut=setTimeout(function(){tMOver(fObj('slctdTMTab').value);}, 5000);	
}

function fObjT($tagName, $srchId){
	var e; 
	e=document.getElementsByTagName($tagName); 
	if(e){
		if($srchId){
			var oArr = new Array();
			for(var i in e){
				if(e[i] && e[i].id && e[i].id.match($srchId)){
					oArr.push(e[i]);
				} 
			}
			return oArr;
		}else{return e;}
	}else{return(false);}
}
	
function dsp_hi_img(img_obj){
	img_path = (img_obj.img_path) ? img_obj.img_path : false;
	img_title = (img_obj.img_title) ? img_obj.img_title : false;
	should_log_visit = (img_obj.should_log_visit) ? img_obj.should_log_visit : false;

	if(!img_obj.img_path) return;
	
	
//	var img_html = '<table class="hiPicCss" border="0"><tr><td colspan="3">&nbsp;</td></tr><tr><td width="20%">&nbsp;</td><td ><div><img class="hiImgTmp" src="'+img_path+'" ></div><div>'+img_title+'</div></td><td width="20%">&nbsp;</td></tr><tr><td colspan="3">&nbsp;</td></tr></table>';
	var img_html = fObj('new_big_image_cntnr').InnerHTML;
	img_html = img_html.replace(/hi_img_src/g, img_path);
	img_html = img_html.replace(/hi_img_title/g, img_title);
	
	gMC2H = img_html;
	handle_g_mask('on');
	
	if(should_log_visit) aHW('pg=home&cmd=log_visit&id='+should_log_visit, arguments.callee.toString());
}

function hideHiImg(){
	handle_g_mask('off');
	
}

function dCBF(){}//dummy callback function

var gMC2H = '';
function handle_g_mask(stus){
	if(stus=='on'){
		fObj('msk_tbl').style.display='block';
		fObj('new_msk_cntnr').innerHTML = gMC2H;
		fObj('bIC5').style.display='block';
	}else{
		fObj('new_msk_cntnr').innerHTML = '';
		fObj('bIC5').style.display='none';
		fObj('msk_tbl').style.display='none';
	}
}

function handle_aj_g_mask(stus){
	if(stus=='on'){
		fObj('msk_tbl').style.display='block';
		fObj('new_msk_cntnr').innerHTML = 'در حال بار گذاری';
		//fObj('bIC5').style.display='none';
		//alert(1);
	}else{
		fObj('new_msk_cntnr').innerHTML = '';
		fObj('bIC5').style.display='none';
		fObj('msk_tbl').style.display='none';
	}
}

function numFormat(nStr){
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
};

function unicIt(num,t){
	//if(!t)t='fa';
	if(t == 'fa'){
		var out = '';
		for(var e in num){
			var chr = parseInt(num[e]);
			if((chr=='0') || ((chr>0) && (chr<10))){
				out += fDArr[chr];
			}else{
				out += num[e];
			}
		}
		return out;
	}
	return num;
};


var gdTt = false;
var gdTtShadow = false;
var dhtmlgoodies_shadowSize = 4;
var gdTtMaxWidth = 371;
var gdTtMinWidth = 100;
var gdIfrm = false;
var tooltip_is_msie = (navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('opera')==-1 && document.all)?true:false;


function sOT(e, objId){ 
	//show object title 
	if(fObj(objId)){
		var cntnt = fObj(objId).innerHTML;
		if(cntnt.length>1) sTP(e, cntnt);
	}
	return false;
};

var outT=0;
function hTD(){
	outT=setTimeout(function(){hideTooltip();},278);
}

function sTP(evt, tooltipTxt){
	clearTimeout(outT);
	var bodyWidth = Math.max(document.body.clientWidth,document.documentElement.clientWidth) - 20;

	if(!gdTt){
		gdTt = document.createElement('DIV');
		gdTt.id = 'gdTt';
		gdTt.onmouseover = function(){clearTimeout(outT);};
		gdTt.onmouseout = function(){hTD();};
		gdTtShadow = document.createElement('DIV');
		gdTtShadow.id = 'gdTtShadow';
			
		document.body.appendChild(gdTt);
		document.body.appendChild(gdTtShadow);	
		
		if(tooltip_is_msie){
			gdIfrm = document.createElement('IFRAME');
			gdIfrm.frameborder='5';
			gdIfrm.style.backgroundColor='#FFFFFF';
			gdIfrm.src = '#'; 	
			gdIfrm.style.zIndex = 100;
			gdIfrm.style.position = 'absolute';
			document.body.appendChild(gdIfrm);
		}
		
	}
	
	gdTt.style.display='block';
	gdTtShadow.style.display='block';
	if(tooltip_is_msie)gdIfrm.style.display='block';
	
	var st = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
	if(navigator.userAgent.toLowerCase().indexOf('safari')>=0)st=0; 
	var leftPos = evt.clientX + 10;
	//cLog(evt.clientX);
	
	gdTt.style.width = null;	// Reset style width if it's set 
	gdTt.innerHTML = tooltipTxt;
	gdTt.style.left = leftPos + 'px';
	gdTt.style.top = evt.clientY + 10 + st + 'px';
	//cLog(evt.clientY);
	
	gdTtShadow.style.left =  leftPos + dhtmlgoodies_shadowSize + 'px';
	gdTtShadow.style.top = evt.clientY + 10 + st + dhtmlgoodies_shadowSize + 'px';
	
	if(gdTt.offsetWidth>gdTtMaxWidth){	/* Exceeding max width of tooltip ? */
		gdTt.style.width = gdTtMaxWidth + 'px';
	}
	
	var tooltipWidth = gdTt.offsetWidth;		
	if(tooltipWidth<gdTtMinWidth)tooltipWidth = gdTtMinWidth;
		
	gdTt.style.width = tooltipWidth + 'px';
	gdTtShadow.style.width = gdTt.offsetWidth + 'px';
	gdTtShadow.style.height = gdTt.offsetHeight + 'px';		
	
	if((leftPos + tooltipWidth)>bodyWidth){
		gdTt.style.left = (gdTtShadow.style.left.replace('px','') - ((leftPos + tooltipWidth)-bodyWidth)) + 'px';
		gdTtShadow.style.left = (gdTtShadow.style.left.replace('px','') - ((leftPos + tooltipWidth)-bodyWidth) + dhtmlgoodies_shadowSize) + 'px';
	}
	if(tooltip_is_msie){
		gdIfrm.style.left = gdTt.style.left;
		gdIfrm.style.top = gdTt.style.top;
		gdIfrm.style.width = gdTt.offsetWidth + 'px';
		gdIfrm.style.height = gdTt.offsetHeight + 'px';
	}
};

function hideTooltip(){
	if(gdTt){
		gdTt.style.display='none';
		gdTtShadow.style.display='none';		
		if(tooltip_is_msie) gdIfrm.style.display='none';
	}
};

function quoter(str){
	//str = str.replace(/[\']/g, "\'");
	//str = str.replace(/[\"]/g, '\"');
	return str;
};

function liner(str){
	str = str.replace(/[\n]/g, " ");
	str = str.replace(/\r\n/g," ");
	return str;
};

function rateItAj($response, rateBarId, rate){
	if($response){
		hEM.introOff();
		if(!ajResV.validate($response)){return false;}
		var dtl = ajResV.m_res.split('[*[');
		var rateBarId = dtl[0];
		var msg = dtl[1];
		fObj('defRate_'+rateBarId).value = dtl[2];
		var title = dtl[3];
		var prvHtml = fObj(rateBarId+'_ratingCntnr').innerHTML;
		fObj(rateBarId+'_ratingCntnr').innerHTML = msg;
		fObj(rateBarId+'_ratingCntnr').title = title;
		createCookie('dR_'+rateBarId, 'yes', 2);
		setTimeout(function(){fObj(rateBarId+'_ratingCntnr').innerHTML = prvHtml;}, 800);
		
	}else{
		if(readCookie('dR_'+rateBarId)=='yes') return;//it alredy rated
		$value = 'comp=main&cmd=rateItAj&rateBarId='+rateBarId+'&rate='+rate;
		hEM.introOn(1);
		AjTD.sIt($value, "rateItAj($response)" );	
	}	
};

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return false;
};

function eraseCookie(name) {
	createCookie(name,"",-1);
};

var ajResV = { //ajax response validator

	m_mainSplitor 	: '[*]',
	
	m_garbage 		: '',
	
	m_stus 			: '',// it could be err/ok
	
	m_isCoded 		: '',// no / b64 / r13
	
	m_res 			: ' ',
	
	m_value 		: '',
	
	m_errNum 		: 0,
	
	m_errMsg 		: '',
	
	dump : function (){
		var $str = "m_garbage: " +this.m_garbage +"\n\n" +"m_stus: " +this.m_stus +"\n\n" +"m_isCoded: " +this.m_isCoded +"\n\n" +"m_res: " +this.m_res.substring(0,200) +" ...";
		alert($str);
	},
	
	errCleaner : function (){
		this.m_errNum = 0;
		this.m_errMsg = '';
	},
	
	validate : function ($value){//analize ajax response and validate it
		
		this.errCleaner();
		this.m_value = $value;
		
		if(this.isEmpty($value)){
			trObj.trAlert('Ajax response is empty!');
			return false;
		}
				
		var $det = this.m_value.split('[*]');
		this.m_garbage 	= $det[0];
		this.m_stus 	= $det[1];
		this.m_isCoded 	= $det[2];
		
		if		(this.m_isCoded == 'no'){
			this.m_res = $det[3];
		
		}else if(this.m_isCoded == 'b64'){
			this.m_res = Base64.decode($det[3]);
			
		}else{
			trObj.trAlert('it seems you are using old version of ajax validate');
			this.dump();
			
		}//end if
		
		if(this.m_stus == 'ok'){
			return true;
		}else{
			return false;
		}	
	},
	
	isNull : function(){
		if(typeof(this.m_value) == 'object'){return(false);}
		return (this.m_value===null || this.m_value==='null' || this.m_value==="");
	},
	
	isUnd : function(){
		if (typeof(this.m_value)=='undefined') {return (true);}
		return (false);
	},
	
	isEmpty : function(val){

		this.m_value = val;
		if ( this.isUnd() || this.isNull() ){
			this.m_stus = 'err';
			this.m_errNum = 1;
			this.m_errMsg = 'value is empty or null';
			return true; 
		}
		this.m_stus = 'ok';
		this.m_errMsgNum = 0;
		this.m_errMsg = 'value is not empty or null';
		return false;
	}
	
};


var Gen_Def = {

	SELECT_NOT_SELECTED		: -1,
	
	SELECT_ADD_NEW_OPTION	: -111
	
};

_event = {
	onload:[],
	
	onresize:[],
	
	onscroll:[],
	
	onmousedown:[],
	
	onmouseup:[],
	
	onmousemove:[],
	
	onselectstart:[],
	
	onclick:[]
};

_event_return = {
	onload:true,
	onresize:true,
	onscroll:true,
	onmousedown:true,
	onmouseup:true,
	onmousemove:true,
	onselectstart:true,
	onclick:true
};

//window.onscroll = Function("run_event('onscroll');return(_event_return.onscroll)");
//window.onload= Function("run_event('onload');return(_event_return.onload)");

function run_event(mode){
	//alert(mode)
	var func_list = eval("_event."+ mode);
	var i = 0;
	for(i in func_list){
		func_list[i] != 'none' ? eval(func_list[i]) : "";
	}//end for
};

function add_event(mode,func){
	//alert(mode+"-"+func)
	var func_list = eval("_event."+ mode);
	func_list[func_list.length] = func;
	//alert(func_list)
};

function und(val){
	return (typeof(val)=='undefined');
};

function fObjN($name,$parent) {
	//alert("fObj :"+id)
	var e;
	if( typeof($parent) == 'object'){
		e = $parent.document.getElementsByName($name)[0];
	}else{
		e = document.getElementsByName($name)[0];
	}//end if
	if(e){
		return(e);
	}else{
		return(false);
	}//end if
};

var trObj = {
	
	m_isDeveloper   : 'yes', // yes / no
	
	isDeveloper : function(){
		if(userInfo){ this.m_isDeveloper = userInfo.isDeveloper;}
		if (this.m_isDeveloper == 'yes') {return true;}
		return false;
	},
	
	trAlert : function ($msg){
		if(this.isDeveloper()) {alert ($msg);}
	},
	
	trAlertR : function ($mixed_var,$obj_name){//$mixed_var is an obj or multy dimensional
		if(!this.isDeveloper()) {return;}
		var $str = "";
		for(var x in $mixed_var){
			$str += String(x) +" : "+ String($mixed_var[x]) +"\n";
		}//end for
		alert($str);
	},
	
	trPrint_r : function ($mixed_var,$obj_name){//$mixed_var is an obj or multy dimensional
		var $str = "";
		for(var x in $mixed_var){
			$str += String(x) +" : "+ String($mixed_var[x]) +"\n";
		}//end for
		window.document.write('<pre>'+$str+'</pre>');
	}
};


/*
var ajaxDisabler = {

	m_img : 'images/main/pre_load_3.gif'
	,
	m_div : 'ajaxDisablerDiv'
	,
	dis : function (e){
	
		fObj(this.m_div).style.display = 'block';
	}
	,
	en : function (){
	alert(1);
		fObj(this.m_div).style.display = 'none';
	}
	
}//end obj
*/


var hEM = { //html element management
	
	getSelItem : function ($id){//$id is a id of an object.
		var e = fObj($id);
		if((e.tagName == 'SELECT') || (e.tagName == 'select')){
			var $index = e.selectedIndex;
			return({val:e.options[$index].value,cap:e.options[$index].text});
		}else{
			return(false);
		}
	},

	introOn : function(sw){
		fObj('generalScreen').style.display = 'block';
		if(sw == 1){
			//turn on intro animation
			fObj('introAnimation').style.display = 'block';
			
		}else if(sw == 2){
			//turn on notification box
			fObj('generalNotifications').style.display = 'block';
			
		}else{
			//do nothing
						
		}
		setTimeout("hEM.introOff()",5000);
	},
	
	introOff : function(){
		fObj('generalNotifications').style.display = 'none';
		fObj('introAnimation').style.display = 'none';
		fObj('generalScreen').style.display = 'none';
	},
	
	
	getDsp : function (id){
		if(fObj(id)) {return fObj(id).style.display;}
		return false;
	},
	
	isOn : function (id){
		if(fObj(id)){
			if(fObj(id).style.display == 'block') {return true;}
			return false;
		}
		return false;
	},
	
	bgClr : function(elmId,bgClr){
		var obj = fObj(elmId);
		if (obj) {obj.style.backgroundColor = bgClr;}
	},
	
	getAbsPos : function (e){
		//alert("in absolute_pos function");
		var obsolute_x = 0;
		var obsolute_y = 0;
		if (e.offsetParent) {
			obsolute_x = e.offsetLeft;
			obsolute_y = e.offsetTop;
			var $scrollTop;
			var $scrollLeft;
			while (e = e.offsetParent) {
				if(e.offsetParent){
					$scrollTop = e.scrollTop;
					$scrollLeft = e.scrollLeft;
				}else{
					$scrollTop = 0;
					$scrollLeft = 0;
				}//end if
				obsolute_x += e.offsetLeft - $scrollLeft;
				obsolute_y += e.offsetTop - $scrollTop;
			}//end while
		}//end if
		return{
			x:obsolute_x,
			y:obsolute_y
		};
	},
	
	getMousePos : function (evt){
		alert("it does not work properly");
		var b = document.body;
		evt = (evt) ? evt : ((window.event) ? window.event : "");
		alertR(evt);
		var $xPos = parseInt(evt.clientX)+ b.scrollLeft - b.clientLeft;
		var $yPos = parseInt(evt.clientY)+ b.scrollTop - b.clientTop;
		return{
			x:$xPos,
			y:$yPos
		};
	},
	
	addElement : function (pid,htmlStr,elmId,index){
		var e = fObj(pid);
		fObj('tempAppendingContainer').innerHTML = htmlStr;
		var e_child = fObj(elmId);
		if(!index){
			e.appendChild(e_child);
		}else{
		}
	},
	
	removeElement : function(id){
			var e = fObj(id);
			if(!e) {return false;}
			var pe = e.parentElement;
			pe.parentNode.removeChild(e);
	},
	
	overFlag:0,
	
	showTitle : function(elm,evt){
		var obj=fObj(elm);
		if(evt){
			if(hEM.overFlag){return;}
			setTimeout((function(){hEM.overFlag=0;}),10);
			hEM.overFlag=1;
			obj.style.display='block';
			//cLog('event '+evt.clientX+','+evt.clientY);
			//cLog('object size '+obj.clientWidth+','+obj.clientHeight);
			//cLog('window size '+window.screen.width+','+window.screen.height);
			var elmTop;
			var elmLeft;
			var winHeight;
			var winWidth;
			if(isIE){
				winHeight = window.screen.availHeight;
				winWidth = window.screen.availWidth;
			}else{
				winHeight = window.innerHeight;
				winWidth = window.innerWidth;
			}
			
			if(evt.clientY<winHeight/2){
				elmTop =(winHeight > evt.clientY+obj.clientHeight+25) ? evt.clientY+25 : winHeight-(obj.clientHeight+25);
			}else{
				elmTop =(winHeight > evt.clientY+obj.clientHeight+25) ? evt.clientY+25 : winHeight-(obj.clientHeight+25);
			}
			if(evt.clientX<winWidth/2){
				elmLeft=(winWidth > evt.clientX+obj.clientWidth+25) ? evt.clientX+25 : winWidth-(obj.clientWidth+25);
			}else{
				elmLeft=(winWidth > evt.clientX+obj.clientWidth+25) ? evt.clientX+25 : winWidth-(obj.clientWidth+25);
			}
			obj.style.top=elmTop+'px';
			obj.style.left=elmLeft+'px';
		}else{
			obj.style.display='none';
		}
	},
	
	op:0,
	opStep:1,
	opTime:0,
	isDispOned:0,
	
	notiAnim : function(obj){
		/*	filter:progid:DXImageTransform.Microsoft.alpha(opacity=92); -moz-opacity:0.92; opacity:0.92; ">	*/
		if(hEM.isDispOned==0){
			hEM.isDispOned=1;
			obj.style.display='block';
		}
		hEM.op = hEM.op+hEM.opStep;
		var objSt = obj.style;
		objSt.opacity = (hEM.op / 100);//for opera,between 0.00 and 1.00
		objSt.MozOpacity = (hEM.op / 100);//for mozila,between 0.00 and 1.00
		objSt.KhtmlOpacity = (hEM.op / 100);//for Konqueror,between 0.00 and 1.00
		objSt.filter = "alpha(opacity=" + hEM.op + ")";//for ie,between 1 and 100

		obj.style.MozOpacity = (hEM.op/10);
		//cLog(hEM.op);
		if(hEM.op>10 && hEM.opStep>0){hEM.opStep +=3;}
		if(hEM.op>35 && hEM.opStep>0){hEM.opStep +=8;}
		if(hEM.op>95 && hEM.opStep>0){hEM.opStep =-29;}
		if(hEM.op<50 && hEM.opStep<0){hEM.opStep +=3;}
		if(hEM.op<1){
			objSt.opacity = 0;//for opera,between 0.00 and 1.00
			objSt.MozOpacity = 0;//for mozila,between 0.00 and 1.00
			objSt.KhtmlOpacity = 0;//for Konqueror,between 0.00 and 1.00
			objSt.filter = "alpha(opacity=" + 0 + ")";//for ie,between 1 and 100
			hEM.op = 0;
			hEM.opStep = 1;
			clearTimeout(hEM.opTime);
			obj.style.display = 'none';
			hEM.isDispOned=0;
		}else{
			hEM.opTime = setTimeout((function(){hEM.notiAnim(obj);}), 200);
		}
	}
};
	
//this function search in an array of objects and return an object with certain id
function fObjInx(objArray,objId){
	for(var i in objArray){if(objArray[i].id==objId){return objArray[i];}}
	return false; 
};

function nl($val){
	if(typeof($val) == 'object'){return (false);}
	return ($val===null || $val==='null' || $val==="");
};

function altDsp(elementId, disp){
	var obj = fObj(elementId);
	if(!obj) {return false;}
	
	if(und(disp)){
		if (obj.style.display == 'block'){
			obj.style.display = 'none';
		}else{
			obj.style.display = 'block';
		}
	}else{
		obj.style.display = disp;
	}
}

function alertR($mixed_var,$obj_name){//$mixed_var is an obj or multy dimensional
	var $str = "";
	for(var x in $mixed_var){
		$str += String(x) +" : "+ String($mixed_var[x]) +"\n";
	}//end for
	alert($str);
};

function showAjPopUp(popObj){
	cLog(popObj);
};

function sweepAdvSrchConf(){ 
	var qStr="";
	qStr += "&tInOut="+hEM.getSelItem("srchBx_inOut").val+"&tDur="+hEM.getSelItem("srchBx_tDur").val+"&tPrice="+hEM.getSelItem("srchBx_tCost").val+"&stLoc="+hEM.getSelItem("srchBx_stLoc").val+"&targetLoc="+hEM.getSelItem("srchBx_targetLoc").val+"&varDate="+hEM.getSelItem("srchBx_varDate").val+"&stDay="+hEM.getSelItem("srchBx_stDay").val+"&stMonth="+hEM.getSelItem("srchBx_stMonth").val;
	return qStr;
};

//alert("GENERAL JS included");

//lib/js/general.js, lib/js/jquary.js, lib/js/html-slide-show.js,

//lib/js/base64.js, lib/js/srch_mgmt.js, lib/js/commenter.js, lib/js/htmler.js, lib/js/uploader.js, wiki/js/auther_mgmt.jsXXX



