// JavaScript Document
String.prototype.is_email=function(){
   return (/^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/.test(this));	
}

String.prototype.is_empty=function(){
   return (this.search(/\S/)==-1)?true:false;	
}

String.prototype.url_title=function(){
   str=this.replace(/[^a-zA-Z0-9\s\/]+/g,'');		   
   str=str.replace(/\s+/g,'-');
   str=str.replace(/<\/?[^>]+(>|$)/g,'');
   str_arr=str.split("-");
   cln_arr=[];
   for(i in str_arr){
		if(!str_arr[i].is_empty()){
			cln_arr.push(str_arr[i]);
		}
   }
   return cln_arr.join("-");	
}

keyword_trim=function(element){
	jQuery(element).val(jQuery(element).val().replace(/[^a-zA-Z0-9\s\/%\.:\_\(\)]+/g,''));	
	jQuery(element).val(jQuery(element).val().replace(/\s+/g,' '));
}

tab_create=function(id){	
	jQuery("#"+id+" > ul").tabs({fxSlide: true, fxSpeed: 500, cookie: { expires: 30 }, cache:false, selectedClass: "selected"});	
}

set_language=function(lang){
	// set cookie
	jQuery.cookie('_LANGUAGE' , lang, { expires: 30 });
	// reload ui
	window.location.href=window.location.href;
}

block_ui=function(block){
	if(block){
		if(jQuery.browser.msie){
			jQuery("body").css({filter: 'alpha(opacity = 50);'});
		}else{
			jQuery("body").css({opacity:'0.50'});
		}
	}else{
		if(jQuery.browser.msie){
			jQuery("body").css({filter: ''});
		}else{
			jQuery("body").css({opacity:'100'});
		}
	}
}

jQuery.easing.elasout = function(x, t, b, c, d) {
	var s=1.70158;var p=0;var a=c;
	if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
	if (a < Math.abs(c)) { a=c; var s=p/4; }
	else var s = p/(2*Math.PI) * Math.asin (c/a);
	return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
};

/*ajax_loader=function(){				  
    //var loader = jQuery("#wait").css({position: "absolute", top: "0px", left: "0px", width:"250px"}).hide();
    jQuery().ajaxStart(function() {
		//loader.show();		
		jQuery("body").css({opacity:'.70',cursor:"wait"});
	}).ajaxStop(function() {
		//loader.hide();
		jQuery("body").css({opacity:'',cursor:"default"});
	}).ajaxError(function(a, b, e) {
		throw e;
	}); 	
}*/

ajax_loader=function(active){		
	var active=active||true;
	if(!active){
		jQuery().ajaxStart(function(){});
	}else{
		jQuery().ajaxStart(function() {		
			jQuery("body").css({cursor:"wait"});
			selects_overlap(true);
			jQuery("#loading-mask").show();		
		}).ajaxStop(function() {	
			jQuery("body").css({cursor:"default"});
			selects_overlap(false);
			jQuery("#loading-mask").hide();
		}).ajaxError(function(a, b, e) {
			throw e;
		}); 
	}
}

selects_overlap=function(hide){
	if (jQuery.browser.msie) {				
		if(parseInt(jQuery.browser.version)<=6){
			if(hide){
				jQuery("form select.hidden").css({ visibility: "hidden" });
			}else{
				jQuery("form select.hidden").css({ visibility: "visible" });
			}
		}
	}
}  

set_loader_position=function(){
	var element = jQuery('#loading_mask_loader');	

    if (element && jQuery.browser.msie) {		
        var middle = parseInt(document.body.clientHeight/2)+document.body.scrollTop;
		//jQuery(element).css({position:'absolute','top':middle});
		try{
			//element.style.position = 'absolute';
			//element.style.top = middle;
			//jQuery(element).css({position:'absolute',top:100,left:50});
		}catch(ex){}
    }	
	
	
}
onenter_submit=function(method){
	jQuery(":input").each(function (i) { 							   
			jQuery(this).keyup(function(event){
				if(event.keyCode == 13){
					method();
				}
			}); 			
    });
}

// other 
check_all=function(object,func){
  form=object.form; 
  for(var i=0;i<form.elements.length;i++){
   if(form.elements[i].type=="checkbox" && form.elements[i].name==object.value){    
    form.elements[i].checked=object.checked;
	if(func){
	  func(form.elements[i]);
	}
   }
  }
}

select_all=function(object,value){
  form=object.form; 
  if(object.value=="Select All"){	  
      var checked=true;
	  object.value="Unselect All";
  }else{
	  var checked=false;
	  object.value="Select All";
  }
  
  for(var i=0;i<form.elements.length;i++){   
   if(form.elements[i].type=="checkbox" && form.elements[i].name==value){    
    form.elements[i].checked=checked;	
   }
  }
}

count_checked=function(name,form){
  var cntchk=0;
  for(var i=0;i<form.elements.length;i++){
    if(form.elements[i].name==name && form.elements[i].checked==true){    
   	  cntchk++;
    }
  }
  
  return cntchk;
}

do_task=function(options){
	// delegate 
	var delegate=true;
	
	// form object
	var form=(options.form_name)?document.forms[options.form_name]:document.frm;
	// create form elements if not defined
	create_form_elements(form);
	// set key	
	set_keys(options.id,form);
	// alert on no select if so set
	if(options.select!=undefined && options.select=='required'){
		if(count_checked("_keys[]",form)==0){
		  alert("Please select some %s1% to %s2%".replace("%s1%",options.name_of).replace("%s2%",options.task.replace("_"," ")));	
		  try{form.ctasks.selectedIndex=0;}catch(x){}
		  return;
		}
	}
	
	// conmfirm delete
	if(is_delete_operation(options)){
		var msg_confirm = "Waring : Are you sure to delete selected %s% ?";
		if(!confirm(msg_confirm.replace("%s%",options.name_of))){
        	return;         	
	  	}
	}
	
	// set task
	form.mode.value=options.task;
	
	// set hash
	form_hash(form,options.id);
	// set _tasks
	form._tasks.value=serilize(options);
	
	// invoke validator
	if(options.validator){		    
	  	if(typeof(options.validator)=="function"){			
			if(!options.validator(form)) return;
		}
	}	
	
	// set form action if set
	//if(options.action && !options.form_action){
		//options.form_action=options.action+"/"+options.task;
	//}	
	form.action=(options.form_action)?options.form_action:form.action;
	
	// send form		
	form.submit();	
	
}

select_check=function(id,form){
	form= form || document.frm;
	set_keys(id,form);
}

set_keys=function(id,form){
	if(parseInt(id)==0) return;
	
	for(var i=0;i<form.elements.length;i++){
	   if(form.elements[i].type=="checkbox" && form.elements[i].name=="_keys[]"){
		  if(form.elements[i].value==id){
			form.elements[i].checked=true;
			break;
		  }   
	   }
	}
	
	if(document.getElementById("_key")){
		document.getElementById("_key").value=id || 0;
	}
}

group_task=function(el,s,n){
	// check
	if(el.value=="")return;
	
	do_task({task:el.value ,select: s, name_of: n});
}

is_delete_operation=function(options){
  if(options.task && options.task.toString().indexOf("delete")!=-1){
	return true;
  }else if(options.subtask && options.subtask.toString().indexOf("delete")!=-1){
	return true;  
  }	
  
  return false;
}

serilize=function(options){
	o_add=[];
	for(o in options){
		if(typeof(options[o])=="function"){	
		  continue;
		}
		o_add.push(o+"="+encodeURI(options[o]))
	}
	return o_add.join("&");
}

form_hash=function(form,id){
	if(form.elements["_form_hash"]==undefined){
		 create_element(form,"_form_hash");	   
	}
	var id= id || 0;	
	form._form_hash.value=new Date().getTime() + id + Math.round(Math.random()*100);		
}

create_form_elements=function(form){
	var form_elements=["mode","_key","_form_hash","_tasks"];
	
	jQuery.each(form_elements,function (i) {     
		if(form.elements[this]==undefined){
		  	create_element(form,this);	   
		}			
    });	
}

create_element=function(form,name){
     var n       = document.createElement("input");
		 n.type  = "hidden";
		 n.name  = name;
		 n.id    = name;
		 n.value = "";
		 form.appendChild(n);
		 delete(n);
}

do_sort=function(field,form){
	
	form=(form==undefined)?document.frm:form;	
	
	if(form.order_by==undefined) {
		create_element(form,"order_by");	
		create_element(form,"order_by_dir");		
	}
	
	if(form.order_by_dir.value=="ASC"){
      	form.order_by_dir.value="DESC";
	}else{
      	form.order_by_dir.value="ASC";	 
	}
	
	if(form.order_by.value!=field){
      	form.order_by.value="ASC";		  
	}
	
	form.order_by.value=field;
	form.submit();
}

editor_data=function(name,t){
	var t = t || 'mce';		
	switch(t){
		case 'fck':
			var editor=FCKeditorAPI.GetInstance(name);
			html=editor.GetHTML();	
		break;
		case 'mce':
		default:
			html=tinyMCE.get(name).getContent();					
		break;
	}		
	return html;
}

editor_validator=function(name,t){
	var t = t || 'mce';	
	jQuery.validator.addMethod("editor_required", function(value,element) {
		var data=editor_data(name,t);
		
		return (this.optional(element) || !data.toString().is_empty()); 
		
	}, "Please enter editor content");
}

clear_combo_options=function(el_select){
	var all_text=el_select.options[0].text;
	// 
	for(var i=0;i<el_select.options.length;i++){
	     el_select.options[i]=null;		
	}	
	// set nothing
	el_select.options.length=0;
	// add all days
    el_select.options[0]=new Option(all_text,0,false,false);
}

add_combo_option=function(el_select,el_selected_text,el_selected_value){
	el_select.options[el_select.options.length]=new Option(el_selected_text,el_selected_value,false,false);
}

add_combo_options=function(el_select,range,el_selected_value){
    el_selected_value=(el_selected_value==-1)?1:el_selected_value;
    for(var i=range[0];i<=range[1];i++){		
	    selected=(el_selected_value==i)?true:false;
		el_select.options[el_select.options.length]=new Option(i,i,false,selected);
	}	
}

popup_small=function(url,height,width,options){  
  var options =options || {};
  
  if(screen.availHeight && screen.availWidth){
    var ah=screen.availHeight-30;
    var aw=screen.availWidth-10;
  }else{
	var ah=708; 
	var aw=1014;	
  }  
  if(height==undefined){	
    height=600;
  }
  if(width==undefined){	
    width=700;
  }  
		
  var xc = (aw - 500) / 2;
  var yc = (ah - 500) / 2;
  
  // configs
  var resizable  =(options.resizable!=undefined && options.resizable=="N")?0:1;
  var scrollbars =options.scrollbars || 1;
  var winProp='toolbar=0, menubar=0, resizable='+resizable+', scrollbars='+scrollbars+', dependent=0, status=0,';      
      winProp+=' width='+width+', height='+height+',left=' + xc + ', top=' + yc;  	
    
  var new_window = window.open(url, 'new_window', winProp);
  if(new_window && new_window.focus){
    new_window.focus();
  }
}

popup_fullscreen=function(url){   
  if(screen.availHeight && screen.availWidth){
    var ah=screen.availHeight-30;
    var aw=screen.availWidth-10;
  }else{
	var ah=708; 
	var aw=1014;	
  }  
  	
  height=screen.availHeight;  
  width=screen.availWidth;
  	
  var xc = (aw - 500) / 2;
  var yc = (ah - 500) / 2;
  
  var winProp='toolbar=0, menubar=0, location=0, resizable=0, scrollbars=1, dependent=0, status=0,';      
      winProp+=' width='+width+', height='+height+',left=' + xc + ', top=' + yc;
  	
    
  var lock_window = window.open(url, 'lock_window', winProp);
  if(lock_window && lock_window.focus){
    lock_window.focus();
  }
}

no_validation_status=function(label,fields){
	if(jQuery.inArray(label.get(0).htmlFor,fields)!=-1){
		label.remove();
		label.html("&nbsp;").removeClass("error").removeClass("checked");
		return true;
	}
	return false;
}
// redirect
ajax_redirect=function(data,base_url){
	if(data.redirect){
		window.location.href=data.redirect+'/return/'+window.location.href.toString().replace(base_url,'');		
	}		
}
// hash to query
hash_get=function(qVar,hash){
	var hash    = hash || window.location.hash.replace("#","");	
	var qVarVal = ""; 
	if(hash){
		hash_vars=hash.toString().split("/");	
		for(var i=0;i<hash_vars.length;i++){
			if(hash_vars[i].toString().is_empty()==false){
				if(hash_vars[i]==qVar){
					qVarVal=hash_vars[i+1];
				}
				i++;
			}
		}
	}
	return qVarVal;
}
// hase set
hash_set=function(key,value){
	var hash=window.location.hash.replace("#","");	
	if(hash){		
		var rx=new RegExp("/"+key+"/(.*)");		
		if(rx.test(hash)){
			hash=hash.replace(rx,"/"+key+"/"+value);			
		}
	}else{
		hash="/"+key+"/"+value;
	}
	// set 
	window.location.hash='#'+hash;
}