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;


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{
		
		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(e){
				reppostrequest();
			}
			
			if(postReq.status==200){
				post_cnt=0;
				hideProgress();
				var errormode='off';
				
				try {
					var res = JSON.decode(postReq.responseText);
					if(res.status=='invalid'){
						errormode='on';
						res.data.each(function(msg, index){
					
					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);
				});
					}
				} catch(e) {
					if(errormode=='on'){
						c_message(errortxt,'error',true)
					} else {
						$(lasttarget_div).innerHTML=postReq.responseText;
				        evalScripts($(lasttarget_div).innerHTML);
					}
				}
			}
		}
		
	} 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);
	   }		
	}
});

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;
}
