﻿// Custom selectors
$.extend($.expr[":"], {
    // http://docs.jquery.com/Plugins/Validation/blank
    blank: function(a) { return !$.trim(a.value); },
    // http://docs.jquery.com/Plugins/Validation/filled
    filled: function(a) { return !!$.trim(a.value); },
    // http://docs.jquery.com/Plugins/Validation/unchecked
    unchecked: function(a) { return !a.checked; }
});
$.format = function(source, params) {
    if (arguments.length == 1)
        return function() {
            var args = $.makeArray(arguments);
            args.unshift(source);
            return $.format.apply(this, args);
        };
    if (arguments.length > 2 && params.constructor != Array) {
        params = $.makeArray(arguments).slice(1);
    }
    if (params.constructor != Array) {
        params = [params];
    }
    $.each(params, function(i, n) {
        source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
    });
    return source;
};
/*
Generate fragment of random numbers
*/
jQuery._uuid_default_prefix = '';
jQuery._uuidlet = function() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
/*
Generates random uuid
*/
jQuery.uuid = function(p) {
    if (typeof (p) == 'object' && typeof (p.prefix) == 'string') {
        jQuery._uuid_default_prefix = p.prefix;
    } else {
        p = p || jQuery._uuid_default_prefix || '';
        return (p + jQuery._uuidlet() + jQuery._uuidlet() + "-" + jQuery._uuidlet() + "-" + jQuery._uuidlet() + "-" + jQuery._uuidlet() + "-" + jQuery._uuidlet() + jQuery._uuidlet() + jQuery._uuidlet());
    };
};

IsNullOrUndefined = function(obj) {
    return (typeof (obj) == 'undefined' || obj == null);
};

function getFlashVersion() {
    // ie 
    try {
        try {
            // avoid fp6 minor version lookup issues 
            // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ 
            var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
            try { axo.AllowScriptAccess = 'always'; }
            catch (e) { return '6,0,0'; }
        } catch (e) { }
        return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
        // other browsers 
    } catch (e) {
        try {
            if (navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) {
                return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
            }
        } catch (e) { }
    }
    return '0,0,0';
}

$.getURLParam = 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 null;
    else
        return results[1];

};
EzArray = function(IdField) {
    this.fieldString = "this.items[i]." + IdField;
    this.items = new Array();
    this.Add = function(item) {
        this.items.push(item);
    };
    this.Remove = function(itemId) {

        newArray = new Array();
        for (i = 0; i < this.items.length; i++) {
            if (eval(this.fieldString) != itemId) newArray.push(this.items[i]);
        }
        this.items = newArray;
    };
    this.isEmpty = function() { return this.items.length == 0 };
    this.Contains = function(itemId) {
        for (i = 0; i < this.items.length; i++) {
            if (eval(this.fieldString) == itemId) return true;
        }
        return false;
    };
    this.GetItem = function(itemId) {

        for (i = 0; i < this.items.length; i++) {
            if (eval(this.fieldString) == itemId) return this.items[i];
        }

        return null;

    };
    this.Clear = function() { this.items = new Array(); };
    this.Count = function() { return this.items.length; };
}

var ON_ENTER_PRESS_ATTRIBUTE = "onEnter";
var REMEBER_ME_COOKIE = "RememberEmail";



var StaticMessagesTemplates = {
    Error: "<div class='ui-state-error alertWrapper'><div class='ui-icon ui-icon-alert' style='margin: 0pt 7px 75px 0pt; float: left; height:60%'></div>{0}</div>",
    Loader: "<div class='signInLoader'>{0}</div>",
    Default: "{0}",
    Alert: "<p><div class='ui-icon ui-icon-alert' style='margin: 0pt 7px 75px 0pt; float: left; '></div>{0}</p>",
    Success: "<p><div class='ui-icon ui-icon-circle-check' style='margin: 0pt 7px 75px 0pt; float: left;'></div>{0}</p>"
};

var curDirection;
var DocDirection = function(dir) {

    var direction;
    var reverse;
    if (dir.toLowerCase() == "ltr") {
        direction = "left";
        reverse = "right";
    }
    else {
        direction = "right";
        reverse = "left";
    }

    this.docDirection = direction;
    this.docReverseDirection = reverse;

}


function initDirection() {
    curDirection = new DocDirection($("html").attr("dir"));    
}

var TradingCallPutEnabled = true;
var BalanceThreshold;
function SetBalanceThresholds(threshold) {
    BalanceThreshold = threshold;
    RefreshBalanceThreshold();
}
function RefreshBalanceThreshold() {

    AuthenticationService.getUserDetails(function(result) {

        if (!IsNullOrUndefined(result)) {
            TradingCallPutEnabled = parseInt(result.Balance.replace(",", ''), 10) >= BalanceThreshold;
        }
    });
}


function displayStaticMessage(template, messageContent, width, height, autoClose) {
    var content = $.format(template, messageContent);
    var prefix = "<div id='EZdialog' title='EZtrader' >" + content + "</div>";
    $(prefix).dialog({ modal: true, height: height, title: 'EZTrader', width: width, draggable: true, resizable: false })

    if (!IsNullOrUndefined(autoClose)) setTimeout(function() { $('#EZdialog').dialog('destroy') }, autoClose * 1000);
}
function closeStaticMessage() {

    var dialog = $('#EZdialog');
    if(dialog.length>0) $('#EZdialog').dialog('destroy')
}


function ifEnterPress(evt,obj) {

    var onEnter=$(obj).attr(ON_ENTER_PRESS_ATTRIBUTE)
    if (evt.keyCode == 13) {
        var func = eval(onEnter);
        func.call(obj);
    }
}
function doLogin() {

    var txtUser = $("input[name$='LoginEmail']").val();
    var txtPwd = $("input[name$='LoginPwd']").val();
    var chkRemember = $("#chkRememberMe").attr("checked");
    var form = $("#signInFill");
    var loggingInLoader = $("#signInLoad");
    

    $("#signInFail").hide();
    form.hide();
    loggingInLoader.show();
    $('#signInForm').dialog('option', 'buttons', {})
    Sys.Services.AuthenticationService.login(txtUser, txtPwd,
                                             chkRemember, null,
                                             null, loginCompletedCallback, onLoginFailed, null);



}
function showSignInDialog() {

    var email = GetEmailFromCookie();
    var txtEmail = $("input[name$='LoginEmail']")
    $('#signInForm').dialog('destroy');
    if (!$('#signInForm').dialog('isOpen')) {

        $("#signInFail").hide();
        $('#signInForm').dialog({ modal: true,
            resizable: false,
            width: 330,
            title: 'Login',
            buttons: { "Login": doLogin },
            autoOpen: false
        });

        $('#signInForm').dialog('open');
    }
    $("#signInForm").parent().appendTo($('form'));
    if (!IsNullOrUndefined(email)) {
        txtEmail.val(email);
        $("#chkRememberMe").attr("checked", 'checked');
    }
    txtEmail.focus();
}
function showSignOutDialog() {

    if (!$('#signOutConfirm').dialog('isOpen')) {
        $('#signOutConfirm').dialog({ bgiframe: true,
             modal: true,
            title: 'Logout ?',
            buttons: { "Logout": doLogOut },
            resizable: false
        });
        $('#signOutConfirm').dialog('open');
    }

}


function doLogOut() {

    $('#signOutConfirm').find("p").hide();
    $('#signOutConfirm').dialog('option', 'buttons', {})
    $('#signOutLoad').show();
    Sys.Services.AuthenticationService.logout("Login.aspx?Reason=You%20have%20successfully%20logged%20out", null, onLogoutFailed, null);
}

function logoutCompletedCallback() {

    $('#signOutConfirm').dialog('destroy');
    SetLoggedOutElements();
}

var userDetails = null;
var IS_TRADING_AREA = false;
function loginCompletedCallback(Result, userContext, Method) {
    if (!$('#signInForm').dialog('isOpen')) $('#signInForm').dialog('open');

    var form = $("#signInFill");
    var loggingInLoader = $("#signInLoad");

    //$('#signInForm').dialog('close');
    if (!Result) {
        loggingInLoader.hide();
        loggedIn = false;
        form.show();
        $('#signInForm').dialog('option', 'buttons', { "Login": doLogin });
       
        fillUnsuccessfulLoginReason(); 
        
        $("#signInFail").show();
    }
    else {

        var status = 0;
        AuthenticationService.GetCurrentUserStatus(function(result) {
            status = result;
            DoRedirect(status);
        },
        function() {
            DoRedirect(status);

        });

        
    }

}
function DoRedirect(status) {
    var redirectUrl = GetRedirectUrl(status);
    __doPostBack('login', redirectUrl);

}       
function fillUnsuccessfulLoginReason() {

    var reason='Login Failed, Incorrect email or password';
    var txtUser = $("input[name$='LoginEmail']").val();
    var txtPwd = $("input[name$='LoginPwd']").val();
    AuthenticationService.getLoginFailureReason(txtUser, txtPwd, function(result) {
        $("#signInFailTxt").html(result);
    });
    
   
    
}
function onLogoutFailed() {

    alert("Logout failed due to some exception");
}
function onLoginFailed() {
   
    alert("Login failed due to some exception");
}
function GetRedirectUrl(status) {


    if (status == 4) return "MyAccount.aspx?tab=3";
    var strUrl = document.location.href.toLowerCase();
    if (strUrl.indexOf("trading.aspx") < 0) {

        var targetUrl = $.getURLParam("ReturnUrl");
        if (IsNullOrUndefined(targetUrl)) {
            if (strUrl.indexOf("login") >= 0) {
                return '';
            }
        }
        else {
            var stringsUrl = targetUrl.split("%2f");
            if (!IsNullOrUndefined(stringsUrl) && stringsUrl.length > 0) return stringsUrl[stringsUrl.length - 1];
        }

    }

    return '';

}
function GetEmailFromCookie() {

    return $.cookie(REMEBER_ME_COOKIE)

}
var EMAIL_STATE_AVAILABLE_CLASS = "email-state-available";
var EMAIL_STATE_UNAVAILABLE_CLASS = "email-state-unavailable";
var EMAIL_STATE_CHECKING_CLASS="email-state-checking";
var EMAIL_STATE_AVAILABLE_TEXT="Email Available";
var EMAIL_STATE_UNAVAILABLE_TEXT = "Email Already exists&nbsp;&nbsp;<a href='ForgotPassword.aspx' >Forgot Password?</a>";
var EMAIL_STATE_CHECKING_TEXT = "Checking Email Availability";
var isEmailAvailable = true;
function CheckEmailAvailability(sender,args) {

    var dvAvailability = $("#dvAvailability");
    var AvailabilityTxt = $("#emailStateTxt");
    var email = args.Value;
    dvAvailability.removeClass(EMAIL_STATE_AVAILABLE_CLASS).removeClass(EMAIL_STATE_UNAVAILABLE_CLASS);
    if (!dvAvailability.hasClass(EMAIL_STATE_CHECKING_CLASS)) dvAvailability.addClass(EMAIL_STATE_CHECKING_CLASS);
    AvailabilityTxt.html(EMAIL_STATE_CHECKING_TEXT);
    if (Page_Validators[0].isvalid) {
        dvAvailability.show();
        AuthenticationService.IsEmailAvailable(email, function(result) {
            args.IsValid = result;
            isEmailAvailable = result;
            if (result) {
                dvAvailability.removeClass(EMAIL_STATE_CHECKING_CLASS).addClass(EMAIL_STATE_AVAILABLE_CLASS)
                AvailabilityTxt.html(EMAIL_STATE_AVAILABLE_TEXT);
            }
            else {
                dvAvailability.removeClass(EMAIL_STATE_CHECKING_CLASS).addClass(EMAIL_STATE_UNAVAILABLE_CLASS)
                AvailabilityTxt.html(EMAIL_STATE_UNAVAILABLE_TEXT);
            }
        });

    }
    else {
        dvAvailability.hide();
    }
  
}


function SetLoggedinElements() {

    
    var logInOutBtn = $(".logInOut")
    var dvBalance = $("#divBalance");
    var dvOpenTrades = $("#OpenTrades");
    logInOutBtn.unbind('click', showSignInDialog);
    logInOutBtn.click(showSignOutDialog);
    if (dvBalance.css("display") == 'none') dvBalance.show('slide', { direction: curDirection.docReverseDirection }, 1000)
    if (dvOpenTrades.css("display") == 'none') dvOpenTrades.show('slide', { direction: curDirection.docReverseDirection }, 1000)
    setTopBanner();
    setTooltips()
  


}
function SetLoggedOutElements() {

    var logInOutBtn = $(".logInOut")
    var dvBalance = $("#divBalance");
    var dvOpenTrades = $("#OpenTrades");
    logInOutBtn.unbind('click', showSignOutDialog);
    logInOutBtn.click(showSignInDialog);
    if (dvBalance.css("display") != 'none') dvBalance.hide('slide', { direction: 'right' }, 500)
    /*if (dvOpenTrades.css("display") == 'none') dvOpenTrades.hide('slide', { direction: 'left' }, 1000)*/
    if (dvOpenTrades.css("display") == 'none') dvOpenTrades.hide()
    setTopBanner();
    setTooltips();

}

function setTopBanner() {

    var dvTopBanner = $("#topBan");
    var btnTopBan = $("#btnTopBan");
    var btnWrapper = btnTopBan.parent();
    
    if (btnWrapper.hasClass("ban_close")) {
        btnTopBan.toggle(closeTopBanner, openTopBaner);

        try {
            if (ShowPreviewVideo != null) ShowPreviewVideo();
        } catch (e) { }
    }
    else {
        btnTopBan.toggle(openTopBaner, closeTopBanner);
        try {
            if (HidePreviewVideo != null) HidePreviewVideo();
        }
        catch (e) {  }
    }
}

function closeTopBanner() {

    var dvTopBanner = $("#topBan");
    if (dvTopBanner.css("display") != 'none') $("#topBan").hide();
    var btnTopBan = $("#btnTopBan");
    btnTopBan.html(BannerStatesText.Open);
    btnTopBan.parent().removeClass("ban_close");
    btnTopBan.parent().addClass("ban_open");
    SetBannerStateCookie(btnTopBan.attr("statekey"), 0);
    try {
        if (HidePreviewVideo != null) HidePreviewVideo();
    }
    catch (e) { }
}

function openTopBaner() {
    var dvTopBanner = $("#topBan");
    if (dvTopBanner.css("display") == 'none') $("#topBan").show();
    var btnTopBan = $("#btnTopBan");
    btnTopBan.html(BannerStatesText.Close)
    btnTopBan.parent().removeClass("ban_open");
    btnTopBan.parent().addClass("ban_close");
    SetBannerStateCookie(btnTopBan.attr("statekey"), 1);
    try {
        if (ShowPreviewVideo != null) ShowPreviewVideo();
    } catch (e) { }
}

function SetBannerStateCookie(name, value) {

    var expirationDays =  7;
    var expirationDate = new Date.today().setTimezone('GMT').addDays(expirationDays);
    if (!IsNullOrUndefined(name) && name != '') {
        var cookieValue = $.cookie(name);
        $.cookie(name, value, { expires: expirationDate, path: '/', domain: null, secure: false });

    }
}
function setTooltips() {
    
    var ToolTips = $(".tooltip");
    if (ToolTips.length > 0) {
        
        ToolTips.qtip({
            style: {
                width: { min: 250, max: 400 },
                padding: 5,
                background: "#FCF4D3",
                color: "#5F5F5F",
                border: {
                    color: "#D7C88B",
                    width: 1
                }
            },
            position: {
                corner: {
                    target: 'rightMiddle',
                    tooltip: 'leftTop'
                }
            }
        });
        
    }
}
function destroyTooltips() {
    var ToolTips = $(".tooltip");
    if (ToolTips.length > 0) {
        ToolTips.qtip("destroy");
    }

}
function setSubmitOnce() {

    $(".submitOnce").each(function() {
        $(this).click(SubmitOnce);
    });
}
function SubmitOnce() {
    if (typeof (Page_ClientValidate) == 'function') {
        if (Page_ClientValidate('')) {
            $(this).unbind('click');
            $(this).click(function() { return false });
        }
    }
    else {
        $(this).unbind('click');
        $(this).click(function() { return false });
    }
}


jQuery.preloadCssImages = function() {

    var allImgs = []; //new array for all the image urls  

    var k = 0; //iterator for adding images

    var sheets = document.styleSheets; //array of stylesheets

    for (var i = 0; i < sheets.length; i++) {//loop through each stylesheet

        var cssPile = ''; //create large string of all css rules in sheet

        var csshref = (sheets[i].href) ? sheets[i].href : 'window.location.href';

        var baseURLarr = csshref.split('/'); //split href at / to make array



        baseURLarr.pop(); //remove file path from baseURL array



        var baseURL = baseURLarr.join('/'); //create base url for the images in this sheet (css file's dir)



        if (baseURL != "") baseURL += '/'; //tack on a / if needed



        if (document.styleSheets[i].cssRules) {//w3



            var thisSheetRules = document.styleSheets[i].cssRules; //w3



            for (var j = 0; j < thisSheetRules.length; j++) {



                cssPile += thisSheetRules[j].cssText;



            }



        }



        else {



            cssPile += document.styleSheets[i].cssText;



        }







        //parse cssPile for image urls and load them into the DOM



        var imgUrls = cssPile.match(/[^\(]+\.(gif|jpg|jpeg|png)/g); //reg ex to get a string of between a "(" and a ".filename"



        if (imgUrls != null && imgUrls.length > 0 && imgUrls != '') {//loop array



            var arr = jQuery.makeArray(imgUrls); //create array from regex obj        



            jQuery(arr).each(function() {



                allImgs[k] = new Image(); //new img obj



                allImgs[k].src = (this[0] == '/' || this.match('http://')) ? this : baseURL + this;     //set src either absolute or rel to css dir



                k++;



            });



        }



    } //loop



    return allImgs;



} 







