//needed when moving items in different folders
//////////////////////////////////////////////////////////////////////
// myajax				                                            //
//                                                                  //
// DOM - select object                                              //
// 								                                    //
// Copyright (C) 2006 - 2007  design project, www.dsnproject.hr     //
//								                                    //
// License: Commercial						                        //
//////////////////////////////////////////////////////////////////////
function call_user_func_array(func, parameters) {
    if (typeof func == 'string') {
        if (typeof this[func] == 'function') { func = this[func]; } else {
            func = (new Function(null, 'return ' + func))();
        }
        if (typeof func != 'function') {
            throw new Exception(func + ' is not a valid function');
        }
    }
    
    return func.apply(null, parameters);
}
function myajax_query_link(url,key,value,filename,add_empty){
	var output="";
	var added=false;
	
	if (url)
		hu = url.split('?');
	else hu=Array();
	
	if (hu[0])
		filename=hu[0];
	else if (!filename)
		filename='';

	if (hu[1]){
		gy = hu[1].split("&");		
		
		for (i=0;i<gy.length;i++) {
			ft = gy[i].split("=");
			output=output+"&"+ft[0]+"=";
		
			if (ft[0]!=key){
				output=output+ft[1];
			} else {
				output=output+value;
				added=true;
			}
		}			
	} 
	
	if ((!added && value) || (!added && add_empty)){
		output=output+"&"+key+"="+value;
	}
	
	if (output)
		output=output.substring(1);	
	
	return filename+"?"+output;
}



function myajax_success(msg,settings){
	/*	
	settings.div=>'div to load'
	settings.effect=>'effect to use',
	settings.success=>'function to call'
	settings.errors=>'function to call'	
	settings.done=>'function to call',
	settings.lightbox=true,//to show lightbox on general response 
	settings.lightbox_success=true,//to show lightbox only if it's success
	settings.lightbox_errors=true,//to show lightbox only if there was an error
	settings.lightbox_timer=4000,//delay to show lightbox
	settings.loader=>true,
	settings.loader_div=>'div to load',
	settings.loader_html=>'loading...',
	settings.loader_success=>'loading done!',	
	settings.loader_eval=>'script to execute on load',
	settings.force_submit=>true,if we want to submit form no matter it has errors
	settings.submission_url=>'where to submit',
	settings.return_call=>return type, similar to success	
	*/
	//default settings here	
	if (settings.loader || settings.loader_div){
		if (!settings.loader_success)
			settings.loader_success='';
		
		if (!settings.loader_div){
			$("#"+settings.div).html(settings.loader_success);	
		} else {
			$("#"+settings.loader_div).html(settings.loader_success);	
		}
		
		if (settings.loader_display=='none'){
			$('#'+settings.loader_div).css({display:'none'});
		}
	}

	if (!settings.response)
		settings.response={};
		
	if (!settings.response.errors)
		settings.response.errors={};
		
	if (!settings.response.valid)
		settings.response.valid={};
		
	if (!settings.response.errors_fields)
		settings.response.errors_fields={};		
		
	if (!settings.act)
		settings.act='';
		
	if (!settings.lightbox_timer)
		settings.lightbox_timer=4000;
		
		
	if (settings.success && !settings.response.errors[settings.act]){
		eval(settings.success);
	}

	if (settings.errors && settings.response.errors[settings.act]){
		eval(settings.errors);
		
	}	

	if ((settings.lightbox || settings.lightbox_success) && settings.response.valid[settings.act]){	
		LightBox({delay:settings.lightbox_timer,msg:settings.response.valid[settings.act].join(';'),mode:'valid'});			
	}

	if ((settings.lightbox || settings.lightbox_errors) && settings.response.errors[settings.act]){
		LightBox({delay:settings.lightbox_timer,msg:settings.response.errors[settings.act].join(';'),mode:'errors'});					
	}
	

		
			
	switch (settings.effect){
	case 'toggle':
		if (settings.div){
			$("#"+settings.div).html(msg);	
			$("#"+settings.div).css({display:'none'});
			$("#"+settings.div).slideDown("slow");
		}
		break;
	case 'fade':
		if (settings.div){	
			$("#"+settings.div).html(msg);			
			$("#"+settings.div).css({opacity:0});			
			$("#"+settings.div).fadeTo("slow",1);				
		}
		break;
	case 'mylightbox':
		settings.html=msg;
		createMylightbox(settings);		
		break;
	case 'debug':
		alert(msg);
		break;
	default:
		if (settings.div){
			$("#"+settings.div).html(msg);					
		}
		break;
	}

	if (settings.return_call)
		call_user_func_array(settings.return_call, [msg]);
		
	if (settings.done){
		eval(settings.done);
	}	

}
function myajax_preloader(settings){
	//settings.loader=>true,
	//settings.loader_div=>'div to load',
	//settings.loader_html=>'',	
	
	if (settings.loader || settings.loader_div){
				
		if (!settings.loader_html)
			settings.loader_html='<img src="templates/js/myajax/ajax-loader.gif" id="myajax_loader" />';
			
		if (!settings.loader_div){
			$("#"+settings.div).html(settings.loader_html);	
		} else {
			$("#"+settings.loader_div).html(settings.loader_html);	
		}		
	}
	
	if (settings.loader_eval){
		eval(settings.loader_eval);
	}
}

function myajax_Request(settings){	
	//settings.url=>'what to load',
	//settings.type=>'method to use',	
	//default_settings here		
	
	if (!settings.type)
		settings.type='GET';
		
	if (settings.data)
		settings.data='';
				
	if (settings.loader_div){
		settings.loader_display=$('#'+settings.loader_div).css('display');
		
		if (settings.loader_display=='none'){
			$('#'+settings.loader_div).css({display:'block'});
		}
	}
		
	myajax_preloader(settings);		
	
	$.ajax({
	    cache: false,
		url:settings.url,
		data:settings.data,		
		type:settings.type,
		success:function(msg){
			myajax_success(msg,settings);
		}
	});	
}

function myajax_FormRequest(submited_form,settings){	
	//settings.url=>'what to load',
	//default_settings here		

	if (!settings.submission_url)
		settings.submission_url=undefined;		

	if (settings.loader_div){
		settings.loader_display=$('#'+settings.loader_div).css('display');
		
		if (settings.loader_display=='none'){
			$('#'+settings.loader_div).css({display:'block'});
		}
	}
	
	myajax_preloader(settings);	

	var options = {
		url:settings.submission_url,
		success:function(msg){
			myajax_success(msg,settings);
		}
	}
				
	
	$(submited_form).ajaxSubmit(options); 
}

function myajax_Form(submited_form,settings){
	var targetContent = $("input[name='act']", submited_form);	
	
	if (!settings.submission_url)
		settings.submission_url=undefined;	


	if (settings.loader_div){
		settings.loader_display=$('#'+settings.loader_div).css('display');
		
		if (settings.loader_display=='none'){
			$('#'+settings.loader_div).css({display:'block'});
		}
	}
	myajax_preloader(settings);
	
	var options = {
		
		////add &validator=true to submission url so we can get response
		
		url:myajax_query_link(settings.submission_url,'validator','true','index.php'),
		success:function(msg){
			eval("var response="+msg);
			
			
						
			settings.act=$(targetContent).attr("value");

			settings.response=response;
			
			
			
			if ((response.errors && !response.errors[settings.act]) || !response.errors || settings.force_submit){

				var options = {
					url:settings.submission_url,
					success:function(msg){
						
						myajax_success(msg,settings);
					}
				}
				$(submited_form).ajaxSubmit(options); 													
			}else{

				myajax_success('',settings);			
			}
		}
	}
				
	
	$(submited_form).ajaxSubmit(options); 	
	
}

function myajax() {
	
	$("a").livequery('click',function(){
								 
					
		var rel_att=$(this).attr("rel");
		if (rel_att){
						
			if (rel_att.toLowerCase().substring(0,6)=='myajax'){				

				eval("var settings="+rel_att.substring(6,rel_att.length));
				
				if (!settings.url)
					settings.url=$(this).attr("href");	
				
				myajax_Request(settings);
				return false;
			}
		}
	});


	$("form").livequery("submit",function(){
		var rel_att=$(this).attr("rel");
		if (rel_att){
			if (rel_att.toLowerCase().substring(0,6)=='myajax'){	

				eval("var settings="+rel_att.substring(6,rel_att.length));			

				myajax_Form(this,settings)
				return false;	
			}
		}
	});		
}
$(document).livequery(myajax);