
var NODE_ELEMENT	=	0;
var LEAF_ELEMENT	=	1;

var globalUserInfo				=	new Object();
globalUserInfo.autorized	=	"unautorized";
globalUserInfo.uID				=	-1;
globalUserInfo.nick				=	"Anonymus";
globalUserInfo.started		=	true;
globalUserInfo.curPlaceID	=	-1;
globalUserInfo.curCatID		=	-1;
globalUserInfo.curPath		=	"a";

globalUserInfo.curMyEditedPlaceId		=	-1;

globalUserInfo.curEventId				=	-1;
globalUserInfo.curEventYear			=	-1;
globalUserInfo.curEventMon			=	-1;
globalUserInfo.curEventDay			=	-1;
globalUserInfo.curEventCatId		=	-1;
globalUserInfo.placeMapShows		=	false;

//if no events, but banners around events shows, when need show current city map
//and make it TRUE


var curLoadedExtensions = new Array;


var uploaderImg;
var directLoad = false;//can be changed in index.php if direct link used



var avatarUploader, photosUploader, eventsPhotosUploader;


window.onload = function(){
	new SmoothScroll();
	engine.loadExtension('highslide','js/extensions/highslide/highslide.js');
	
	//engine.loadExtension('date_picker','js/extensions/date_selector/date_selector.js');
}

function showLoading(bFlag,inObj){

	//uploader picture taken from http://www.ajaxload.info/

if(inObj!=null){

	inObj	=	$(inObj);//Without it, Error in IE
	try{
		uploaderImg.style.top	=	(inObj.getCoordinates().top-27)+"px";
		uploaderImg.style.left	=	(inObj.getCoordinates().left-27)+"px";
	}catch(er){}

}
	if(bFlag){
		if(uploaderImg != null){
			uploaderImg.style.display="inline";
		}
	}else{
		uploaderImg.style.display="none";
	}
}

function setInvis(targObjId, bFlag){
	//set to/from invisibility
		var exampleFx = new Fx.Style(targObjId, 'opacity', {
			duration: 1500,
			transition: Fx.Transitions.Quart.easeInOut
		});

	if(bFlag){
		exampleFx.start(1,0);
	}else{
		exampleFx.start(0,1);
	}
}


function checkValue(fld2chk,errMes,fldType){
	//checks value of fld2chk, if type=='email' performs additional
	//checking for email correct sintax
	var retMes	=	"";



	if(fld2chk.value.trim()	==""){
		retMes += errMes;
		fld2chk.removeClass('ok_style');
		fld2chk.addClass('error_style');
	}else{
		if(fldType=="email"){

			//if( !fld2chk.value.trim().test(/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}/i)){
			if( !fld2chk.value.trim().test(/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/i)){
														           
				retMes += "Entered e-mail address is incorrect\n";
				fld2chk.removeClass('ok_style');
				fld2chk.addClass('error_style');

			}else{
				fld2chk.removeClass('error_style');
				fld2chk.addClass('ok_style');
			}
		}else if(fldType=="date"){

			if( !fld2chk.value.trim().test(/^[0-9]{4,4}\.[0-9]{2,2}\.[0-9]{2,2}$/)){
				//yyyy.mm.dd
				retMes += errMes+"\n";
				fld2chk.removeClass('ok_style');
				fld2chk.addClass('error_style');
			}else{
				fld2chk.removeClass('error_style');
				fld2chk.addClass('ok_style');
			}

		}else if(fldType=="digit"){
			if( !fld2chk.value.trim().test(/^[0-9]{0,50000}$/)){
				retMes += errMes+"\n";
				fld2chk.removeClass('ok_style');
				fld2chk.addClass('error_style');

			}else{
				fld2chk.removeClass('error_style');
				fld2chk.addClass('ok_style');
			}
		}else{
				fld2chk.removeClass('error_style');
				fld2chk.addClass('ok_style');
		}
	}
return retMes;
}

function togleForm(bFlag,inFormName,bNeedClear){

	try{

		var f	=	$(inFormName);


		if(bFlag){
			f.style.display="inline";
		}else{
			f.style.display="none";
		}


		//if((bNeedClear)&&(f.elements)){
		if(bNeedClear){

			var tmp;
			var j	=	f.elements.length;

			for(var i=0;i<j;i++){
					//document.eval(formName).elements[i].disabled=bFlag;
					//alert(f.elements[i].type);

					tmp	= $(f.elements[i].id);

					if(	(tmp.type=="text")||
							(tmp.type=="password")||
							(tmp.type=="file"))
						{
							tmp.value	=	"";
							tmp.removeClass("ok_style");
							tmp.removeClass("error_style");
						}

				}
		}
	}catch(err){alert("Error toggling element: "+inFormName);}

}

function isVisible(el){
	//alert(el.style.display);
	try{
		return el.style.display != 'none';
	}catch(err){return false;}
}

function real_togle_element(el){

		if($(el).style.display=="inline"){
			togle_element(el,false);
			return false;
		}else{
			togle_element(el,true);
			return true;
		}
}

function scroll_to_element(el){	
	new Fx.Scroll(window).toElement(el);
}

function togle_element(el,bFlag){
	//better name for this function is switch_element
	if(el != null){
		try{
			//alert(el);
			if(bFlag){
				$(el).style.display="inline";
			}else{
				$(el).style.display="none";
			}
		}catch(err){alert("Error toggling element: "+el);}
	}
}

function chkCurStatus(){
	new Ajax(
	 		'include/actions/chk_user_ststus.php',
	 			{
	 				method: 'post',
	 				data: '',
					onComplete: function(){

						var ans = Json.evaluate(this.response.text.trim());
						if(ans.autorized	== "autorized"){
							engine.loadExtension('my_info','js/extensions/my_info/my_info_class.js','makeLoginResultsActions(Json.evaluate(\''+this.response.text.trim()+'\'))');
						}
					},
					onFailure: function(){
						alert("Error communicating with server");
					}

	 	}).request();
}

function disableAll(formName,bFlag){
//******Disables all elements at formName form******
	var t	=	$(formName);
	var len	=	t.elements.length;
	for(var i=0;i<len;i++)
		t.elements[i].disabled=bFlag;
}

function chkTxt(txt){
	txt = txt.replace( /\+/gi, "%2B" );
	txt = txt.replace( /&amp;/gi , "%amp;");
	txt = txt.replace( /\&/gi, "%amp;" );
return txt;
}

function getCurWindowXY(){
	var retObj	=	new Object();

	if(window.getHeight()!=0){
		retObj.h	=	window.getHeight();
		retObj.w	=	window.getWidth();
	}else
	if(document.documentElement.clientHeight!=0){
		retObj.h	=	document.documentElement.clientHeight;
		retObj.w	=	document.documentElement.clientHeight;
	}else
	if(document.body.clientHeight != 0){
		retObj.h	=	document.body.clientHeight;
		retObj.w	=	document.body.clientWidth;
	}
return retObj;
}

//also change in functions.php

function initUploader(ses_ID){


			var urla;
			if(window.gecko  || window.opera){
				//for FF
				urla = "../../../customer_data/avatar_receiver.php";
			}else{
				//for IE
				urla = "../customer_data/avatar_receiver.php";
			}

			var settings = {
				flash_url : "js/swfupload/swfupload.swf",// Relative to the MAIN INDEX FILE
				//upload_url: "avatar_receiver.php",	// Relative to the SWF file
				upload_url: urla,	// Relative to the SWF file

				post_params: {'PHPSESSID' : ses_ID},
				file_size_limit : "2 MB",
				file_types : '*.jpg',
				file_types_description : 'Supported pictures types',
				file_upload_limit : 20,
				file_queue_limit : 0,
				custom_settings : {
					progressTarget : "fsUploadProgress2",
					cancelButtonId : "btnCancel2"
				},
				debug: false,

				// Button settings

				button_width: "65",
				button_height: "29",
				button_placeholder_id: "spanButtonPlaceHolder",
				button_text: 'Upload',

				//button_image_url: "TestImageNoText_65x29.png",	// Relative to the Flash file
				button_text_style: ".theFont { font-size: 16; }",
				button_text_left_padding: 12,
				button_text_top_padding: 3,


				// The event handler functions are defined in handlers.js
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,
				queue_complete_handler : queueComplete	// Queue plugin event
			};

			avatarUploader = new SWFUpload(settings);

}

function initEventsPhotosUploader(ses_ID,eID){

			var urla;
			if(window.gecko || window.opera){
				//for FF
				urla = "../../../customer_data/event_photo_receiver.php";
			}else{
				//for IE
				urla = "../customer_data/event_photo_receiver.php";
			}

			var settings = {
				flash_url : "js/swfupload/swfupload.swf",// Relative to the MAIN INDEX FILE
				//upload_url: "avatar_receiver.php",	// Relative to the SWF file
				upload_url: urla,	// Relative to the SWF file

				post_params: {'PHPSESSID' : ses_ID+'', 'eID' : eID+''},
				file_size_limit : "2 MB",
				file_types : '*.jpg',
				file_types_description : 'JPG pictures',
				file_upload_limit : 20,
				file_queue_limit : 0,
				custom_settings : {
					progressTarget : "fsUploadProgress3",
					cancelButtonId : "btnCancel3"
				},
				debug: false,

				// Button settings

				button_width: "65",
				button_height: "29",
				button_placeholder_id: "spanButtonPlaceHolder3",
				button_text: 'Upload',

				//button_image_url: "TestImageNoText_65x29.png",	// Relative to the Flash file
				button_text_style: ".theFont { font-size: 16; }",
				button_text_left_padding: 12,
				button_text_top_padding: 3,


				// The event handler functions are defined in handlers.js
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,
				queue_complete_handler : queueComplete	// Queue plugin event
			};

	eventsPhotosUploader = new SWFUpload(settings);
}
//var swf_u;

function initPhotosUploader(ses_ID,placeID){
	if($('spanButtonPlaceHolder')==null){
		//if no holder element
		return;
	}
			var urla;
			if(window.gecko || window.opera){
				//for FF
				urla = "../../../customer_data/bitmap_receiver.php";
			}else{
				//for IE
				urla = "../customer_data/bitmap_receiver.php";
			}

			var settings = {
				flash_url : "js/swfupload/swfupload.swf",// Relative to the MAIN INDEX FILE
				//upload_url: "avatar_receiver.php",	// Relative to the SWF file
				upload_url: urla,	// Relative to the SWF file

				post_params: {'PHPSESSID' : ses_ID+'', 'placeID' : placeID+''},
				file_size_limit : "2 MB",
				file_types : '*.jpg',
				file_types_description : 'JPG pictures',
				file_upload_limit : 20,
				file_queue_limit : 0,
				custom_settings : {
					progressTarget : "fsUploadProgress2",
					cancelButtonId : "btnCancel2"
				},
				debug: false,

				// Button settings

				button_width: "65",
				button_height: "29",
				button_placeholder_id: "spanButtonPlaceHolder",
				button_text: 'Upload',

				//button_image_url: "TestImageNoText_65x29.png",	// Relative to the Flash file
				button_text_style: ".theFont { font-size: 16; }",
				button_text_left_padding: 12,
				button_text_top_padding: 3,

 
				// The event handler functions are defined in handlers.js
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,
				queue_complete_handler : queueComplete	// Queue plugin event
			};

			photosUploader = new SWFUpload(settings);

	/*
	//also change in functions.php
		photosUploader = new SWFUpload({
				// Backend Settings
				upload_url: 'http://localhost/www.top10.com/www/customer_data/bitmap_receiver.php',
				//upload_url: 'http://www.top10inthecity.com/customer_data/avatar_receiver.php',

				post_params: {'PHPSESSID' : ses_ID+'', 'placeID' : placeID+''},

				// File Upload Settings
				file_size_limit : '1024',	// 1MB
				file_types : '*.jpg',
				file_types_description : 'JPG pictures',
				file_upload_limit : '10',
				file_queue_limit : '0',

				// Event Handler Settings (all my handlers are in the Handler.js file)
				file_dialog_start_handler : fileDialogStart,
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,

				// Flash Settings
				flash_url : 'js/swfupload/swfupload_f9.swf',	// Relative to this file (or you can use absolute paths)

				swfupload_element_id : 'flashUI2',		// Setting from graceful degradation plugin
				degraded_element_id : 'degradedUI2',	// Setting from graceful degradation plugin

				custom_settings : {
					progressTarget : 'fsUploadProgress2',
					cancelButtonId : 'btnCancel2'
				},

				// Debug Settings
				debug: false
			});*/
}


//*******Deprecated



//***2DO (REFACTORING)  INCAPSULATE ALL UPPER FUNCTIONS INTO METODS OF engine
//***2DO (REFACTOR) Use uploadDtatAndInnerAnswer() and sendDataToScript() everywhere possible

function engine_class(){

	this.toggleCheckbox = function(chkbID){
		var ch = $(chkbID);
		if(ch != null){
			ch.checked = !ch.checked;
		}
	}
	
	this.toggleSlider = function(obyID,target_height){
		var trgt = $(obyID);
		if(trgt != null){
			if(trgt.getStyle('height').toInt()==0){
				this.slideOn(trgt,target_height);
			}else{
				this.slideOff(trgt);
			}
		}
	}	
	this.slideOn = function(trgt,target_height){
		//slides out element, that has style='height:0px;overvlow:hidden;'
		new Fx.Style(trgt,'height').start(0,target_height);	
	}
	this.slideOff = function(trgt){
		//slides off element, that has style='height:0px;overvlow:hidden;'
		new Fx.Style(trgt,'height').start(trgt.getStyle('height').toInt(),0);	
	}	

	this.uploadDtatAndInnerAnswer = function(tmpEl,path,dataStr,methodName){
		//into tmpEl will loads data received from
		//path as ansver for dataStr
		if(tmpEl.innerHTML != ''){
			tmpEl.innerHTML = '';
		}else{

		showLoading(true,tmpEl);

			new Ajax(
		 		path,
		 			{
		 				method: methodName,
		 				data: dataStr,
						onComplete: function(){
							tmpEl.innerHTML = this.response.text;
							showLoading(false);
						},
					onFailure: function(){
						alert("Error communicating with server");
						showLoading(false);
					}
		 	}).request();
		}
	}

	this.sendDataToScript = function(path,dataStr,methodName,scriptToEval){
		//into tmpEl will loads data received from
		//path as ansver for dataStr
		
			new Ajax(
		 		path,
		 			{
		 				method: methodName,
		 				data: dataStr,
						onComplete: function(){
							//alert('OK');
							eval(scriptToEval);
							showLoading(false);
						},
					onFailure: function(){
						alert("Error communicating with server");
						showLoading(false);
					}
		 	}).request();
	}

	this.ajax_submit_form = function(form_id,scriptToEval){		
		//submits form without page reloading
		var frmObj	=	$(form_id);
		
		//alert(form_id+' frmObj: '+frmObj);
		
		if(frmObj != null){
			var errMess = this.checkForm(form_id);
			
			
			
			if(errMess == 1){
				//alert(2);
				
				showLoading(true,frmObj);
				var queryString = frmObj.toQueryString();//mootools function
				disableAll(form_id,true);
	
				if(queryString == ""){
					queryString += 'rnd='+Math.random();
				}else{
					queryString += '&rnd='+Math.random();
				}
				//alert(1);
				var frmProp = frmObj.getProperties('method','action');
				//alert(meth.method);
				//return;
				this.sendDataToScript(frmProp.action,queryString,frmProp.method,scriptToEval+';if($(\''+form_id+'\')!=null){disableAll(\''+form_id+'\',false);}showLoading(false);');					   
			}else{
				alert(errMess);
			}
		}
	}

	this.checkForm = function(formID){
		/*should be used this custom parametres:
		**
		**req_fld='1'
		**req_type='text/email/digit' defailt text
		**req_mes='E-mail is incorrect'
		/**/
		
		var frm = $(formID);
		if(frm != null){
			
			//var tmp = '',tmp2,tmpLen;
			var tmp,errMes = 0;
			for(i=0;i< frm.elements.length;i++){
				if(frm.elements[i].type == 'text'){
					//alert(frm.elements[i].name);
					tmp = frm.elements[i].getProperties('req_fld','req_type','req_mes');
					if(tmp.req_fld == 1){
						//if custom param found, need to check this field
						//alert('Checking '+frm.elements[i].name +' and errMes: '+tmp.req_mes+' And type: '+tmp.req_type);
						errMes += this.checkValue(frm.elements[i],tmp.req_mes,tmp.req_type) + "\n";
					}
				}				
			}
			
			if(errMes == 0){				
				return 1;
			}else{
				return errMes.substring(1);
			}
			
		}else{
			//can`t fid form
			return 'Error';
		}
	}

	this.checkValue = function(fld2chk,errMes,fldType){
		//checks value of fld2chk, if type=='email' performs additional
		//checking for email correct sintax
		var retMes	=	"";
	
	
	
		if(fld2chk.value.trim()	==""){
			retMes += errMes;
			fld2chk.removeClass('ok_style');
			fld2chk.addClass('error_style');
		}else{
			if(fldType=="email"){
	
				//if( !fld2chk.value.trim().test(/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}/i)){
				if( !fld2chk.value.trim().test(/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/i)){
															           
					retMes += "Entered e-mail address is incorrect\n";
					fld2chk.removeClass('ok_style');
					fld2chk.addClass('error_style');
	
				}else{
					fld2chk.removeClass('error_style');
					fld2chk.addClass('ok_style');
				}
			}else if(fldType=="date"){
	
				if( !fld2chk.value.trim().test(/^[0-9]{4,4}\.[0-9]{2,2}\.[0-9]{2,2}$/)){
					//yyyy.mm.dd
					retMes += errMes+"\n";
					fld2chk.removeClass('ok_style');
					fld2chk.addClass('error_style');
				}else{
					fld2chk.removeClass('error_style');
					fld2chk.addClass('ok_style');
				}
	
			}else if(fldType=="digit"){
				if( !fld2chk.value.trim().test(/^[0-9]{0,50000}$/)){
					retMes += errMes+"\n";
					fld2chk.removeClass('ok_style');
					fld2chk.addClass('error_style');
	
				}else{
					fld2chk.removeClass('error_style');
					fld2chk.addClass('ok_style');
				}
			}else{
					fld2chk.removeClass('error_style');
					fld2chk.addClass('ok_style');
			}
		}
	return retMes;
	}

	this.generatePassword = function(length) {
		if(length == undefined){
				length = 15;
		}
		var result = "";
		var symbols = "abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789_.-!@#$%*";
		for (var i=0; i<length; i++) {
			result += symbols.charAt(Math.floor(Math.random()*symbols.length));
		}
		return result;
	}


	/********EXTENSIONS MANAGEMENT******/

			this.loadExtension = function(extName,extPath,onloadExecute){

				if(!curLoadedExtensions.contains(extName)){
					//alert('Loading: '+extName);
					curLoadedExtensions.push(extName);
					//curLoadedExtensions[''+extName+'']['path'] = extPath;

					 var e = document.createElement("script");
					  e.src = extPath;
					  e.type="text/javascript";
					  e.language="javascript";
					  e.id = extName+'_script';
					  //e.text = source;
					  //taken from http://unixpapa.com/js/dyna.html

						  e.onload = function(){
						  	//alert('Loaded extension: '+extName+' from: '+extPath);
						  	eval(onloadExecute);
						  }

						 	e.onreadystatechange= function () {
						 		//for IE
						  	if (this.readyState == 'complete'){
						  		//alert('Loaded extension: '+extName+' from: '+extPath);
						  		eval(onloadExecute);
						  	}
						  }
					  //eo taken from
					  /**/
					 	//document.getElementsByTagName("head")[0].appendChild(e);
					 	if($("head_node") != null){
					 		$("head_node").appendChild(e);
					 	}

				}else{
					eval(onloadExecute);
					//alert('Extension: '+extName+' already loaded ');
				}
			}
			this.isExtensionLoaded = function(extName){
				return curLoadedExtensions.contains(extName);
			}

	/********EO EXTENSIONS MANAGEMENT******/

	this.eventPush = function(obj, event, handler) {
	//to add onload event for IE
	//http://bytes.com/topic/javascript/answers/510057-iframe-ie-onload-problem
	  if (obj.addEventListener) {
	    obj.addEventListener(event, handler, false);
	  } else if (obj.attachEvent) {
	    obj.attachEvent('on'+event, handler);
	  }
	}
	
	

	this.chgToPassType = function(fID,makePass){
	//trying to change input field type from text to passord
		var fld	=	$(fID);
		if(fld != null){
			fld.value="";
			if(!window.ie){
				if(makePass){
					fld.type="password";
				}else{
					fld.type="text";
				}
			}
		}
	}
	

	
}
var engine = new engine_class();

