﻿function $(id)
{
    return document.getElementById(id);
}

function $$(obj, tag)
{
    return (obj ? obj.getElementsByTagName(tag) : null);
}

function message(message, options)
{
    var msg = $("AlertMessage");
    
    if(!msg)
    {
        msg = document.createElement("div");
        msg.id = "AlertMessage";
        document.body.appendChild(msg);
    }
    
    msg.innerHTML = "";

    msg.appendChild(document.createElement("div")).innerHTML = message;

    var buttonPanel = msg.appendChild(document.createElement("div"));

    buttonPanel.style.marginTop = "20px";
    buttonPanel.style.textAlign = "center";

    if(options)
    {
        for(var property in options)
        {
            var button = document.createElement("input");

            button.type = "button";
            button.value = property;
            button.className = "Button";
            
            if(options[property] == "{CANCEL}")
            {
                button.onclick = function()
                {
                    document.body.removeChild($("AlertMessage"));
                }
            }
            else
            {
                button.__clickEvent = options[property];
                button.onclick = function()
                {
                    this.__clickEvent();
                    document.body.removeChild($("AlertMessage"));
                }
            }

            buttonPanel.appendChild(button);
            buttonPanel.appendChild(document.createTextNode(" "));
        }
    }
    else
    {
        var button = document.createElement("input");

        button.type = "button";
        button.value = "ok";
        button.className = "Button";
        button.onclick = function()
        {
            document.body.removeChild($("AlertMessage"));
        }

        buttonPanel.appendChild(button);
    }
    
    var size = getBrowserSize();
    
    msg.style.position = "absolute";
    msg.style.width = "300px";
    msg.style.left = (size.width / 2 - msg.offsetWidth / 2 + getScrollX()) + "px";
    msg.style.top = (size.height / 2 - msg.offsetHeight / 2 + getScrollY()) + "px";
}

function getScrollX()
{
    var x = 0;
    
    if(typeof(window.pageYOffset) == "number")
    {
        //Netscape compliant
        x = window.pageXOffset;
    }
    else if(document.body && (document.body.scrollLeft || document.body.scrollTop))
    {
        //DOM compliant
        x = document.body.scrollLeft;
    }
    else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
    {
        //IE6 standards compliant mode
        x = document.documentElement.scrollLeft;
    }
    return x;
}

function getScrollY()
{
    var y = 0;

    if(typeof(window.pageYOffset) == "number")
    {
        //Netscape compliant
        y = window.pageYOffset;
    }
    else if(document.body && (document.body.scrollLeft || document.body.scrollTop))
    {
        //DOM compliant
        y = document.body.scrollTop;
    }
    else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
    {
        //IE6 standards compliant mode
        y = document.documentElement.scrollTop;
    }

    return y;
}

function getBrowserSize()
{
    if(window.innerWidth)
        return { width:window.innerWidth, height:window.innerHeight };
    else if(document.documentElement.clientWidth)
        return { width:document.documentElement.clientWidth, height:document.documentElement.clientHeight };
    else if(document.body.offsetWidth)
        return { width:document.body.offsetWidth, height:document.body.offsetHeight };
    else
        return { width:null, height:null };
}

function ajaxSubmitForm(form, url, frameId, callback, debug)
{
    // Create HTTP POST frame
    var frameHolder = document.createElement("div");
    
    frameHolder.innerHTML = "<iframe id=\"" + frameId + "\" name=\"" + frameId + "\"></iframe>";
    
    if(!debug)
    {
        frameHolder.style.width = "1px";
        frameHolder.style.height = "1px";
        frameHolder.style.position = "absolute";
        frameHolder.style.left = "-100px";
        frameHolder.style.overflow = "hidden";
    }

    document.body.appendChild(frameHolder);

    // Setup HTTP POST frame complete event handler.
    var frame = document.getElementById(frameId);

    // IE form loaded function
    frame.onreadystatechange = function()
    {
        if(this.readyState.toString() == "complete")
        {
            var result = "";

            for(var i=0; i<document.frames.length; i++)
            {
                if(document.frames[i].name == frameId)
                {
                    result = document.frames[i].document.body.innerHTML.trim();
                    break;
                }
            }

            if(!debug) document.body.removeChild(frame.parentNode);
            if(typeof callback == "function") callback(result);
        }
    }

    // Others form loaded function
    frame.onload = function()
    {
        var result = this.contentDocument.body.innerHTML.trim();

        function removeUploadFrame()
        {
            if(!debug) document.body.removeChild(frame.parentNode);
            if(typeof callback == "function") callback(result);
        }
        
        setTimeout(removeUploadFrame, 100);
    }

    form.action = url;
    form.target = frameId;
    form.submit();
}

function topPosition(obj)
{
    var top = obj.offsetTop;
    var container = obj.offsetParent;
    
    while(container)
    {
        top += container.offsetTop;
        container = container.offsetParent;
    }
    
    return top;
}

function bottomPosition(obj)
{
    var top = obj.offsetTop;
    var container = obj.offsetParent;
    
    while(container)
    {
        top += container.offsetTop;
        container = container.offsetParent;
    }
    
    return (top + obj.offsetHeight);
}

function leftPosition(obj)
{
    var left = obj.offsetLeft;
    var container = obj.offsetParent;
    
    while(container)
    {
        left += container.offsetLeft;
        container = container.offsetParent;
    }
    
    return left;
}

function rightPosition(obj)
{
    var left = obj.offsetLeft;
    var container = obj.offsetParent;
    
    while(container)
    {
        left += container.offsetLeft;
        container = container.offsetParent;
    }
    
    return (left + obj.offsetWidth);
}

function addEvent(object, eventType, eventFunction)
{
    if (object.attachEvent)
    {
        object["e" + eventType + eventFunction] = eventFunction;
        object[eventType + eventFunction] = function() { object["e" + eventType + eventFunction]( window.event ); };
        object.attachEvent("on" + eventType, object[eventType + eventFunction]);
    }
    else
    {
        object.addEventListener(eventType, eventFunction, false);
    }
}

function removeEvent(object, eventType, eventFunction)
{
    if(object.detachEvent)
    {
        object.detachEvent("on" + eventType, object[eventType + eventFunction]);
        object[eventType + eventFunction] = null;
        object["e" + eventType + eventFunction] = null;
    }
    else
    {
        object.removeEventListener(eventType, eventFunction, false);
    }
}

function addCookie(name, value, days)
{
    var expires = "";
    
    if (days)
    {
	    var date = new Date();
	    date.setTime(date.getTime() + (days*24*60*60*1000));
	    expires = "; expires=" + date.toGMTString();
    }
    else
    {
        expires = "";
    }

    document.cookie = name.trim() + "=" + value.trim() + expires + "; path=/";
}

function getCookie(name)
{
    var nameEQ = name + "=";
    var arr = document.cookie.split(';');

    for(var i=0; i < arr.length; i++)
    {
        var cookie = arr[i].trim();
        var cookiePart = cookie.split('=');
        
        if(cookiePart.length >= 2 && cookiePart[0].trim().toLowerCase() == name.toLowerCase())
        {
            return cookiePart[1].trim();
        }
    }

    return null;
}

function removeCookie(name)
{
	addCookie(name, "", -1);
}

function replaceQueryString(url, name, value)
{
    var urlInfo = url.split("?");
    
    if(urlInfo.length != 2) return urlInfo[0] + "?{0}={1}".format(name, value);
    
    var queries = urlInfo[1].split("&");
    var newQueries = "";
    
    // Try to replace query
    for(var i=0; i<queries.length; i++)
    {
        if(queries[i] && queries[i].length > 0 && !queries[i].toLowerCase().startsWith(name))
        {
            newQueries += "&" + queries[i];
        }
    }
    
    newQueries += "&{0}={1}".format(name, value);
    
    return urlInfo[0] + "?" + (newQueries.length > 1 ? newQueries.substr(1) : "");
}

function showOverlay()
{
    if(document.getElementById("__SS_OVERLAY")) document.body.removeChild(document.getElementById("__SS_OVERLAY"));

    var overlay = document.createElement("div");

    overlay.id = "__SS_OVERLAY";
    overlay.onclick = function()
    {
        if(document.getElementById("__SS_OVERLAY")) document.body.removeChild(document.getElementById("__SS_OVERLAY"));
    }

    // Extend overlay height
    var height = (document.body.offsetHeight > document.documentElement.clientHeight ? document.body.offsetHeight : document.documentElement.clientHeight);
    overlay.style.height = height + "px";


    return document.body.appendChild(overlay);
}

Array.prototype.indexOf = function(object)
{
    for(var i=0; i<this.length; i++)
    {
        if(object == this[i]) return i;
    }
    
    return -1;
}

String.prototype.ltrim = function() 
{
    return this.replace(new RegExp("^[\\s]+", "ig"), "");
}

String.prototype.rtrim = function() 
{
    return this.replace(new RegExp("[\\s]+$", "ig"), "");
}

String.prototype.trim = function()
{
    return this.ltrim().rtrim();
}

String.prototype.startsWith = function(match)
{
    if(match.length == 0 || match.length > this.length) return false;

    return (this.substring(0, match.length) == match);
}

String.prototype.endsWith = function(match)
{
    if(match.length == 0 || match.length > this.length) return false;

    return (this.substring(this.length - match.length) == match);
}

String.prototype.urlEncode = function()
{
    var re = /(\\)/ig;
    
    return escape(this).replace(/\\/, "%5c").replace(/[/]/ig, "%2f");
}

String.prototype.htmlEncode = function()
{
    var div = document.createElement("div");
    var text = document.createTextNode(this);

    document.body.appendChild(div);
    div.appendChild(text);
    
    var text = div.innerHTML;
    
    document.body.removeChild(div);
    
    return text;
}

String.prototype.toInt = function()
{
    return parseInt(this);
}

String.prototype.toFloat = function()
{
    return parseFloat(this);
}

String.prototype.format = function()
{
    var formatted = this;
    
    for(var i=0; i<arguments.length; i++)
    {
        formatted = formatted.replace(new RegExp("[{][" + i + "][}]", "ig"), arguments[i]);
    }
    
    return formatted;
}