﻿///
/// Copyright © 2009, ayondo GmbH.
/// All rights reserved.
/// http://www.ayondo.com
///
/// Redistribution and use in source and binary forms, with or without
/// modification, is strictly prohibited.
///
Type.registerNamespace("ayondo");

ayondo.Tool = function() {
	ayondo.Tool.initializeBase(this);
	// global definition of regular expressions
	this.RegExp = new Object();
	this.RegExp.Name = /^[A-Za-zßüÜäÄöÖèêèàáâ -]+$/;
	this.RegExp.Text = /^[0-9A-Za-zßüÜäÄöÖ!#$§%&()+,-.:=_?@\/ ]+$/;
	this.RegExp.Plz = /^[a-zA-Z0-9 ]+$/;
	this.RegExp.Credential = /^[0-9A-Za-z!#$§%&()+-.*:=_?]+$/;
	this.RegExp.EMail = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)' + '(\\@)([a-zA-Z0-9\\-\\.]+)' + '(\\.)([a-zA-Z]{2,4})$');
	this.RegExp.MultiLineText = /^[0-9A-Za-zßüÜäÄöÖ!#$§%&()\/+,-.0123456789:=_?@ \n\r]+$/;
}

ayondo.Tool.prototype = {
    initialize: function() {
        ayondo.Tool.callBaseMethod(this, 'initialize');

    },
    /// <summary>
    // subtract timezone offset
    // in: unix timestamp ;  out: local unix timestamp   
    /// </summary>
    subtractTimezoneOffset: function(ts) {
        var to = new Date().getTimezoneOffset();
        ts = new Date(ts * 1000 + to * 60 * 1000);
        var TS = ts.getTime() / 1000;
        return TS;
    },
    /// <summary>
    // create formatted time output from unix timestamp
    /// </summary>
    TS2Time: function(TS) {
        var _d = new Date(this.subtractTimezoneOffset(Number(TS)) * 1000);
        var hours = (_d.getHours() < 10) ? "0" + _d.getHours() : _d.getHours();
        var mins = (_d.getMinutes() < 10) ? "0" + _d.getMinutes() : _d.getMinutes();
        var _t = hours + ":" + mins;
        return _t;
    },
    /// <summary>
    // create formatted date output from unix timestamp
    /// </summary>
    TS2Date: function(TS) {
        var _d = new Date(this.subtractTimezoneOffset(Number(TS)) * 1000);
        var mo = (_d.getMonth() < 9) ? "0" + (1 + _d.getMonth()) : (_d.getMonth() + 1);
        var da = (_d.getDate() < 10) ? "0" + _d.getDate() : _d.getDate();
        var _t = da + "." + mo + "." + _d.getFullYear();
        return _t;
    },
    //==============================================================================================
    /// <summary>
    /// check inputs wether string ist to long or forbidden signs were used
    /// </summary>
    checkInput: function(string, l) {
        var success = true;
        if (string.length < 1 || string.length > l) {
            success = false;
        }
        else if (!string.match(this.RegExp.Text)) {
            success = false;
        }
        return success;
    },
    /// <summary>
    /// check inputs wether string is empty or forbidden signs were used
    /// returns specific error message including forbidden signs when used
    /// </summary>
    checkField: function(_input, _error_id, _check, _length, _tooShortMsg) {
        var success = true;
        if (_error_id != "ErrLabelCity" || _input != "") {
            if (_input.length < _length) {
                this.showError(_error_id, _tooShortMsg);
                success = false;
            } else {
                var inputError = this.checkSignInput(_input, _check);
                if (inputError != "0") {
                    this.showError(_error_id, inputError);
                    success = false;
                }
            }
        }
        if (success) {
            this.hideError(_error_id);
        }
        return success;
    },
    /// <summary>
    /// check inputs on forbidden signs 
    /// returns specific error message including forbidden signs when used
    /// </summary>
    checkFieldOnSigns: function(_input, _error_id, _check) {
        var success = true;
        var inputError = this.checkSignInput(_input, _check);
        if (inputError != "0") {
            this.showError(_error_id, inputError);
            success = false;
        }
        if (success) {
            this.hideError(_error_id);
        }
        return success;
    },
    /// <summary>
    /// display error in error field  under input field
    /// </summary>
    showError: function(_id, _msg) {
        $get(_id).innerHTML = _msg;
        if ($get(_id + "Cell") != null) $get(_id + "Cell").style.height = "15px";
        if ($get(_id) != null) $get(_id).style.height = "15px";
        $get(_id).style.visibility = 'visible';

    },
    /// <summary>
    /// hide error 
    /// </summary>
    hideError: function(_id) {
        Sys.Debug.trace(_id);
        $get(_id).style.visibility = 'hidden';
        if ($get(_id + "Cell") != null) $get(_id + "Cell").style.height = "0px";
        if ($get(_id) != null) $get(_id).style.height = "0px";
    },
    /// <summary>
    /// check string if forbidden signs were used 
    /// returns specific error message including the forbidden signs when used
    /// </summary>
    checkSignInput: function(string, c) {

        var error = "0";
        var forbiddenSigns = [];
        if (c == "name") var re = this.RegExp.Name;
        if (c == "singleline") var re = this.RegExp.Text;
        if (c == "text") var re = this.RegExp.MultiLineText;
        if (c == "credential") var re = this.RegExp.Credential;
        if (c == "plz") var re = this.RegExp.Plz;

        for (var i = 0; i < string.length; i++) {
            var _sign = string;
            if (!string.charAt(i).match(re)) {
                if (!Array.contains(forbiddenSigns, string.charAt(i)))
                    Array.add(forbiddenSigns, string.charAt(i));
            }
        }
        if (forbiddenSigns.length > 0) {
            error = Loc.Dat.Errors.e11 + " ";
            for (var item in forbiddenSigns) {
                error += forbiddenSigns[item] + " ";
            }
        }
        return error;
    },
    /// <summary>
    /// check string if forbidden signs were used 
    /// </summary>
    checkEMail: function(s) {
        var a = false;
        var success = false;
        if (typeof (RegExp) == 'function') {
            var b = new RegExp('abc');
            if (b.test('abc') == true) { a = true; }
        }
        if (a == true) {
            reg = this.RegExp.EMail;
            success = (reg.test(s));
        }
        else {
            success = (s.search('@') >= 1 &&
             s.lastIndexOf('.') > s.search('@') &&
             s.lastIndexOf('.') >= s.length - 5)
        }
        return (success);
    },
    /// <summary>
    /// check string if forbidden signs were used 
    /// </summary>
    checkFinderInput: function(string) {
        var success = true;
        if (!string.match(this.RegExp.Text)) {
            success = false;
        }
        return success;
    },
    /// <summary>
    /// check string wether plz properties were matched or not
    /// </summary>
    checkPLZ: function(string) {
        var success = true;
        if (string != "") {

            if (string.length > 10) {
                success = false;
            }
            else if (!string.match(this.RegExp.Plz)) {
                success = false;
            }
        }
        return success;
    },
    /// <summary>
    /// check comment input for length and forbidden signs
    /// </summary>
    checkComment: function(comment) {
        var Error = false;
        var forbiddenSigns = [];
        if (comment != "") {
            if (comment.length > 160) {
                Error = Loc.Dat.widgets.QuickTrader.error.e8;
            }
            else {
                for (var i = 0; i < comment.length; i++) {
                    var _sign = comment;
                    if (!comment.charAt(i).match(this.RegExp.MultiLineText)) {
                        if (!Array.contains(forbiddenSigns, comment.charAt(i)))
                            Array.add(forbiddenSigns, comment.charAt(i));
                    }
                }
                if (forbiddenSigns.length > 0) {
                    Error = Loc.Dat.Errors.e11 + " ";
                    for (var item in forbiddenSigns) {
                        Error += forbiddenSigns[item] + " ";
                    }
                }
            }
        }
        return Error;
    },
    /// <summary>
    /// unescape Message and replace returns for display in html
    /// </summary>
    clearMessage: function(m, flag) {
        // if (Sys.Browser.agent != Sys.Browser.InternetExplorer) m = unescape(m);
        var _regexp = /%0A/g;
        m = (flag == 1) ? m.replace(_regexp, "\n") : m.replace(_regexp, "<br>");
        _message = unescape(m);
        return _message;
    },

    /// <summary>
    /// check string wether login properties were matched or not
    /// </summary>
    checkLogin: function(string) {
        var success = true;
        if (string.length > 20 || string.length < 5) {
            success = false;
        }
        else if (!string.match(this.RegExp.Credential)) {
            success = false;
        }
        return success;
    },
    /// <summary>
    /// return get parameter with given name
    /// </summary>
    get_url_param: function(name) {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(window.location.href);
        if (results == null) return "";
        else return results[1];
    },
    dispose: function() {
        //Add custom dispose actions here
        ayondo.Tool.callBaseMethod(this, 'dispose');
    },
    /// <summary>
    /// verbose version of $get
    /// </summary>
    getDomElement: function(id) {
        var element = $get(id);
        if ((element == null) || (element == undefined)) {
            Sys.Debug.trace("DOM Element: " + id + " does not exist!");
        }

        return element;
    },
    /// <summary>
    /// verbose version of $get
    /// </summary>
    getScrollXY: function() {
        var scrOfX = 0, scrOfY = 0;

        if (typeof (window.pageYOffset) == 'number') {
            //Netscape compliant
            scrOfY = window.pageYOffset;
            scrOfX = window.pageXOffset;
        } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
            //DOM compliant
            scrOfY = document.body.scrollTop;
            scrOfX = document.body.scrollLeft;
        } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
            //IE6 standards compliant mode
            scrOfY = document.documentElement.scrollTop;
            scrOfX = document.documentElement.scrollLeft;
        }
        return [scrOfX, scrOfY];
    },

    createLoader: function(Holder, Height) {
        if (Holder == null)
            return;

        Holder.innerHTML = "";
        var HolderHeight = Sys.UI.DomElement.getBounds(Holder).height;
        if (Height > 0) HolderHeight = Height - 50;

        var LoaderDiv = document.createElement("DIV");
        LoaderDiv.className = "_loader";
        LoaderDiv.setAttribute("style", "text-align:center");

        var Loader = document.createElement("IMG");
        Loader.src = "Images/ajax-loader.gif";
        Loader.style.marginTop = parseInt(HolderHeight / 2 - 15) + "px";
        LoaderDiv.appendChild(Loader);
        Holder.appendChild(LoaderDiv);
    },

    /// <summary>
    /// create table container
    /// </summary>
    createTable: function(id, rows, cols, width, valignValue, cellpadding) {
        var Table = document.createElement("Table");
        Table.id = id;
        Table.style.borderCollapse = "collapse";
        Table.style.margin = "0px";
        Table.style.padding = "0px";
        Table.style.width = width;
        Table.style.height = "10px";
        var attr = document.createAttribute("cellSpacing");
        attr.nodeValue = 0;
        Table.setAttributeNode(attr);
        attr = document.createAttribute("cellPadding");
        attr.nodeValue = 0;
        Table.setAttributeNode(attr);
        var tbody = document.createElement("tbody");
        tbody.id = id + "_TB";
        for (var i = 0; i < rows; i++) {
            var TR = document.createElement("TR");
            TR.id = id + "_" + i;
            for (var j = 0; j < cols; j++) {
                var TD = document.createElement("TD");
                attr = document.createAttribute("align");
                attr.nodeValue = "left";
                TD.setAttributeNode(attr);
                attr = document.createAttribute("valign");
                attr.nodeValue = valignValue;
                TD.setAttributeNode(attr);
                var cp = Number(cellpadding);
                if (cp > 0) TD.style.padding = cellpadding + "px";
                TD.id = id + "_" + i + "_" + j;
                TR.appendChild(TD);
            }
            tbody.appendChild(TR);
        }
        Table.appendChild(tbody);
        return Table;
    }
}
ayondo.Tool.registerClass('ayondo.Tool', Sys.Component);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
