﻿var openedWindow = null;

function testCookies() {
    if (skipCookieTest)
        return undefined;
    var r = navigator.cookieEnabled;
    if (typeof r == "undefined")
        r = $.cookies.test();
    return r;
}

function createNavForm(params) {
    var form = document.getElementById("_formNav");
    if (!form) {
        form = document.createElement("form");
        form.id = "_formNav";
        form.method = "POST";
        document.body.appendChild(form);
    } else {
        form.innerHTML = "";
        form.target = "_self";
        form.action = "";
    }
    for (paramName in params) {
        if (typeof (params[paramName]) != "undefined") {
            var input = document.createElement("input");
            input.name = paramName;
            input.value = params[paramName];
            input.type = "hidden";
            form.appendChild(input);
        }
    }
    return form;
}

function open_url(url) {
    if (url === '')
        return;
    var arrURL = url.split('?');
    if (arrURL.length > 1) {
        var param, params=new Object();
        var arrParams = arrURL[1].split("&");
        for (var i = 0; i < arrParams.length; i++) {
            param = arrParams[i].split("=");
            if (param.length > 2)
                params[param[0]] = param.splice(1).join("=");
            else if (param.length > 1)
                params[param[0]] = param[1];
            else
                params[param[0]] = "";
        }
        openPage(arrURL[0], params);
    } else {
        openPage(arrURL[0]);
    }
}

function open_page(strParams, strTarget)/*This function is depricated. Use openPage instead*/
{

    var params;
    if (strParams !== '') {
        var paramPair, paramPairs;
        params = new Object();
        paramPairs = strParams.split('|**|');
        for (var i = 0; i < paramPairs.length; i++) {
            paramPair = paramPairs[i].split('=');
            params[paramPair[0]] = paramPair[1];
        }
    }
    openPage(strTarget, params);
}

function openPage(query, postParams, target) {
    if (typeof (postParams) == "undefined") {
        window.location.assign(query);
    } else {
        var form = createNavForm(postParams);
        form.action = query;
        if (typeof (target) != "undefined") form.target = target;
        form.submit();
    }
}

// Getting the formatted currency string value
// input=string/number output=formatted string 
function my_format_currency(num, flag) {
    var my_number = 0.0, strNumber, i;
    var decimal_places = $eSRO.decimalPlaces;
    my_number = parseFloat(num);
    strNumber = my_number.toString(10);

    if (strNumber.indexOf('.') > 0) {
        var mPlace, mLen, mCount;
        mPlace = strNumber.indexOf('.');
        mLen = strNumber.length;
        mCount = mLen - mPlace - 1;
        if (mCount < decimal_places) {
            for (i = mCount; i < decimal_places; i++)
                strNumber += '0';
        } else if (mCount > decimal_places) {
            if (typeof (flag) == 'undefined') {
                strNumber = round(num).toString(10);
                strNumber = my_format_currency(strNumber, true);
            } else {
                strNumber = strNumber.substring(0, strNumber.indexOf('.') + decimal_places);
            }
        }
        strNumber = strNumber.replace('.', $eSRO.decimalSeparator);
    }
    else {
        if (decimal_places > 0) {
            strNumber += $eSRO.decimalSeparator;
            for (i = 0; i < decimal_places; i++)
                strNumber += '0';
        }
    }

    return strNumber;

}

function FormatCurrency(num) {
    if (isNaN(num))
        throw num + ' is NaN';
    num = round(num);
    var isNegative = num < 0;
    num = Math.abs(num);
    var fixed = Math.floor(num);
    var remainder = "";
    if (num > fixed) {
        remainder= new String(num);
        remainder = remainder.substr((new String(fixed)).length + 1, $eSRO.decimalPlaces);
    }
    while (remainder.length < $eSRO.decimalPlaces)
        remainder += '0';
    
    return  $eSRO.defaultCurrencySign + (isNegative ? '-' : '') + fixed + $eSRO.decimalSeparator + remainder;
}

//eXtended function for parsing float numbers from strings with comma as a decimal separator
function parseFloatX(str) {
    return parseFloat(str.toString().replace($eSRO.decimalSeparator, '.'));
}

function round(num) {
    var dec = Math.pow(10, $eSRO.decimalPlaces);
    return Math.round(num * dec) / dec;
}

function open_popup(strParams, strTarget, mTop, mLeft, mWidth, mHeight) {
    var params, frmPP;

    if (strTarget === '')
        return;

    if (openedWindow !== null) {
        try {
            openedWindow.close();
        }
        catch (e) {
            openedWindow = null;
        }
    }

    params = "top=" + mTop + ",left=" + mLeft + ",height=" + mHeight + ",width=" + mWidth + ",status=no,toolbar=no,menubar=no,location=no,center=1";
    var args=new Object();
    if (typeof (strParams) == "string") {
        arrParams = strParams.split('|**|');
        var arg;
        for (var i = 0; i < arrParams.length; i++) {
            arg = arrParams[i].split("=");
            args[arg[0]] = arg[1];
        }
        if (strParams !== '')
            args['H'] = mHeight;
    } else {
        args = strParams;
    } 
    
    frmPP = createNavForm(args);
    frmPP.action = strTarget;
    
    try {
        if (window.parent.name == 'eSRO_Opened') {
            openedWindow = window.open('', 'eSRO_Opened_1', params);
            frmPP.target = 'eSRO_Opened_1';

        }
        else {
            openedWindow = window.open('', 'eSRO_Opened', params);
            frmPP.target = 'eSRO_Opened';
        }
    }
    catch (e) {
        openedWindow = window.open('', 'eSRO_Opened', params);
        frmPP.target = 'eSRO_Opened';
    }
    frmPP.submit();
}
function addEventHandler(target, handler, type, IEtype) {
    if (target.attachEvent) {
        if (typeof (IEtype) != 'undefined') type = IEtype;
        target.attachEvent(type, handler);
    } else if (target.addEventListener) {
        target.addEventListener(type, handler, false);
    } else
        return false;
    return true;
}


function makeXMLHttpObj() {
    var xmlHttp = null;
    if (window.XMLHttpRequest) { // If IE7, Mozilla, Safari, and so on: Use native object 
        xmlHttp = new XMLHttpRequest();
    } else {
        if (window.ActiveXObject) { // ...otherwise, use the ActiveX control for IE5.x and IE6
            var ARR_ACTIVEX = ["MSXML2.XMLHttp.5.0",
                    "MSXML2.XMLHttp.4.0",
                    "MSXML2.XMLHttp.3.0",
                    "MSXML2.XMLHttp",
                    "Microsoft.XMLHttp"];
            var bFound = false;
            for (i = 0; i < ARR_ACTIVEX.length && !bFound; i++) {
                try {
                    xmlHttp = new ActiveXObject(ARR_ACTIVEX[i]);
                    bFound = true;
                }
                catch (e) {
                }
            }
        }
    }
    return xmlHttp;
}
function trimString(str) {
    return str.replace(/^\s*/, "").replace(/\s*$/, "");
}

function invalidateField(fieldToInvalidate) //TODO: move to details_forms_functions
{
    if (fieldToInvalidate.type.toLowerCase() == "text") {
        fieldToInvalidate.style.backgroundColor = "#fdff73";
    }
}

function validateField(fieldToValidate) //TODO: move to details_forms_functions
{
    if (fieldToValidate.type.toLowerCase() == "text") {
        fieldToValidate.style.backgroundColor = "";
    }
}

function popupDialog(url, data, dialogOptions, ajaxCallback) {
    var dlg = $("<div><table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr><td valign=\"middle\" align=\"center\" class=\"small_text_b\"><img src=\"images/roller.gif\" class=\"roller\"></td></tr></table></div>");   //TODO: Get caption for Please Wait
    dlg.dialog(dialogOptions);
    applyStyle.call(dlg.parent());
    var callback = ajaxCallback || onComplete;
    dlg.load(url, data,
        function(response, status, xhr) {
            applyStyle.call(dlg);
            callback.apply(dlg, arguments);
        }
    );

    function onComplete(response, status, xhr) {
        if (status != "success") {
            $debug.log(arguments);
            this.text(response);
            //dlg.dialog("close");
        }
    }
    return dlg;
}

function popupFormDialog(url, data, title, btnOk, btnCancel) {
    var form;
    var dlgButtons = new Array();
    if (typeof (btnOk) != 'undefined' && btnOk !== null) {
        dlgButtons[dlgButtons.length] = {
            text: btnOk.text,
            click: function() {
                if (validateAllFields(form) && (!btnOk.click || btnOk.click())) {
                    dlg.dialog("close");
                }
            }
        };
    }
    if (typeof (btnCancel) != 'undefined' && btnCancel !== null) {
        dlgButtons[dlgButtons.length] = {
            text: btnCancel.text,
            click: function() {
                if (!btnCancel.click || btnCancel.click()) {
                    dlg.dialog("close");
                }
            }
        };
    }
    
    function onOpened(response,status,xhr){
        if (status != "success") {
            this.text(response);
        }
        else {
            form = this.find("form")[0];
            if (form)
                attachValidators(form);
        }
    }
    
    function onClose(){
        dlg.dialog("destroy");
        dlg.remove();
    }

    var dlgParams = { title: title, close: onClose, buttons: dlgButtons };
    var dlg = popupDialog(url, data, dlgParams, onOpened);
    return dlg;
}

function popUpIframeDialog(src, title, okTitle, height, width) {
    var dlgButtons = [{
        text: okTitle,
        click: function() {
            dlg.dialog("close");
        }
    }];
    var dlgParams = { title: title, buttons: dlgButtons, height: height, width: width };
    var dlg = $("<iframe frameborder='0' src='{0}' />".format(src));
    dlg.dialog(dlgParams);
}

var $debug = {
    log: function(logStr) {
        window.console && window.console.log(logStr);
    },
    warn: function(warnStr) {
        window.console && window.console.warn(warnStr);
    },
    error: function(errStr) {
        window.console && window.console.error(errStr);
    },
    info: (typeof ($debugInfo) != "undefined" ? $debugInfo : undefined)
};

function logAjaxError(xhr) {
    $debug.error("XHR Error:{0}\n{1}".format( xhr.responseText, decodeURIComponent(xhr.getResponseHeader("X-Esro-Error"))));
}

(function($) {
    var methods = {
        queryParams: function(param) {
            var params = new Object();
            if (document.location.search.length > 0) {
                var a = document.location.search.substr(1).split('&');
                for (var i = 0; i < a.length; i++) {
                    var e = a[i].split('=', 2);
                    params[e[0]] = (e.length == 2 ? decodeURIComponent(e[1]) : "");
                }
            }
            if (param == undefined)
                return params;
            else
                return params[param];
        },
        search: function(param) {
            if (param == undefined)
                return document.location.search;
            else {
                document.location.search = "?" + $.param(param);
                return undefined;
            }
        },
        extendQuery: function(param) {
            var r = methods.serializeParams(update(methods.queryParams(), param));
            return r.length > 0 ? "?" + r : r;
        },
        serializeParams: function(params) {
            var s = [];
            for (var name in params) {
                s[s.length] = encodeURIComponent(name) + (params[name] === undefined ? "" : "=" + encodeURIComponent(params[name]));
            }
            return s.join("&").replace(/%20/g, "+");
        }
    };

    $.fn.location = function(method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            //} else if (typeof method === 'object' || !method) {
            //    return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.location');
        }
    };

    function update(oOld, oNew) {
        for (var m in oNew) {
            if (oNew[m] === null) {
                delete oOld[m];
            } else {
                oOld[m] = oNew[m];
            }
        }
        return oOld;
    }
})(jQuery);

jQuery.fn.center = function() {
    this.css("position", "absolute");
    this.css("top", (($(window).height() - this.outerHeight()) / 2) + $(window).scrollTop() + "px");
    this.css("left", (($(window).width() - this.outerWidth()) / 2) + $(window).scrollLeft() + "px");
    return this;
}
