/** UI helper functions
 *  Using: YUI
 */
var Dom = YAHOO.util.Dom;

/*var is_numeric = function(strString) {
    //  check for valid numeric strings	
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;
 
    if (strString.length == 0) return false;
 
    //  test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++) {
        strChar = strString.charAt(i);
        if (strValidChars.indexOf(strChar) == -1) {
            blnResult = false;
        }
    }
    return blnResult;
};*/
// String trim function prototypes
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+$/,"");
}

var is_numeric = function(str) {
    if (/^[-\d]+$/.test(str)) {
        return true;
    }
    return false;
};

var is_array = function(obj) {
    if (obj == null || obj.constructor.toString().indexOf("Array") == -1) {
        return false;
    }
    return true;
};

var numberFormatHelper = function(nStr, sSep) {
    if (nStr == null) {
        return null;
    }
    else if (is_numeric(nStr)) {
        nStr += '';
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? '.' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1))
            x1 = x1.replace(rgx, '$1' + sSep + '$2');
        return x1 + x2;
    }

    return null;
};

var numberFormat = function(nStr){
    return numberFormatHelper(nStr, " ");
};

var formatCheckBox = function(elCell, oRecord, oColumn, oData) {
    var _selectedAttrib = "";
    if (oData == 1) {
        _selectedAttrib = " checked=\"true\"";
    }
    elCell.innerHTML = "<input type=\"checkbox\" disabled=\"true\"" + _selectedAttrib + "></input>";
};
var formatNumeric = function(elCell, oRecord, oColumn, oData) {
    var _selectedAttrib = "";
    var _value = numberFormat(oData);
    if (_value == null) {
        _value = "";
    }
    elCell.innerHTML = "<div style=\"text-align: right; width: 100%;\">" + _value + "</div>";
};
var formatNumeric_NF = function(elCell, oRecord, oColumn, oData) {
    var _selectedAttrib = "";
    var _value = oData;
    if (_value == null) {
        _value = "";
    }
    elCell.innerHTML = "<div style=\"text-align: right; width: 100%;\">" + _value + "</div>";
};
var htmlSelectValue = function(oHTMLSelect, val) {
    for (i = 0; i < oHTMLSelect.options.length; i++) {
        oHTMLSelect.options[i].selected = (oHTMLSelect.options[i].value == val);
    }
};

if (YAHOO.widget.Calendar) {
    // Override default YUI calendar config
    var calendarMonthsShort = ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"];
    var calendarMonthsLong = ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"];
    var calendarDays1Char = ["S", "M", "T", "O", "T", "F", "L"];
    var calendarDaysShort = ["S&oslash;", "Ma", "Ti", "On", "To", "Fr", "L&oslash;"];
    var calendarDaysMedium = ["S&oslash;n", "Man", "Tir", "Ons", "Tor", "Fre", "L&oslash;r"];
    var calendarDaysLong = ["S&oslash;ndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "L&oslash;rdag"];
    
    // Database friendly date formatting 
    YAHOO.widget.Calendar._DEFAULT_CONFIG.DATE_FIELD_DELIMITER.value = "-";
    YAHOO.widget.Calendar._DEFAULT_CONFIG.DATE_RANGE_DELIMITER.value = "_";
    YAHOO.widget.Calendar._DEFAULT_CONFIG.DATE_DELIMITER.value = ",";
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MDY_DAY_POSITION.value = 3;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MDY_MONTH_POSITION.value = 2;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MDY_YEAR_POSITION.value = 1;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MD_DAY_POSITION.value = 3;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MD_MONTH_POSITION.value = 2;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MY_MONTH_POSITION.value = 2;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MY_YEAR_POSITION.value = 1;
    // Date labels for Norwegian locale 
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MONTHS_SHORT.value = calendarMonthsShort;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.MONTHS_LONG.value = calendarMonthsLong;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.WEEKDAYS_1CHAR.value = calendarDays1Char;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.WEEKDAYS_SHORT.value = calendarDaysShort;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.WEEKDAYS_MEDIUM.value = calendarDaysMedium;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.WEEKDAYS_LONG.value = calendarDaysLong;
    YAHOO.widget.Calendar._DEFAULT_CONFIG.START_WEEKDAY.value = 1;
}

if (YAHOO.widget.DataTable) {
    var datatableEmpty = "Ingen rader.";
    var datatableError = "FEIL: Kunne ikke laste data!";
    var datatableLoading = "<img src=\"/gfx3/ajax/loading_red_small.gif\" alt=\"Laster\" style=\"float: left; padding-right: 10px; margin-bottom: 4px;\" /> Laster...";
    var datatableSortAsc = "Klikk for &aring; sortere stigende";
    var datatableSortDesc = "Klikk for &aring; sortere synkende";
}

// Uploader vars / settings
var fileID;
var uploaderPost = {
    cmd:"add"
};
var uploaderFF = new Array({description:"Bilder", extensions:"*.jpg;*.png;*.gif"});

// Uploader functions
var uploaderFunc = {
    openDialog: function() {
        Dom.get("progressReport").innerHTML = "";
        Dom.setStyle("progressBar", 'width', '0px');
        uploadPanel.show();
    },
    handleRollOver: function () {
        //Dom.setStyle(Dom.get('selectLink'), 'color', "#FFFFFF");
        //Dom.setStyle(Dom.get('selectLink'), 'background-color', "#000000");
    },
    
    handleRollOut: function() {
        //Dom.setStyle(Dom.get('selectLink'), 'color', "#0000CC");
        //Dom.setStyle(Dom.get('selectLink'), 'background-color', "#FFFFFF");
    },
    
    handleClick: function() {
    },
    
    handleContentReady: function() {
        uploader.setAllowLogging(true);
        uploader.setAllowMultipleFiles(false);
        uploader.setFileFilters(uploaderFF);
    },
    
    upload: function() {
        if (fileID != null) {
            uploader.upload(fileID, "/adm2/func/setdata.php", "POST", uploaderPost);
        }
    },
    
    onFileSelect: function(event) {
        for (var file in event.fileList) {
            if(YAHOO.lang.hasOwnProperty(event.fileList, file)) {
                fileID = event.fileList[file].id;
            }
        }
        
        this.progressReport = document.getElementById("progressReport");
        this.progressBar = document.getElementById("progressBar");
        this.progressReport.innerHTML = "Fil: " + event.fileList[fileID].name;
        Dom.setStyle(this.progressBar, 'width', '0px');
        Dom.get("uploadButton").disabled = false;
    },
    
    onUploadStart: function(event) {
        Dom.setStyle('imgUploading', 'visibility', 'visible');
        this.progressReport.innerHTML = "Starter opplasting...";
        Dom.get("uploadButton").disabled = true;
    },
    
    onUploadProgress: function(event) {
        prog = Math.round(100*(event["bytesLoaded"]/event["bytesTotal"]));
        bar = Math.round(275 * (prog / 100));
        //this.progressReport.value = prog + "% lastet opp...";
        this.progressReport.innerHTML = prog + "% lastet opp...";
        Dom.setStyle('progressBar', 'width', bar + 'px');
    },
    
    onUploadComplete: function(event) {
        Dom.setStyle('imgUploading', 'visibility', 'hidden');
        this.progressReport.innerHTML = "Opplasting ferdig.";
        Dom.setStyle(this.progressBar, 'width', '275px');
    },
    
    onUploadError: function(event) {
        Dom.setStyle('imgUploading', 'visibility', 'hidden');
        this.progressReport.innerHTML = "Feil under opplasting.";
        Dom.setStyle(this.progressBar, 'width', '0px');
    },
    
    onUploadCancel: function(event) {
        Dom.setStyle('imgUploading', 'visibility', 'hidden');
        Dom.setStyle(this.progressBar, 'width', '0px');
    },
    
    onUploadResponse: function(event) {
        if (event.data == "OK") {
            doRefresh(1, 20);
        }
        else {
            YAHOO.log(event.data, "error");
        }
    }
};

// Fix record null fields for IE, Opera etc.
var fixNullFields = function(oRecord) {
    if (oRecord._oData) {
        for (var field in oRecord._oData) {
            if (oRecord._oData[field] == null) {
                oRecord._oData[field] = '';
            }
        }
        return true;
    }
    return false;
};

// Form validation functions
var FormValidation = {
    checkEmail: function(value) {
        if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value)) {
            return true;
        }
        return false;
    },
    checkURL: function(value) {
        //if (/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/.test(value)) {
        //if (/((ftp|http|https):\/\/)?(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/.test(value)) {
        if (/(((ftp|http|https):\/\/)?([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i.test(value)) {
            return true;
        }
        return false;
    },
    checkSubvar: function(value) {
        if (value.length == 5 && is_numeric(value)) {
            var yearpart = value.substr(0,4);
            var issuepart = value.substr(4,1);
            return (yearpart > 1970 && yearpart < 2050 && issuepart > 0);
        }
        else if (value.length == 0) {
            return true;
        }
        return false;
    },
    checkNumeric: function(value) {
        if (/^[-+\d]+$/.test(value)) {
            return true;
        }
        return false;
    },
    checkSelected: function(value, notvalidvalues, validvalues) {
        if (is_array(validvalues)) {
            for (var item in validvalues) {
                if (value == validvalues[item]) {
                    return true;
                }
            }
        }
        else if (is_array(notvalidvalues)) {
            for (var item in notvalidvalues) {
                if (value == notvalidvalues[item]) {
                    return false;
                }
            }
        }
        return true;
    },
    checkChecked: function(value) {
        return (value == true);
    },
    changeFieldValidity: function(target, isvalid, optional) {
        //Dom.removeClass(target, 'field_v');
        Dom.removeClass(target, 'field_nv');
        Dom.removeClass(target, 'field_ok');
        if (optional) {
            Dom.replaceClass(target, 'field_v', (isvalid ? 'field_v' : 'field_nv'));
        }
        else {
            Dom.replaceClass(target, 'field_v', (isvalid ? 'field_ok' : 'field_nv'));
        }
    }
};
