// GLOBAL DEFAULT NUMBER VALUES CHILEAN FORMAT
var num_format = "cl";
var num_format_tmp = "";

var currency = "PESOS";
var currency_tmp = "";

var num_dec_sep = ","; //decimal separator
var num_dec_sep_tmp = ""; 
var num_dec_force = false;
var num_tho_sep = "."; //thousands separator
var num_tho_sep_tmp = ".";

var num_dec_qty = 2; //decimal quantity to show
var num_dec_qty_tmp = 0;

var num_max_val = 100000000000; //maximun number allowed
var num_max_val_fix = true;
var num_max_val_tmp = 0;

var get_number_errmsg = "";
// END GLOBAL DEFAULT NUMBER VALUES CHILEAN FORMAT

// GLOBAL DEFAULT DATE FORMAT
var date_format = "cl";
// END GLOBAL DEFAULT DATE FORMAT

var radio_sel_item = null;

var debug_value = false;

var BrowserDetect;

var menu_ids = new Array;
var menu_cat_ids = new Array;

var gallery_current_pos = 0;
var ns4 = false;
var op5 = false;


function switch_menu_display(menuid){

	open_ele = false;
	if (menuid>=0){
		obj = get_object("menuid_" + menuid);	
		if (obj.style.display=="none") open_ele = true;
	}
	
	for (i=0; i<menu_ids.length; i++){
		
		obj = get_object("menuid_" + menu_ids[i]);
		obj.style.display = "none";
		
	}
	
	if (open_ele){
		obj = get_object("menuid_" + menuid);	
		obj.style.display = "";
	}
	//alert(menu_ids.length);	
	
}

function switch_menu_cat_display(menucatid){

	switch_menu_display(-1);

	open_ele = false;
	obj = get_object("menucatid_" + menucatid);	
	if (obj.style.display=="none") open_ele = true;
	
	for (i=0; i<menu_cat_ids.length; i++){
		
		obj = get_object("menucatid_" + menu_cat_ids[i]);
		obj.style.display = "none";
		
	}
	
	if (open_ele){
		obj = get_object("menucatid_" + menucatid);	
		obj.style.display = "";
	}
	//alert(menu_ids.length);	
	
}

function manage_category(menuid, manage_type, value){
	
	objForm = get_object("menuform_" + menuid);
	objForm.manage_type.value = manage_type;
	
	if (manage_type=="sort"){
		objForm.sort_to.value = value;
		return true;
	}
	
	if (manage_type=="delete"){
		if (confirm("Confirme que quiere eliminar este elemento")) return true;
		else return false;
	}
	

	return false;
	
}

function show_image_popup(filename,folder){
	
	if(isUndefined(folder)) folder = "galleries";
	
	var url = "image_view.php?name=" + filename + "&folder=" + folder;
	
	newWin = window.open(url,'iv','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550,top=10,left=10');
	newWin.focus();

}


function get_object(theid){
	the_obj = document.getElementById(theid);
	return the_obj;
}


function scrollGallery(direction){
	
	gallery = document.getElementById("cont_gallery");
	gallery_table_width = parseInt(getElementWidth("table_gallery"));
	gallery_div_width = parseInt(gallery.style.width)+9;		

	if (direction=="left" && gallery_current_pos>0){
		gallery.scrollLeft = gallery.scrollLeft - gallery_div_width;			
	}
	
	right_extra = Math.abs(gallery_table_width - gallery_current_pos);
	//alert(val);
	
	if (direction=="right" && right_extra>100){
		gallery.scrollLeft = gallery.scrollLeft + gallery_div_width;				

	}
	
	gallery_current_pos = gallery.scrollLeft + gallery_div_width;
	//alert(gallery_table_width + "\n" + gallery_current_pos);
	
}

function getElementHeight(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.height;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) { 
			xPos = elem.style.pixelHeight;
		} else {
			xPos = elem.offsetHeight;
		}
		return xPos;
	} 
}

function getElementWidth(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.width;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) {
			xPos = elem.style.pixelWidth;
		} else {
			xPos = elem.offsetWidth;
		}
		return xPos;
	}
}


function getStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	return strValue;
}
	
//this function returns a number as a field value or just the value depending
//on the argument data type
function get_number(thedata) { //thedata could be a field or a number

	var isField;
	
	var retval = 0;

	get_number_errmsg = ""; //resets error msg each time flow gets in

	if (isObject(thedata)){
		isField = true;
		num_val = thedata.value;
	}else{
		isField = false;
		num_val = thedata;
	}
	
	dec_qty = num_dec_qty;

	//formats the value removing some characters
	var regexp = / /g;
	num_val = num_val.replace(regexp,""); // remove spaces

	if (num_format=="cl"){
		var regexp = /\./g;
		num_val = num_val.replace(regexp,""); //remove dots
	
		var regexp = /,/g;
		num_val = num_val.replace(regexp,"."); //replace comma per dot

	}else{
		var regexp = /,/g;
		num_val = num_val.replace(regexp,""); // remove commas
	}
	//end formats the value 
	
	var num_val2 = parseFloat(num_val);

	if (num_val != "") {
		var doubledec = /\.\./g; // check for double decimals
		var singledec = /\./g; // check for multiple single decimals
		var singleCount = 0;
		singleResult = num_val.match(singledec);
		if (singleResult) { singleCount=singleResult.length }
		if (num_val.match(doubledec) || singleCount>1 || isNaN(num_val2)){
			retval = 0;
			get_number_errmsg = "nan";
		} else {
			if (num_val2 >= num_max_val) {
				if (num_max_val_fix){
					retval = num_max_val-1;
				}else{
					retval = 0;
				}
				get_number_errmsg = "overloaded";
			}else{
				num_val2 = round_number(num_val2);
			}
			if (isNaN(num_val2)) num_val2 = 0;
			retval = num_val2;
		}
	}

	if (isField){
		thedata.value = retval;
	}

	return retval;

}


function round_number(num_val){
	//alert(num_val);
	
	var str = "" + Math.round(eval(num_val) * Math.pow(10,num_dec_qty));
	while (str.length <= num_dec_qty) { str = "0" + str; }
	var decPoint = str.length - num_dec_qty;
	if (num_dec_qty > 0) { // format number with decimal
		decPart = str.substring(decPoint,str.length);
		decPartZero = "";
		for(i=1;i<=num_dec_qty;i++) decPartZero = decPartZero + "0";
		if (!num_dec_force && (decPart==decPartZero)){
			num_val = str.substring(0,decPoint);
		}else{
			num_val = str.substring(0,decPoint) + "." + decPart;
		}
	}else{
		num_val = str.substring(0,decPoint);
	}
	
	return num_val;
}


function format_number(num_val, hide_thousands_sep){
	
	fn = num_val;
	
	if (isUndefined(hide_thousands_sep) || !hide_thousands_sep){
		fn = format_us(num_val);
	}
	
	if (num_format=="cl"){
		var regexp = /\./g;
		fn = fn.replace(regexp,";"); //replace dot per semi-colon	
		var regexp = /,/g;
		fn = fn.replace(regexp,"."); //replace comma per dot
		var regexp = /\;/g;
		fn = fn.replace(regexp,","); //replace semi-colon per comma		
	}
	return fn;	
}

function format_us(SS){
	var T='', S=String(SS), L=S.length-1, C, j, P = S.indexOf('.')-1;
	if (P<0) P=L;
		for (j=0; j<=L; j++) {
		T+=C=S.charAt(j);
		if ((j < P) && ((P-j)%3 == 0) && (C != '-')) T+=',';
	}
	return T;
}

function get_date(thedata,strict){ //thedata could be a field or a number

	var isField;

	if (isObject(thedata)){
		isField = true;
		value = thedata.value;
	}else{
		isField = false;
		value = thedata;
	}



	value = new String(value);
	if (value.length<1){
		if (isField) thedata.value = "";
		return false; //si no hay string sale
	}

	value = value.replace(/\//gi, "-");	//se reemplazan / por -
	tmp = value.split("-");
	
	if (tmp.length!=3){
		if (isField) thedata.value = "";
		return false; //sale si no hay 3 elementos en el string
	}

	if (date_format=="cl"){
		dia = parseInt(get_number(tmp[0])); mes = parseInt(get_number(tmp[1])); anio = parseInt(get_number(tmp[2]));	
	}else if(date_format=="us"){
		mes = parseInt(get_number(tmp[0])); dia = parseInt(get_number(tmp[1])); anio = parseInt(get_number(tmp[2]));	
	}
	
	//se corrige un eventual uso de menos digitos en el anio
	tmpanio = new String(anio);	if (tmpanio.length==1) anio = parseInt("200"+anio); if (tmpanio.length==2) anio = parseInt("20"+anio);
	
	db_user_date = new String(anio + "-" + mes + "-" + dia).substr(0);
	
	//se genera un objeto date para procesar la fecha
	proc_date = new Date(anio,mes-1,dia);
	db_proc_date = new String(proc_date.getFullYear() + "-" + (proc_date.getMonth()+1) + "-" + proc_date.getDate()).substr(0);
	
	if (strict==true || isUndefined(strict)){
		if (db_user_date!=db_proc_date){
			if (isField) thedata.value = "";
			return false;
		}
	}else{
		anio = proc_date.getFullYear(); mes = (proc_date.getMonth()+1); dia = proc_date.getDate();
	}
	
	dia = new String(dia); mes = new String(mes); anio = new String(anio);
	if (dia.length==1) dia = "0" + dia; if (mes.length==1) mes = "0" + mes;
	
	if (date_format=="cl"){
		ret_date = dia + "-" + mes + "-" + anio;
	}else if(date_format=="us"){
		ret_date = mes + "-" + dia + "-" + anio;
	}

	if (isField){
		thedata.value = ret_date;
	}
	
	return ret_date;
	
}


//FUNCION QUE DEVUEVLE LA HORA EN FORMATO 24hrs
function get_time(thedata,ampm,strict){ //thedata could be a field or a number

	if (isObject(thedata)){
		isField = true;
		value = thedata.value;
	}else{
		isField = false;
		value = thedata;
	}
	
	if (!isUndefined(ampm)) ampm = new String(ampm).toLowerCase();
	else ampm = "";
	

	value = new String(value);
	if (value.length<1){
		if (isField) thedata.value = "";
		return false; //si no hay string sale
	}
	
	tmp = value.split(":");
	
	if (tmp.length!=2){
		if (isField) thedata.value = "";
		return false; //sale si no hay 2 elementos en el string
	}

	horas = parseInt(get_number(tmp[0])); minutos = parseInt(get_number(tmp[1]));
	
	if (!isNumber(horas) || !isNumber(minutos)){
		if (isField) thedata.value = "";
		return false; //si no hay string sale
	}
	
	//formateo de AM-PM
	if (ampm=="am"){
		if (horas==12) horas=0;	
	}
	if (ampm=="pm"){
		if (horas!=12){
			horas = horas + 12;	
		}
	}
	
	if (horas<0 || horas>23 || minutos<0 || minutos>60){
		if (isField) thedata.value = "";
		return false; //si no hay string sale
	}
	
	horas = new String(horas); minutos = new String(minutos);
	if (horas.length==1) horas = "0" + horas; if (minutos.length==1) minutos = "0" + minutos;
	
	ret_date = new String(horas + ":" + minutos).substr(0);
	
	if (isField){
		thedata.value = ret_date;
	}
	
	return ret_date;
	
}

function get_diff_hours(value,round_value){

	ms_per_hour = 60000 * 60;
	dh = value / ms_per_hour;
	
	if (!isUndefined(round_value) && round_value==true){
		dhInt = parseInt(dh);
		if (dhInt!=dh){
			fr_part_sum = 0;
			fr_part = dh - dhInt;
			if (fr_part>0 && fr_part<0.25) fr_part_sum = 0.0;
			if (fr_part>=0.25 && fr_part<0.75) fr_part_sum = 0.5;
			if (fr_part>=0.75 && fr_part<1) fr_part_sum = 1.0;
			dh = dhInt + fr_part_sum;
		}
		
	}
	
	
	return dh;
}

function radio_disabled(obj_name){
	var obj = document.getElementsByName(obj_name);	
	if (!isObject(obj)) return false;

	num = obj.length;
	
	for (i=0;i<num;i++){
		obj[i].disabled = true;
	}
	
}

function radio_enabled(obj_name){
	var obj = document.getElementsByName(obj_name);	
	if (!isObject(obj)) return false;

	num = obj.length;
	
	for (i=0;i<num;i++){
		obj[i].disabled = false;
	}
}


function radio_readonly(obj_name){

	var obj = document.getElementsByName(obj_name);	
	if (!isObject(obj)) return false;

	num = obj.length;
	
	for (i=0;i<num;i++){
		if (obj[i].checked){
			selindex = i;
		}
	}
	obj[selindex].checked = true;
	
	radio_sel_item = selindex;

	if (BrowserDetect.browser=="Explorer" && !isNull(radio_sel_item)){

		document.focus();		
	}

}

function radio_readonly_restore(obj_name){

	if (BrowserDetect.browser=="Explorer" && !isNull(radio_sel_item)){
		obj[radio_sel_item].checked = true;			
	}

	return false;
}

function radio_get_value(ctrl){
	
	if (isUndefined(ctrl.length) && ctrl.type=="radio"){
		ctrlname = ctrl.name;
		frm = ctrl.form;
		frmname = frm.name;
		eval("ctrl = document." + frmname + "." + ctrlname + ";");
	}
	
	for(i=0;i<ctrl.length;i++)
		if(ctrl[i].checked) return ctrl[i].value;
	
	return "";
}

function basename(path, suffix) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ash Searle (http://hexmen.com/blog/)
    // +   improved by: Lincoln Ramsay
    // +   improved by: djmix
    // *     example 1: basename('/www/site/home.htm', '.htm');
    // *     returns 1: 'home'
 
    var b = path.replace(/^.*[\/\\]/g, '');
    if (typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix){
        b = b.substr(0, b.length-suffix.length);
    }
    return b;
}


function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}
function isBoolean(a) {
    return typeof a == 'boolean';
}
function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}
function isFunction(a) {
    return typeof a == 'function';
}
function isNull(a) {
    return typeof a == 'object' && !a;
}
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}
function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}
function isString(a) {
    return typeof a == 'string';
}
function isUndefined(a) {
    return typeof a == 'undefined';
}


String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
String.prototype.reverse = function() {
    var s = "";
    var i = this.length;
    while (i>0) {
        s += this.substring(i-1,i);
        i--;
    }
    return s;
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();
