var formtarget = 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 target_msg;
var mooeditable;
var mooeditable2;
var lang;
var curTargetHref = 'url';
var curTargetImageUrl = 'image-url';
var curTargetFlashUrl = 'flash-url';
var baseurl = '';

var mooEditableSetting = {
    actions: 'bold italic underline strikethrough | justifyleft justifyright justifycenter justifyfull lefttoright righttoleft | insertunorderedlist insertorderedlist indent outdent | createlink unlink | fontname fontSize | undo redo | image flash forecolor tableadd toggleview',
    baseCSS: 'body{ font-family: tahoma;font-size :12px;}',
    paragraphise  : false,
    externalCSS: '/public/scripts/mooeditable/Assets/MooEditable/Editable.css'
}


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();
			}
			
			showProgress(target);
			
			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{
		
		if(mooeditable) {
			mooeditable.saveContent(); 
		}
		
		if(mooeditable2) {
			mooeditable2.saveContent(); 
		}		
		
		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);
		showProgress(target);
		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(el) {
				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';
						res.data.each(function(msg, index){
							if(msg.el == 'form_expired') {
								alert(msg.err);
							} else {
								var newdiv = new Element('div');
					            newdiv.className = 'err-msg';
					            newdiv.setAttribute("id",msg.el + "-err");
					
					            var newtext = document.createTextNode(msg.err);
					            newdiv.appendChild(newtext);
					            parnode=document.getElementById(msg.el).parentNode;
					            parnode.appendChild(newdiv);
							}							
						});
						
					} else if(res.status == 'ok') {
						$(res.target_msg || target_msg).innerHTML=res.data;
				        evalScripts($(target_msg).innerHTML);
					}
				} catch(e) {
					if(errormode=='on'){
						c_message(errortxt,'error',true)
					} else {
						$(lasttarget_div).innerHTML=postReq.responseText;
				        evalScripts($(lasttarget_div).innerHTML);
					}
				}
			}
		}
	} catch(el){
		
	}
}

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.getProperty('MaxChars') - 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.getProperty('MaxChars') - this.value.length) + ' كاراكتر باقیمانده');
	   }		
	}
});


function changeStatus(strKeyword)
{
	window.status = strKeyword;
}

var mySortable = new Class({
	Implements: [Options],
	options: {
		wrapperSortable : '',
		saveUrl : '',
		handleMove : '.handle'
	},
	initialize: function(options){
		this.setOptions(options);
	},
	setupSortable : function(){
		var sortable = new Sortables(this.options.wrapperSortable, {
		     handle: this.options.handleMove,
		     onComplete: function() {
		     	
		     	var sort_order = '';
		     	$$('#' + this.options.wrapperSortable + ' li').each(function(li){
		     		sort_order = sort_order +  li.get('alt')  + '|';
		     	});
		     	
		     	$('sort_order').value = sort_order;	
		     	
		     	var req = new Request({
		     		url : this.options.saveUrl,
					method : 'post',
					autoCancel : true,
					data : 'sort_order=' + sort_order + '&token=' + $('token').value,
					onRequest : function() {
						showProgress('main');
					},
					onSuccess : function(response) {						
						if(response != '') {
							var res = JSON.decode(response);
							$$('input[id=token]').each(function(el) {
							    el.setProperty('value', res.token);
						    });
							alert(res.error);
						}
						hideProgress();
					}
				}).send();
		     	
		     }.bind(this)	
		});
	}
});

var closewindow = function ()
{
	if($defined($('dialog')))
	   $('dialog').setStyle('display', 'none');
	   
	if($defined($('dialog-browse-contents'))) 
	   $('dialog-browse-contents').setStyle('display', 'none'); 
	    
	if($defined($('dialog-browse-images'))) 
	   $('dialog-browse-images').setStyle('display', 'none');
	    
	if($defined($('dialog-browse-flash'))) 
	   $('dialog-browse-flash').setStyle('display', 'none'); 
}

function browseImages(targetImageUrl)
{	
	if(targetImageUrl) {
		curTargetImageUrl = targetImageUrl;
	}
		
	if($defined($('dialog-browse-images'))) {
		$('dialog-browse-images').dispose();//setStyle('display', 'block');
		//return;
	}
	
	var div = new Element('div', {
	  'class' : 'dialog-box',
	  'id' : 'dialog-browse-images',
	  'styles' : {
		  'width' : '40%'
	  }
	});
	
	var divload = new Element('div', {
	  'align' : 'left',
	  'class' : 'handle',
	  'id' : 'loading-browse-images'
	});
	
	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-images').setStyle('display', 'none');
		  }
	  }
	}).inject(tdleft);
	
	var divtarget = new Element('div', {'id' : 'target-browse-images'});
	
	tdleft.inject(tr);
	tdright.inject(tr);
	tr.inject(table);
	table.inject(divload);
	divload.inject(div);
	divtarget.inject(div);	
	div.inject($('wrapper'), 'after');
	
    $('dialog-browse-images').makeDraggable({handle: $('loading-browse-images')}); 
	$('target-browse-images').addClass('layer-loading layer-loading-bg');
	var request = new Request({
	   method : 'get',
	   evalScripts : true,
	   url : '/admin/ect/fetchallimages/lang/' + lang,
	   onComplete : function (response){
	      $('target-browse-images').removeClass('layer-loading layer-loading-bg');
	      $('target-browse-images').innerHTML = response;	      
	   }
	}).send();
}

function browseFlash(targetFlashUrl)
{	
	if(targetFlashUrl) {
		curTargetFlashUrl = targetFlashUrl;
	}
		
	if($defined($('dialog-browse-flash'))) {
		$('dialog-browse-flash').dispose();//setStyle('display', 'block');
		//return;
	}
	
	var div = new Element('div', {
	  'class' : 'dialog-box',
	  'id' : 'dialog-browse-flash',
	  'styles' : {
		  'width' : '40%'
	  }
	});
	
	var divload = new Element('div', {
	  'align' : 'left',
	  'class' : 'handle',
	  'id' : 'loading-browse-flash'
	});
	
	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-flash').setStyle('display', 'none');
		  }
	  }
	}).inject(tdleft);
	
	var divtarget = new Element('div', {'id' : 'target-browse-flash'});
	
	tdleft.inject(tr);
	tdright.inject(tr);
	tr.inject(table);
	table.inject(divload);
	divload.inject(div);
	divtarget.inject(div);	
	div.inject($('wrapper'), 'after');
	
    $('dialog-browse-flash').makeDraggable({handle: $('loading-browse-flash')}); 
	$('target-browse-flash').addClass('layer-loading layer-loading-bg');
	var request = new Request({
	   method : 'get',
	   evalScripts : true,
	   url : '/admin/ect/fetchallflash/lang/' + lang,
	   onComplete : function (response){
	      $('target-browse-flash').removeClass('layer-loading layer-loading-bg');
	      $('target-browse-flash').innerHTML = response;	      
	   }
	}).send();
}

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'), '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();	
}

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
				}
			}
		 });
    }); 
});

window.addEvent('domready', function(){
	//tooltips
    initTooltip();
});

initTooltip = function(){
	if($$('.tooltip').length > 0) {	
		var tipts = new Tips('.tooltip', {
			onShow: function(el){
			    el.fade(.9);
		    },
		    onHide: function(el){
			    el.fade(0);
		    }
		});
	}	
}

submitForm = function(frm)
{
	for ( instance in CKEDITOR.instances ) {
		CKEDITOR.instances[instance].updateElement();
	}
	
	if(fomSend(frm)) return false;
}

CkEditorDialogLink =  function(){
	CKEDITOR.on('dialogDefinition', function(ev){
	var dialogName = ev.data.name;
	if (dialogName == 'link') {
		setTimeout(function(){
			
			if($defined($('cke_75_textInput'))) {
				var target = 'cke_75_textInput';
			} else if($defined($('cke_77_textInput'))) {
				var target = 'cke_77_textInput';
			} else {
				var target = null;
			}
			
			if(target) {
		      $(target).addEvent('dblclick', function(){
		         browseContents(target);
	          });
	        }		  
        },1000);		
	}	
   });	
}

function deletePhoto(el)
{
	if(!confirm('آیا از حذف تصویر مطمئن هستید؟')) return false;
	
	var req = new Request({
		url : el.href,
		method : 'get',
		onRequest : function() {
			showProgress('main');
		},
		onSuccess : function(res){
			if(res == '') {
				$('row-photo').dispose();
				$('row-upload').removeClass('hide');
			} else {
				alert(res);
			}
			hideProgress();
		}
	}).send();
	return false;
}
