﻿var isNN = (navigator.appName.indexOf("Netscape") != -1);
var smsCollapser;

//------- After loading -------//
var smsOpened;
var showSMSExpanded = "false";

function loadStylesSMS() {
    if (showSMSExpanded != "true")
    {    
        //SMS Collapsed
        if (document.getElementById("sms").className == "smsCollapsed") {
            document.getElementById("div_btnCollapse_sms").className = "btnCollapsedSMS";
            document.getElementById("separator_header").style.display = "none";
            smsOpened = false;
        }
        //SMS Expanded
        else {
            if (document.getElementById("sms").className == "smsExpanded") {            
                document.getElementById("div_btnCollapse_sms").className = "btnExpandedSMS";            
                document.getElementById("separator_header").style.display = "block";
                smsOpened = true;
            }
        }
    }
    else
        setBtnCollapseInvisible();

}

//------- Header over out -------//
function headerOverSMS() {
    if (showSMSExpanded != "true")
    {    
       if (smsOpened) {
            document.getElementById("div_btnCollapse_sms").className = "btnExpandedSMS_hover";
        }
        else {
            document.getElementById("div_btnCollapse_sms").className = "btnCollapsedSMS_hover";
        }  
    }        
    else
        setBtnCollapseInvisible();
}

function headerOutSMS() {
    if (showSMSExpanded != "true")
    {    
        if (smsOpened) {
            document.getElementById("div_btnCollapse_sms").className = "btnExpandedSMS";                
        }
        else {
            document.getElementById("div_btnCollapse_sms").className = "btnCollapsedSMS";
        }   
    } 
    else
        setBtnCollapseInvisible();
}

//------- Open and Close Body -------//
var classVerifiedSMS = false;
var smsClass;

function openCloseSMS() {
    if (showSMSExpanded != "true")
    {    
        RemoveHandler(document.getElementById('smsHeader'), 'click', openCloseSMS);

        //If class has been verified for first time
        if (classVerifiedSMS == false) {
            smsClass = document.getElementById("sms").className;

            if (smsClass == "smsCollapsed") {
                smsClass = "smsExpanded";
                smsOpened = false;
            }
            else {
                smsOpened = true;
            }
            classVerifiedSMS = true;
        }
        
        //If SMS is collapsed
        if (smsOpened == false) {
            
            document.getElementById("div_btnCollapse_sms").className = "btnExpandedSMS";
            document.getElementById("separator_header").style.display = "block";
            document.getElementById("sms").className = smsClass;
            smsOpened = true;
            FireTrackingCode('Expand');
        }
        //If SMS is opened
        else {         
            document.getElementById("div_btnCollapse_sms").className = "btnCollapsedSMS";
            document.getElementById("separator_header").style.display = "none";
            document.getElementById("sms").className = "smsCollapsed";
            smsOpened = false;
        }
    }
    else
        setBtnCollapseInvisible();
}

function openCloseComplete() {
    if (showSMSExpanded != "true")
    {
        AddHandler(document.getElementById('smsHeader'), 'click', openCloseSMS);
    }
    else
        setBtnCollapseInvisible();
}

//------- Open and close Note -------//
function openSmsNote() {
    document.getElementById("noteClosed").style.display = "none";
    document.getElementById("noteOpened").style.display = "block";
    if (showSMSExpanded != "true")
    {
        smsClass = "smsExpandedTall";
        document.getElementById("sms").className = smsClass;
    }
    else
        setBtnCollapseInvisible();
}

function closeSmsNote() {
    document.getElementById("noteClosed").style.display = "block";
    document.getElementById("noteOpened").style.display = "none";
    if (showSMSExpanded != "true")
    {
        smsClass = "smsExpanded";
        document.getElementById("sms").className = smsClass;
    }
    else
        setBtnCollapseInvisible();
}


//------- Submitting text message -------//
function submitTextMsg() {
    showStatusAndHideInstruction();
    FireTrackingCode('Submit');
    return false;
}

function showStatusAndHideInstruction() {
    if (document.getElementById('wrapperSMS').className.toLowerCase() != 'marketplace')
        document.getElementById('enterMsg').style.display = "none";
    
    document.getElementById('sentMsgText').style.display = "block";
}

function closeSentMsg() {
    if (document.getElementById('wrapperSMS').className.toLowerCase() != 'marketplace')
        document.getElementById('enterMsg').style.display = "block";
    
    document.getElementById('sentMsgText').style.display = "none";
}


//*********************** smoothe collapsable panel object constructor ***************************
function SmsCollapser(panel, trigger, minWidth, minHeight, maxWidth, maxHeight, duration, interval, expanded) {
    this.m_Panel = panel;
    this.m_Trigger = trigger;
    this.m_MinWidth = minWidth;
    this.m_MinHeight = minHeight;
    this.m_MaxWidth = maxWidth;
    this.m_MaxHeight = maxHeight;
    this.m_Duration = duration;
    this.m_Interval = interval;
    this.m_Expanded = expanded;

    this.m_Direction = 1;
    this.m_ElapsedTime = 0;

    this.m_ChangeWidth = 0;
    this.m_ChangeHeight = 0;

    this.m_StartWidth = 0;
    this.m_StartHeight = 0;

    this.OnExpandCollapseComplete = null;

    if (showSMSExpanded == "true")
    {
         this.SetDimensions(maxWidth, maxHeight, true);
   }
    else if (expanded) {
        this.SetDimensions(maxWidth, maxHeight, true);
        this.AddHandler(this.m_Trigger, 'click', this.CreateDelegate(this, this.Collapse));
    }
    else {
        this.SetDimensions(minWidth, minHeight, false);
        this.AddHandler(this.m_Trigger, 'click', this.CreateDelegate(this, this.Expand));
    }
}


//*********************** smoothe collapsable panel object methods ***************************
SmsCollapser.prototype.Expand = function() {
    this.RemoveHandler(this.m_Trigger, 'click');

    this.m_ElapsedTime = 0;
    this.m_ChangeWidth = this.m_MinWidth - this.m_MaxWidth;
    this.m_ChangeHeight = this.m_MinHeight - this.m_MaxHeight;
    this.m_StartWidth = this.m_MinWidth;
    this.m_StartHeight = this.m_MinHeight;

    this.Animate();
}

SmsCollapser.prototype.Collapse = function() {
    this.RemoveHandler(this.m_Trigger, 'click');

    this.m_ElapsedTime = 0;
    this.m_ChangeWidth = this.m_MaxWidth - this.m_MinWidth;
    this.m_ChangeHeight = this.m_Panel.clientHeight - this.m_MinHeight;
    this.m_StartWidth = this.m_MaxWidth;
    this.m_StartHeight = this.m_Panel.clientHeight;

    this.m_Panel.style.minHeight = "";

    this.Animate();
}

SmsCollapser.prototype.Animate = function() {
    var percentChange = this.m_ElapsedTime / this.m_Duration;

    this.m_Panel.style.width = (this.m_StartWidth - (percentChange * this.m_ChangeWidth)) + 'px';
    this.m_Panel.style.height = (this.m_StartHeight - (percentChange * this.m_ChangeHeight)) + 'px';

    this.m_ElapsedTime += this.m_Interval;

    if (this.m_ElapsedTime <= this.m_Duration) {
        setTimeout(this.CreateDelegate(this, this.Animate));
    }
    else {
        this.m_Expanded = this.m_Expanded ? false : true;
        if (this.m_Expanded) {
            this.m_Panel.style.minHeight = this.m_Panel.style.height;
            this.m_Panel.style.height = "";
            this.AddHandler(this.m_Trigger, 'click', this.CreateDelegate(this, this.Collapse));
        }
        else {
            this.AddHandler(this.m_Trigger, 'click', this.CreateDelegate(this, this.Expand));
        }

        try {
            this.OnExpandCollapseComplete();
        }
        catch (e) { }
    }
}

SmsCollapser.prototype.SetDimensions = function(width, height, setMinHeight) {
    if (setMinHeight) {
        this.m_Panel.style.minHeight = height + 'px';
    }
    else {
        this.m_Panel.style.height = height + 'px';
    }
    this.m_Panel.style.width = width + 'px';
}

//*********************** Event Handler Creation ***************************
SmsCollapser.prototype.AddHandler = function(object, eventName, handler) {
    eval("object." + eventName + object.id + " = handler");
    if (object.addEventListener) { object.addEventListener(eventName, handler, false); }
    else { object.attachEvent("on" + eventName, handler); }
}

SmsCollapser.prototype.RemoveHandler = function(object, eventName) {
    var fn = eval("object." + eventName + object.id);
    if (fn) {
        if (object.removeEventListener) { object.removeEventListener(eventName, fn, false); }
        else { object.detachEvent("on" + eventName, fn); }
    }
}

SmsCollapser.prototype.CreateDelegate = function(object, method) {
    return (function() { return method.apply(object, arguments); })
}

//*********************** UI Function to Expand or Collapse ***************************
function expandOrCollapseSmsWidget() {
    if (showSMSExpanded != "true")
    {
        if (smsOpened) {
            smsCollapser.Collapse();
        }
        else {
            smsCollapser.Expand();
        }
        openCloseSMS();
    }
    else
        setBtnCollapseInvisible();
}

// We need to emulate the scripts loaded at the bottom of the widget usercontrol.

var manager = Sys.WebForms.PageRequestManager.getInstance();
manager.add_endRequest(endRequest);

// Show the expand button and reinitialize the collapser.
function endRequest(sender, args) {
    if (showSMSExpanded != "true")
        showExpandButton();
    else
        setBtnCollapseInvisible();

    showStatusAndHideInstruction();
//    //reinitializeCollapser();
}

function showExpandButton() {
    if (showSMSExpanded != "true")
    {
        document.getElementById('div_btnCollapse_sms').className = 'btnExpandedSMS';
        document.getElementById('separator_header').style.display = 'block';
        document.getElementById('sms').className = 'smsExpanded';
    }
    else
        setBtnCollapseInvisible();
}

function AddHandler(object, eventName, handler) {
    if (object.addEventListener) { object.addEventListener(eventName, handler, false); }
    else { object.attachEvent("on" + eventName, handler); }
}

function RemoveHandler(object, eventName, handler) {
    if (object.removeEventListener) { object.removeEventListener(eventName, handler, false); }
    else { object.detachEvent("on" + eventName, handler); }
}

function reinitializeCollapser() {
    if (showSMSExpanded != "true")
    {
        var smsCollapser = new SmsCollapser(document.getElementById('sms'), document.getElementById('smsHeader'),
                                       178, 30, 178, 250, 500, 20, true);
    }
    else
        setBtnCollapseInvisible();
}



// To validate US phone numbers, combine the three textbox values into and
// store it in a hidden value
function writeValueToTarget (areaId, prefixId, suffixId, targetId)
{
    var area = document.getElementById(areaId).value;
    var prefix = document.getElementById(prefixId).value;
    var suffix = document.getElementById(suffixId).value;

    var target = document.getElementById(targetId);
	                
    if (target == null)
        return;

    target.value = area + prefix + suffix;
};

function autoTab(input, nextInputId, e) {
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0, 8, 9] : [0, 8, 9, 16, 17, 18, 37, 38, 39, 40, 46];

    if (input.value.length == input.maxLength && !containsElement(filter, keyCode)) {
        input.value = input.value.slice(0, input.maxLength);
        
        if (nextInputId) {
            document.getElementById(nextInputId).focus();
        }
    }

    function containsElement(arr, ele) {
        var found = false, index = 0;
        while (!found && index < arr.length)
            if (arr[index] == ele)
            found = true;
        else
            index++;
        return found;
    }

    function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1)
            if (input.form[i] == input) index = i;
        else i++;
        return index;
    }
    return true;
}

// BEGIN numericInputMask methods
var numericKeyPadOffSet = 48;

function isNumericKeyPadKey(unicode) {
    return (unicode > 95 && unicode < 106);
}

function isNumbericKey(unicode)
{
    var keyChar = String.fromCharCode(unicode);
    return ("0123456789".indexOf(keyChar) > -1);
}

function isDeleteOrBackspaceKey(unicode) {
    return (isBackSpaceKey(unicode) || isDeleteKey(unicode));
}

function isTabKey(unicode) {
    return unicode == 9;
}

function isBackSpaceKey(unicode) {
    return unicode == 8;
}

function isDeleteKey(unicode) {
    return unicode == 46;
}

function isArrowKey(unicode)
{
    return (unicode > 36 && unicode < 41);
}

function getNumberLength(numericMask) {
    var tempNumber = numericMask;

    for (var index = 0; index < numericMask.length; index++) {
        if (numericMask.charAt(index) != '#') {
            tempNumber = tempNumber.replace(numericMask.charAt(index), '');
        }
    }

    return tempNumber.length;
}

function backspaceDelete(number) {
    if (number.length > 0) {
        number = number.substring(0, number.length - 1);
    }

    return number;
}

function deleteKeyDelete(number) {
    if (number.length > 0) {
        number = number.substring(0, number.length + 1);
    }

    return number;
}

function getNumericKeyPadValue(unicode) {
    return String.fromCharCode(unicode - numericKeyPadOffSet);
}

function replacePlaceHolderWithEmptyString(inputValue, numericMask) {
    numericMask = numericMask.replace('#', '');

    for (var index = 0; index < numericMask.length++; index++) {
        inputValue = inputValue.replace(numericMask.substring(index, index + 1), '');
    }

    return inputValue;
}


function getFormmatedNumber(number, numericMask) {
    var finalNumber = '';

    for (var index = 0; index < numericMask.length; index++) {
        if (numericMask.charAt(index) == '#') {
            if (number.length > 0) {
                finalNumber = finalNumber + number.charAt(0);
                number = number.substring(1, number.length);
            }
            else {
                finalNumber = finalNumber + '';
            }
        }
        else if (numericMask.charAt(index) != '#') {
            finalNumber = finalNumber + numericMask.charAt(index);
        }
    }
    
    return finalNumber;
}

function numericInputMask(event, inputControl, numericMask) {
    var unicode = event.charCode ? event.charCode : event.keyCode;
    var number = replacePlaceHolderWithEmptyString(inputControl.value, numericMask);
    var finalNumber = '';

    if (isTabKey(unicode)) {
        return true;
    }
    else if (isArrowKey(unicode)) {
        return true;
    }
    else if (isBackSpaceKey(unicode)) {
        number = backspaceDelete(number);
        return true;
    }
    else if (isDeleteKey(unicode)) {
        number = deleteKeyDelete(number);
        return true;
    }    
    else if ((isNumbericKey(unicode) || isNumericKeyPadKey(unicode)) && number.length < getNumberLength(numericMask)) {
        if (isNumericKeyPadKey(unicode)) {
            number = number + getNumericKeyPadValue(unicode);

            if (number.length == getNumberLength(numericMask)) {
                finalNumber = getFormmatedNumber(number, numericMask);
                inputControl.value = finalNumber;
                return false;
            }
        }
        else {
            number = number + String.fromCharCode(unicode);

            if (number.length == getNumberLength(numericMask)) {
                finalNumber = getFormmatedNumber(number, numericMask);
                inputControl.value = finalNumber;
                return false;
            }
        }
    }
    else {
        return false;
    }
}

function acceptNumericInputOnly(inputControl, event) {
    var unicode = event.charCode ? event.charCode : event.keyCode;
    return (isDeleteOrBackspaceKey(unicode)
        || isNumbericKey(unicode)
        || isTabKey(unicode)
        || isArrowKey(unicode));
}

// END numericInputMask methods

//        --------- IconService Response Code List ---------
//        Success
//        InvalidNumber
//        PageExpired
//        MaxReached
//        InvalidParameters
//        ServiceUnavailable

function FireTrackingCode(event) {
    switch (event) {
        case 'Expand':
            FireTag('_1');
            break;

        case 'Submit':
            FireTag('_2');
            break;

        case 'Success':
            FireTag('_3');
            break;

        case 'InvalidNumber':
            FireTag('_4');
            break;

        case 'MaxReached':
            FireTag('_5');
            break;

        case 'InvalidParameters':
            FireTag('_6');
            break;

        case 'PageExpired':
            FireTag('_7');
            break;

        case 'ServiceUnavailable':
            FireTag('_8');
            break;

        default:
    }
}

function FireTag(tagId) {
    try {
         //alert('tagId ' + tagId + ' DCS.dcsuri ' + taggingData[tagId][0] + ' WT.ti ' + taggingData[tagId][1] + ' WT.dl 6');
         dcsMultiTrack('DCS.dcsuri', '' + taggingData[tagId][0] + '', 'WT.ti', '' + taggingData[tagId][1] + '', 'WT.dl', '1');
    }
    catch (e) { }
}


