var formtarget = new Array();
var formProgress = new Array();
var samenCache = new Array();
var get_cache=false;
var cache_href='';
var lasttarget_div = '';
var receiveReq;
var postReq;
var requesturl='';
var posturl='';
var postparam='';
var postmethod='';
var ajax_cnt=0;
var post_cnt=0;
var freescroll=true;
var lang;
var curTargetHref = 'url';


function getContent(el, params, ajax)
{
	if(params) {
		var config=params;
	}
	
	var target=(config.target)?config.target:'main';
	lastTarget=config.target;
	
	var confirmed=true;
	if(config.confirm){
		confirmed=getConfirm(config.confirm);
	}
	
	if(confirmed){
		if(ajax){
			
			get_cache=false;
			var get_request=true;
			lasttarget_div=target;
			
			if(target=='wrapper-layer'){
				showProgress('wrapper-layer');
				lasttarget_div='inner-layer';
				target='inner-layer';
			}
			
			if(target=='inner-layer'){
				changeposition('inner-container');
			} else {
				goToTarget();
			}
			
			var progress = params.progress ? params.progress : target;
			showProgress(progress);
			
			if(config.cache && samenCache[el.href]){
				$(lasttarget_div).innerHTML=samenCache[el.href];
				evalScripts($(lasttarget_div).innerHTML);
				
				if(target=='inner-layer'){
					$('inner-layer').className='';
				}
				
				get_request=false;
				hideProgress();
			} else if(config.cache){
				get_cache=true;
				cache_href=el.href;
			}
			
			if(get_request){
				if(el){
					ajaxRequest(el.href,'get');
				} else {
					ajaxRequest(config.href,'get')
				}
			}
			
		} else {
			return true;
		}
	}
	
	return false;
	
}

function fomSend(id)
{
	try{
		
		var myform='frm-' + id;
		var formContent = $(myform);
		var data='';
		var elvalue;
		
		formContent.getElements('input').each(function(el){
			if(el.type == 'radio') {
				if(el.checked == true)
				   data += el.name + '=' + el.value + '&';
			} else if(el.type == 'checkbox') {
				if(el.checked == true)
				   data += el.name + '=' + el.value + '&';				   
			} else {
				elvalue = el.value;
			    elvalue = elvalue.replace(/&/g,'%26');
			    data += el.name + '=' + elvalue + '&';
			}
		});
		
		
		formContent.getElements('textarea').each(function(el){
			elvalue = el.value;
			elvalue = elvalue.replace(/&/g,'%26');
			data += el.name + '=' + elvalue + '&';
		});	
		
		formContent.getElements('select').each(function(el){
			elvalue = el.value;
			elvalue = elvalue.replace(/&/g,'%26');
			data += el.name + '=' + elvalue + '&';
		});		
				
		var url = formContent.action;
		var method=formContent.method;
		target=formtarget[id];
		lastTarget=target;
		lasttarget_div = target;

		goToTarget();
		striperrdiv(id);
		
		var progress = formProgress[id] ? formProgress[id] : target;
		showProgress(progress);
		ajaxPost(url,data,method);
		return true;
		
	} catch(e){
		return false;
	}
}

function getElementValue(formElement)
{
	if(formElement.length != null)
	   var type = formElement[0].type;
	   
	if((typeof(type) == 'undefined')||(type == 0))
	   var type = formElement.type; 
	   
	switch(type){
		case 'undefined':
		   return false;
		   
		case 'radio' :
		   for(var x=0; x<formElement.length; x++) 
		       if(formElement[x].checked==true) 
		          return formElement[x].value;  
		          
		case 'checkbox' :
		   if(formElement.checked) return formElement.value;
		   else return false;

		default : 
		   return formElement.value;       
	}
}

function getConfirm(conftxt)
{
	return confirm(conftxt);
}

function ajaxRequest(url,method)
{
	if(window.ActiveXObject)
	   receiveReq = new ActiveXObject("Microsoft.XMLHTTP");
	else 
	   receiveReq = new XMLHttpRequest();
	   
    if(method=="get"){	
    	requesturl=url;	
		receiveReq.open("GET",url,true);
		receiveReq.onreadystatechange=handleReceiveMode;
		receiveReq.setRequestHeader('X-Requested-With','XMLHttpRequest');
		receiveReq.send(null)
	}	
}

function reprequest()
{
	if(ajax_cnt<3){
		ajax_cnt++;
		ajaxRequest(requesturl,'get')
	}else{
		ajax_cnt=0;
		hideProgress();
		message(errortxt,'error',true);
	}
}

function handleReceiveMode()
{
	try {
		
		if(receiveReq.readyState==4) {
			
			try{
				if(receiveReq.status!=200){
					reprequest();
				}
			} catch(e) {
				reprequest();
			}
			
			if(receiveReq.status==200){
				ajax_cnt=0;
				hideProgress();
				$(lasttarget_div).innerHTML=receiveReq.responseText;
				evalScripts($(lasttarget_div).innerHTML);
				
				if(get_cache){
					samenCache[cache_href]= $(lasttarget_div).innerHTML;
					get_cache=false;
				}
			}
		}
	} catch(e){}
}

function ajaxPost(url,param,method)
{
	if(window.ActiveXObject)
	   postReq = new ActiveXObject("Microsoft.XMLHTTP");
	else 
	   postReq = new XMLHttpRequest();
	   
	posturl = url;
	postparam=param;
	postmethod=method;  

	if(method=="get"){
		param=encodeURI(param);
		param=param.replace(/\+/g,"%2B");
		url=url+'?'+param;
		postReq.open("get",url,true);
		postReq.setRequestHeader('X-Requested-With','XMLHttpRequest');
		postReq.onreadystatechange=handlepostReceive;
		postReq.send(null);
	} else {
		postReq.open("post",url,true);
		postReq.setRequestHeader('X-Requested-With','XMLHttpRequest');
		postReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		postReq.onreadystatechange=handlepostReceive;
		postReq.send(param);
	}
}

function reppostrequest()
{
	if(post_cnt<3){
		post_cnt++;
		ajaxPost(posturl,postparam,postmethod)
	}else{
		post_cnt=0;
		hideProgress();
		message(errortxt,'error',true);
	}
}

function handlepostReceive()
{
	try{
		
		if(postReq.readyState == 4){
			try {
				if(postReq.status!=200){
					reppostrequest();
				}
			} catch(e){
				reppostrequest();
			}
			
			if(postReq.status==200){
				post_cnt=0;
				hideProgress();
				var errormode='off';
				
				try {
					var res = JSON.decode(postReq.responseText);
					if(res.status=='invalid'){
						$$('input[id=token]').each(function(el) {
							el.setProperty('value', res.token);
						});
						errormode='on';
						processErrorAjax(res.data);	
					}
				} catch(e) {
					if(errormode=='on'){
						c_message(errortxt,'error',true);
					} else {
						$(lasttarget_div).innerHTML=postReq.responseText;
				        evalScripts($(lasttarget_div).innerHTML);
					}
				}
			}
		}
		
	} catch(e) {
		
	}
}

function processErrorAjax(errors)
{
	errors.each(function(msg, index){
							if(msg.el == 'form_expired') {
								alert(msg.err);
							} else {
								var newdiv = new Element('div', {
									'class' : 'err-msg',
									'id' : msg.el + '-err' 
								});
					
					            var newtext = document.createTextNode(msg.err);
					            newdiv.appendChild(newtext);
					            parnode = $(msg.el).parentNode;
					            parnode.appendChild(newdiv);
							}							
	});
}

function clearErrorElementsForm(id)
{
	var formContent= $(id);
	
	for(i in formContent.elements){
		try {
			errdiv=$(formContent.elements[i]['id']+"-err");
	        pardiv=errdiv.parentNode;
	        pardiv.removeChild(errdiv);
		} catch(e){}
	}
}

function evalScripts(text)
{
	var script,regexp=/<script[^>]*>([\s\S]*?)<\/script>/gi;
	while((script=regexp.exec(text)))eval(script[1]);
	return text;
}

function striperrdiv(id)
{
	var form='frm-'+id;
	var errdiv;
	var pardiv;
	var tmp,tmp2,editorErrId;
	var frm= $('form-wrapper-'+id);
	var formContent= $(form);
	
	for(i in formContent.elements){
		try {
			errdiv=$(formContent.elements[i]['id']+"-err");
	        pardiv=errdiv.parentNode;
	        pardiv.removeChild(errdiv);
		} catch(e){}
	}
}

function goToTarget()
{
	var target=lastTarget;
	var scrollTopHeight=getScrollTop();
	var totalHeight=getHeight()+scrollTopHeight;
	var top=getPosition($(target)).y;
	if(target!='hiddenDiv'&&((totalHeight<top)||(top<totalHeight&&top<scrollTopHeight))){
		setTimeout(function(){freescroll=false},3000);
	freescroll=true;
	getscroll((top-70))
	}
	return false
}

function showProgress(target)
{
	if(target=='wrapper-layer'){
		var layer= $('wrapper-layer');
		target='wrapper';
		$('wrapper-layer').style.display='inline';
		$('inner-container').style.display='inline'
	}else{
		var layer=$('ajax-load');
		var opacity=0.75;
		layer.style.opacity=opacity;
		layer.style.zIndex=4000000;
		layer.style.filter='alpha(opacity:75)'
	}
	
	if(target=='hiddenDiv'){
		target='container'
	}
	
	var targetCoordinate= getCoordinates($(target));
	layer.style.display='inline';
	layer.style.width= targetCoordinate.width+'px';
	layer.style.height=Math.max(targetCoordinate.height,170)+'px';
	layer.style.top=targetCoordinate.top+'px';
	layer.style.left=targetCoordinate.left+'px';
	var ajaxleft=targetCoordinate.width/2-85;
	$('ajax-inner').style.left=ajaxleft+'px';
	var ajaxtop=( getScrollTop()-100);
	if(ajaxtop>targetCoordinate.top&&ajaxtop<(Math.max(targetCoordinate.height,170)-170)){
		$('ajax-inner').style.top=ajaxtop+'px'
	}else{
		$('ajax-inner').style.top='10px'
	}
}

function hideProgress()
{
	$('ajax-load').style.display = 'none';
}

function message(text,type,fixed)
{
	alert(text);
}

function getCoordinates(overflown)
{
	var position= getPosition(overflown);
	var obj={'width':overflown.offsetWidth,'height':overflown.offsetHeight,'left':position.x,'top':position.y};
	obj.right=obj.left+obj.width;
	obj.bottom=obj.top+obj.height;
	return obj
}

function getPosition(el)
{
	try{
		var left=0,top=0;
		var cnt=0;
		do{
			left+=el.offsetLeft||0;
			top+=el.offsetTop||0;
			el=el.offsetParent
		}
		while(el);
		return{'x':left,'y':top}
	}catch(e){
		return{'x':0,'y':0}
	}
}

function getScrollTop()
{
	return window.pageYOffset||document.documentElement.scrollTop
}

function getHeight()
{
	if(window.khtml)
	  return window.innerHeight;
	  
	if(window.opera)
	   return document.body.clientHeight;
	   
	return document.documentElement.clientHeight
}

function getscroll(offsetY){if(freescroll){var scrollTopHeight=getScrollTop();if(scrollTopHeight>offsetY){window.scrollTo(0,(scrollTopHeight-50));if((scrollTopHeight-50)>offsetY){setTimeout(function(){getscroll(offsetY)},10)}}if(scrollTopHeight<offsetY){window.scrollTo(0,(scrollTopHeight+50));if((scrollTopHeight+50)<offsetY){setTimeout(function(){getscroll(offsetY)},10)}}}}

function changeposition(target){var layer=$(target);layer.style.top=(getScrollTop()+70)+'px'}

var TextLimited = new Class({
    initialize: function(el){
        this.el = el;		
		this.onkeydown();
		this.onkeyup();
		this.onblur();
    },
	onkeydown: function(){	
	   $(this.el).onkeydown = function(){
		   if(this.value.length > this.getProperty('MaxChars')) {
			   return false;
		   }
	   }
    },
	onkeyup: function(){
	   $(this.el).onkeyup = function(){
		   if(this.value.length > this.getProperty('MaxChars')) {
			   this.value = this.value.substr(0,this.getProperty('MaxChars'));
		   }
		   $(this.getProperty('Counter')).set('text',this.value.length);
	   }	   
	},
	onblur: function(){
	   $(this.el).onblur = function(){
		   if(this.value.length > this.getProperty('MaxChars')) {
			   this.value = this.value.substr(0,this.getProperty('MaxChars'));
		   }
		   $(this.getProperty('Counter')).set('text',this.value.length);
	   }		
	}
});

function closewindow()
{
	if($defined($('dialog')))
	   $('dialog').setStyle('display', 'none');
	   
	if($defined($('dialog-browse-contents'))) 
	   $('dialog-browse-contents').setStyle('display', 'none');
}

function browseContents(targetHref)
{
	if(targetHref) {
		curTargetHref = targetHref;
	}
	
	if($defined($('dialog-browse-contents'))) {
		$('dialog-browse-contents').setStyle('display', 'block');
		return;
	}
	
	var div = new Element('div', {
	  'class' : 'dialog-box',
	  'id' : 'dialog-browse-contents',
	  'styles' : {
		  'width' : '40%'
	  }
	});
	
	var divload = new Element('div', {
	  'align' : 'left',
	  'class' : 'handle',
	  'id' : 'loading-browse-contents'
	});
	
	var table = new Element('table', {'width' : '100%'});
	var tr = new Element('tr');
	var tdleft = new Element('td', {'align' : 'left', 'width' : '5%'});
	var tdright = new Element('td', {
	  'align' : 'right',
	  'width' : '95%',
	  'styles' : {'padding-right' : '5px'},
	  'text' : 'انتخاب آدرس'
	});
	
	var divclose = new Element('div', {
	  'title' : 'بستن پنجره',
	  'class' : 'close click',
	  'styles' : {
		  'height' : '16px',
		  'width' : '16px'
	  },
	  'events' : {
		  'click' : function(){
			 $('dialog-browse-contents').setStyle('display', 'none');
		  }
	  }
	}).inject(tdleft);
	
	var divtarget = new Element('div', {'id' : 'target-browse-contents'});

	tdleft.inject(tr);
	tdright.inject(tr);
	tr.inject(table);
	table.inject(divload);
	divload.inject(div);
	divtarget.inject(div);	
	div.inject($('wrapper-header'), 'after');

    $('dialog-browse-contents').makeDraggable({handle: $('loading-browse-contents')}); 
	$('target-browse-contents').addClass('layer-loading layer-loading-bg');
	var request = new Request({
	   method : 'get',
	   evalScripts : true,
	   url : '/admin/ect/fetchallcontents/lang/' + lang,
	   onComplete : function (response){
	      $('target-browse-contents').removeClass('layer-loading layer-loading-bg');
	      $('target-browse-contents').innerHTML = response;	      
	   }
	}).send();
}

submitForm = function(frm)
{
   UpdateEditorFormValue();
   if(fomSend(frm)) return false;
}

UpdateEditorFormValue = function()
{
   for ( i = 0; i < parent.frames.length; ++i ){
      if ( parent.frames[i].FCK ){
         parent.frames[i].FCK.UpdateLinkedField();
      }
   }
}	

function changeStatus(strKeyword)
{
	window.status = strKeyword;
	return true;
}

window.addEvent('load',function() {
	$$('.overText').each(function(el){
		 new OverText(el.id, {
			 positionOptions: {
				position: el.hasClass('fa') ? 'upperRight' : 'upperLeft',
				edge: el.hasClass('fa') ? 'upperRight' : 'upperLeft',
				offset: {
					x: el.hasClass('fa') ? -4 : 4,
					y: 2
				}
			}
		 });
    }); 
});
