//jQuery.noConflict();


/**** Global Variables ****/

function _isStaging() {
    var re = new RegExp("^((www.|tchat.)?[^\.]*.com)", "i");
    if (!re.test(location.hostname)) return true;
    return false;
}

var _baseUrl;
if (_isStaging()) {
    _baseUrl = 'http://staging.tchat.universityalliance.com/media/chatv2';
} else {
    _baseUrl = 'http://tchat.universityalliance.com/media/chatv2';
}

var _continueOldSession = false;
var _chatAvailable = false;
var _currentlyChatting = currentlyChatting();
var _stopBarge = false;
var _chatType = "click";
var _bargeTimeoutID = 0;


var chatOptions = {
    school: "",
    department: "",
    program: "",
    mode: "inline",
    autoBarge: false,
    bargeDelay: 15000,
    setBargeCookie: true,
    contactName: "",
    contactEmail: null,
    contactID: null,
    visitorID: null,
    visitID: null,
    mcid: "",
    sourceCode: "",
    system: "Talisma",
    externalIPAddress: "",
    addLeadUrl: "http://birt.corp.bisk.com/v2/AddNewLead.aspx",
    currentUrl: document.location.href,
    chatUnavailableMode: "alert",
    chatUnavailableMessage: "Sorry, no representatives are currently available.",
    chatUnavailableRedirectUrl: null,
    chatUnavailable: ChatUnavailable,
    repReachedLimit: ChatUnavailable,
    sessionTimedout: ChatUnavailable,
    checkChatAvailabilityCallback: ChatCheckResult,
    afterChatUnavailable: AfterChatUnavailable
};

var schoolQs = null;
var popWindow = null;
var clientInfo = null;

var mode = null;


/**** Test Functions *****/
function TestScript() {
    alert('Script: Success');
}

function CaptureClientInfo() {
    clientInfo = '{os:"' + BrowserDetect.OS + '"'
               + ',browser:"' + BrowserDetect.browser + '"'
               + ',version:"' + BrowserDetect.version + '"'
               + '}';
}

function getExternalIPAddress() {
    var url = _baseUrl + '/handlers/chathandler.aspx?action=ExternalIPAddress';
    jQuery.ajax({
        type: "GET",
        async: false,
        url: url,
        dataType: "jsonp",
        jsonpCallback: "setExternalIPAddress"
    });
}

function setExternalIPAddress(results) {
    jQuery(results).each(function () {
        if (this.Text == "ExternalIPAddress") {
            chatOptions.externalIPAddress = this.Value;
        }
    });
    SetSchoolQueryString();
}

function TestAjax() {
    alert('TestAjax() begin');
    var url = _baseUrl + '/handlers/chathandler.aspx?action=TestAjax';
    jQuery.ajax({
        type: "GET",
        url: url,
        data: "{}",
        dataType: "jsonp",
        success: function (data) {
            alert(data.Text + ':' + data.Value);
        }
    });
    alert('TestAjax() end');
}

/**** Document Ready Function ****/
jQuery(function () {
    CaptureClientInfo();
    chatOptions.mcid = getMCID();
    chatOptions.sourceCode = getSourceCode();
    getExternalIPAddress();
});

function HandleHash() {
    switch (location.hash) {
        case "#RepReachedLimit":
            HandleRepReachedLimit();
            break;
        case "#SessionTimedout":
            HandleSessionTimedout();
            break;
    }
}

/**** Event Handlers ****/
function HandleRepReachedLimit() {
    chatOptions.repReachedLimit();
}

function HandleSessionTimedout() {
    chatOptions.sessionTimedout();
}

/**** Chat Functions ****/
function currentlyChatting() {
    var x = getQuerystring("Chat", "false");
    if (!(x == false || x == "false"))
        return true;
    if (self.name == 'ReferrerFrame')
        return true;
    return false;
}

function RepReachedLimit() {
    ExceptionRepReachedLimit();
    HandleRepReachedLimit();
}

function SessionTimedout() {
    HandleSessionTimedout();
}


function Redirect(newURL) {

    if (typeof window.parent.ChatPage == "object") {
        if (typeof window.parent.ChatPage.SetCurrentURL == "function") {
            window.parent.ChatPage.SetCurrentURL(newURL);
        }
    }
}

function ran() {
    return Math.floor(10000 * Math.random());
}

function InitChat(options) {
    chatOptions = jQuery.extend(chatOptions, options);
    HandleHash();
    SetSchoolQueryString();

    if (chatOptions.autoBarge == true) {
        AutoBarge();
    }

    if (chatOptions.mode.toLowerCase() == "modal") {
        var left = screen.width / 2;
        var top = screen.height / 2;
        jQuery("body")
      .append("<IFRAME id='chat_iframe' style='overflow:hidden;position:absolute; top:" + top + "px; left:" + left + "px; display:none; width:600px; height:540px;background-color:white;'  src='' frameBorder='0'></IFRAME>")
      .append('<div id="modalbackground" style="display:none; z-index: 500;filter:alpha(opacity=50); filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);-moz-opacity: .50; -khtml-opacity: 0.5; opacity: 0.5; background-color: #000000;position: fixed;top: 0px;left: 0px;width: 100%;height: 100%;text-align: center;vertical-align: middle;"></div>');
    }
}

function SetSchoolQueryString() {
    var addleadurl = chatOptions.addLeadUrl
      + "?mcid=" + chatOptions.mcid
      + "&source=" + chatOptions.sourceCode
      + "&prospectType=" + "chat"
      + "&system=" + chatOptions.system;

    schoolQs = "chat__school=" + chatOptions.school
      + "&chat__department=" + chatOptions.department
      + "&chat__program=" + chatOptions.program
      + "&chat__external+ip+address=" + chatOptions.externalIPAddress
      + "&chat__external+browser=" + clientInfo
      + "&chat__add+lead=" + encodeURIComponent(addleadurl);
}

function AutoBarge() {
    var barged = false;

    if (chatOptions.setBargeCookie == true) {
        //check for auto barge cookie
        barged = GetCookie("Barged");
    }

    if ((barged == false || barged == null || barged == undefined || barged == 'undefined') && _currentlyChatting == false) {
        //start timer
        _bargeTimeoutID = setTimeout("StartChatBarge()", chatOptions.bargeDelay);
    }
}

function StopBarge() {
  clearTimeout(_bargeTimeoutID);
}

function WebTrack() {
    var url = _baseUrl + '/handlers/chathandler.aspx?action=WebTrack&SetCookie=true&tUrl=' + encodeURIComponent(chatOptions.currentUrl) + "&ran=" + ran();

    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: "{}",
        dataType: "jsonp",
        jsonpCallback: "webTrackCallback"
    });
}

function ExceptionRepReachedLimit() {
    var action = 'Exception';
    var exceptionTypeId = 2;
    var description = 'Rep.Busy';
    var talismaStatus = '';
    var url = _baseUrl + '/handlers/chathandler.aspx'
      + '?action=' + action
      + '&ExceptionTypeId=' + exceptionTypeId.toString()
      + '&Description=' + description
      + '&TalismaStatus=' + talismaStatus
      + '&ChatType=' + _chatType
      + '&ran=' + ran();

    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: '{}',
        dataType: "jsonp",
        jsonpCallback: "ExceptionCallback"
    });
}

function ExceptionCallback(results) {
    //alert('ExceptionCallback()');
}


function webTrackCallback(data) {
    jQuery(data).each(function () {
        if (this.Text == "nVisitorID") {
            chatOptions.visitorID = this.Value;
        }

        if (this.Text == "nVisitID") {
            chatOptions.visitID = this.Value;
        }

        if (this.Text == "nContactID") {
            chatOptions.contactID = this.Value;
        }

        if (this.Text == "tContactName") {
            //we are leaving this as the defaul value
            //tContactName = this.Value;
        }

        if (this.Text == "tContactEmail") {
            chatOptions.contactEmail = this.Value;
        }
    });
}

function CheckChatAvailability() {
    var url = _baseUrl + '/handlers/chathandler.aspx?action=CheckStatus&nVisitorID=' + chatOptions.visitorID + '&nVisitID=' + chatOptions.visitID + '&nContactID=' + chatOptions.contactID + '&tContactName=' + chatOptions.contactName + '&tContactEmail=' + chatOptions.contactEmail + "&ran=" + ran();

    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: schoolQs,
        dataType: "jsonp",
        jsonpCallback: "chatAvailableCallback"
    });
}

function CheckStatus() {
    var url = _baseUrl + '/handlers/chathandler.aspx?action=CheckStatus&nVisitorID=' + chatOptions.visitorID + '&nVisitID=' + chatOptions.visitID + '&nContactID=' + chatOptions.contactID + '&tContactName=' + chatOptions.contactName + '&tContactEmail=' + chatOptions.contactEmail + '&ChatType=' + _chatType + '&ran=' + ran();

    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: schoolQs,
        dataType: "jsonp",
        jsonpCallback: "checkStatusCallback"
    });
}

function checkStatusCallback(results) {
    jQuery(results).each(function () {
        //alert('checkStatusCallback - ' + this.Text + ':' + this.Value);
        if (this.Text == "ChatAvailable")
            _chatAvailable = this.Value;
    });

    StartChatAfterCheck();
}

function chatAvailableCallback(results) {
    jQuery(results).each(function () {
        if (this.Text == "ChatAvailable") {
            _chatAvailable = this.Value;
            chatOptions.checkChatAvailabilityCallback(_chatAvailable);
        }
    });
}

function ChatCheckResult(available) {
    alert("chat is available: " + available);
}

function AfterChatUnavailable() {

}

function StartChatBarge() {
    if (_stopBarge == false) {
        _chatType = "barge";
        StartChat();
    }
}

function StartChat() {
    //if not safari

    var browserSupportsChat = true;
    //browserSupportsChat = (BrowserDetect.browser.toLowerCase() != "safari");

    if (browserSupportsChat == true) {
        //if chat is not already in progress
        if (!(_currentlyChatting)) {
            _stopBarge = true;
            if (chatOptions.mode.toLowerCase() == "popup" && _chatType != "barge") {
                OpenLoadingPopup();
            }
            StartInlineChat();
        }
    }
    else {
        //call chat unavailable
        chatOptions.chatUnavailable();
    }
}


function StartChatAfterCheck() {
    if (_chatAvailable == "true") {
        if (chatOptions.setBargeCookie == true) {
            //set barge cookie to expire in 1 day
            SetCookie("Barged", "True", 1);
        }
        if (chatOptions.mode.toLowerCase() == "popup" && _chatType == "barge") {
            OpenLoadingPopup();
        }

        var url = _baseUrl + '/handlers/chathandler.aspx?action=CheckForOldSession' + "&ran=" + ran();

        jQuery.ajax({
            type: "GET",
            url: url,
            async: false,
            data: schoolQs + "&school=" + chatOptions.school,
            dataType: "jsonp",
            jsonpCallback: "checkOldSessionCallback"
        });
    }
    else {
        if (popWindow) {
            popWindow.close();
        }

        chatOptions.chatUnavailable();
    }
}

function ChatUnavailable() {
    if (_chatType != "barge") {
        var message = "Sorry, no representatives are currently available.";

        if (chatOptions.chatUnavailableMode) {
            if (chatOptions.chatUnavailableMode.toLowerCase() == "alert") {
                if (chatOptions.chatUnavailableMessage != null && chatOptions.chatUnavailableMessage != "" && chatOptions.chatUnavailableMessage != undefined) {
                    message = chatOptions.chatUnavailableMessage;
                }
                alert(message);
            }
            else if (chatOptions.chatUnavailableMode.toLowerCase() == "redirect") {
                if (chatOptions.chatUnavailableRedirectUrl != null && chatOptions.chatUnavailableRedirectUrl != "" && chatOptions.chatUnavailableRedirectUrl != undefined) {
                    document.location.href = chatOptions.chatUnavailableRedirectUrl;
                }
                else {
                    alert(message);
                }
            }
        }
        else {
            alert(message);
        }

        chatOptions.afterChatUnavailable();
    }
}

function checkOldSessionCallback(results) {
    jQuery(results).each(function () {
        var machineIP;

        if (this.Text == "ShowOldSessionWarning") {
            if (this.Value == "true") {
                _continueOldSession = confirm("If there is already a session in progress, you will be connected to the same session. Do you want to continue?");
            }
        }
        else if (this.Text == "MachineIP") {
            machineIP = this.Value;
        }
    });

    var queryString;

    if (_continueOldSession) {
        queryString = "ConnectToOldSession=yes&machineIP=" + machineIP;
    }
    else {
        queryString = "ConnectToOldSession=no";
    }

    var pop = false;
    var modal = false;

    if (chatOptions.mode.toLowerCase() == "modal") {
        pop = true;
        modal = true;
    }
    else if (chatOptions.mode.toLowerCase() == "popup") {
        pop = true;
    }

    queryString += "&isPopUp=" + pop
      + "&modal=" + modal
      + "&curUrl=" + chatOptions.currentUrl
      + '&nVisitorID=' + chatOptions.visitorID
      + '&nVisitID=' + chatOptions.visitID
      + '&nContactID=' + chatOptions.contactID
      + '&tContactName=' + chatOptions.contactName
      + '&tContactEmail=' + chatOptions.contactEmail
      + "&ran=" + ran();
    var url = _baseUrl + '/handlers/chathandler.aspx?action=StartChat';

    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: schoolQs + "&school=" + chatOptions.school + queryString,
        dataType: "jsonp",
        jsonpCallback: "startChatCallback"
    });

    SiteCatalystTL(); // track barge type
}

function StartInlineChat() {
    var pop = false;
    var modal = false;
    if (chatOptions.mode.toLowerCase() == "modal") {
        pop = true;
        modal = true;
    }
    else if (chatOptions.mode.toLowerCase() == "popup") {
        pop = true;
    }

    var queryString = schoolQs
      + "&action=" + "DoPost_StartInlineChat"
      + "&ConnectToOldSession=" + "no"
      + "&isPopUp=" + pop
      + "&modal=" + modal
      + "&school=" + chatOptions.school
      + "&curUrl=" + chatOptions.currentUrl
      + "&nVisitorID=" + chatOptions.visitorID
      + "&nVisitID=" + chatOptions.visitID
      + "&nContactID=" + chatOptions.contactID
      + "&tContactName=" + chatOptions.contactName
      + "&tContactEmail=" + chatOptions.contactEmail
      + "&ran=" + ran();

    var url = _baseUrl + "/handlers/chathandler.aspx";
    jQuery.ajax({
        type: "GET",
        url: url,
        async: false,
        data: queryString,
        dataType: "jsonp",
        jsonpCallback: "StartInlineChatCallBack"
    });

    SiteCatalystTL(); // track barge type
}

function StartInlineChatCallBack(results) {
    var success;
    var redirectUrl;
    var winWidth = 810;
    var winHeight = 240;
    jQuery(results).each(function () {
        //alert("StartInlineChatCallBack - " + this.Text + ":" + this.Value);
        switch (this.Text) {
            case "Url":
                redirectUrl = this.Value;
                break;
            case "Status":
                success = (this.Value == "Success");
                break;
            case "PopupPixelWidth":
                winWidth = this.Value;
                break;
            case "PopupPixelHeight":
                winHeight = this.Value;
                break;
        }
    });
    if (success) {
        if (chatOptions.setBargeCookie == true) {
            //set barge cookie to expire in 1 day
            SetCookie("Barged", "True", 1);
        }

        switch (chatOptions.mode.toLowerCase()) {
            case "modal":
                OpenChatModal(redirectUrl, winWidth, winHeight);
                break;
            case "popup":
                ResetPopup(redirectUrl);
                break;
            default:
                document.location = redirectUrl;
        }
    }
    else {
        chatOptions.chatUnavailable();
    }
}

function startChatCallback(results) {
    var redirectUrl;
    var winWidth = 810;
    var winHeight = 240;

    jQuery(results).each(function () {
        //alert('startChatCallback - ' + this.Text + ':' + this.Value);


        if (this.Text == "Url") {
            redirectUrl = this.Value;
        }
        else if (this.Text == "PopupPixelWidth") {
            winWidth = this.Value;
        }
        else if (this.Text == "PopupPixelHeight") {
            winHeight = this.Value;
        }
    });

    if (chatOptions.mode.toLowerCase() == "modal") {
        //open in modal
        OpenChatModal(redirectUrl, winWidth, winHeight);
    }
    else if (chatOptions.mode.toLowerCase() == "popup") {
        //open in popup
        ResetPopup(redirectUrl);
    }
    else {
        //open inline
        document.location = redirectUrl;
    }
}

function OpenLoadingPopup() {
    OpenChatPopup(_baseUrl + '/loadingchat.htm', 200, 100);
}

function OpenChatPopup(url, width, height) {
    var left = screen.width / 2 - 100;
    var top = screen.height / 2 - 50;
    popWindow = window.open(url, 'Chat', 'status=no,toolbar=no,menubar=no,resizable=yes,height=' + height + ',width=' + width + ',scrollbars=no,top=' + top + ',left=' + left);
    if (popWindow) {
        popWindow.focus();
    }
}

function ResetPopup(url) {
    if (popWindow) {
        popWindow.location.href = url;
        popWindow = null;
    }
}

function OpenChatModal(url, width, height) {
    var left = screen.width / 2 - (width / 2);
    var top = screen.height / 2 - (height / 2) - 75;
    jQuery("#chat_iframe")
      .attr("src", url)
      .css({
          "width": width,
          "height": (parseInt(height) - 75),
          "top": top,
          "left": left,
          "z-index": 1000
      })
      .show();
    jQuery("#modalbackground").show();
}

function addDynamicTag(url) {
    var head = document.getElementsByTagName("head").item(0);
    var script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", url);
    head.appendChild(script);
}

function getMCID() {
    var m = getQuerystring("WT.mc_id", "");
    if (m == "") {
        m = getQuerystring("wt.mc_id", "");
        if (m == "") {
            m = getQuerystring("mcid", "");
            if (m == "") {
                m == getQuerystring("MCID", "");
            }
        }
    }
    return m;
}

function getSourceCode() {
    var sc = getQuerystring("sourceCode", "");
    if (sc == "") {
        sc = getQuerystring("SourceCode", "");
        if (sc == "") {
            sc = getQuerystring("sourcecode", "");
            if (sc == "") {
                sc == getQuerystring("source", "");
            }
        }
    }

    if (sc != "")
        return sc;

    if (typeof FormSourceCode != "undefined") {
        sc = FormSourceCode;
        return sc;
    }

    return sc;
}

/* Cookie Functions */
function SetCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    var c_path = "/";
    c_value += "; path=" + c_path;
    document.cookie = c_name + "=" + c_value;
}

function GetCookie(c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}

// this deletes the cookie when called
function Delete_Cookie(name, path, domain) {
    if (GetCookie(name)) document.cookie = name + "=" +
((path) ? ";path=" + path : "") +
((domain) ? ";domain=" + domain : "") +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function getQuerystring(key, default_) {
    if (default_ == null) default_ = "";
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if (qs == null)
        return default_;
    else
        return qs[1];
}

/* Browser Detection. This should be removed when safari issues are resolved */
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
      || this.searchVersion(navigator.appVersion)
      || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
    {
        string: navigator.userAgent,
        subString: "Chrome",
        identity: "Chrome"
    },
    { string: navigator.userAgent,
        subString: "OmniWeb",
        versionSearch: "OmniWeb/",
        identity: "OmniWeb"
    },
    {
        string: navigator.vendor,
        subString: "Apple",
        identity: "Safari",
        versionSearch: "Version"
    },
    {
        prop: window.opera,
        identity: "Opera"
    },
    {
        string: navigator.vendor,
        subString: "iCab",
        identity: "iCab"
    },
    {
        string: navigator.vendor,
        subString: "KDE",
        identity: "Konqueror"
    },
    {
        string: navigator.userAgent,
        subString: "Firefox",
        identity: "Firefox"
    },
    {
        string: navigator.vendor,
        subString: "Camino",
        identity: "Camino"
    },
    {    // for newer Netscapes (6+)
        string: navigator.userAgent,
        subString: "Netscape",
        identity: "Netscape"
    },
    {
        string: navigator.userAgent,
        subString: "MSIE",
        identity: "Explorer",
        versionSearch: "MSIE"
    },
    {
        string: navigator.userAgent,
        subString: "Gecko",
        identity: "Mozilla",
        versionSearch: "rv"
    },
    {     // for older Netscapes (4-)
        string: navigator.userAgent,
        subString: "Mozilla",
        identity: "Netscape",
        versionSearch: "Mozilla"
    }
  ],
    dataOS: [
    {
        string: navigator.platform,
        subString: "Win",
        identity: "Windows"
    },
    {
        string: navigator.platform,
        subString: "Mac",
        identity: "Mac"
    },
    {
        string: navigator.userAgent,
        subString: "iPhone",
        identity: "iPhone/iPod"
    },
    {
        string: navigator.platform,
        subString: "Linux",
        identity: "Linux"
    }
  ]

};
BrowserDetect.init();

// Omniture SiteCatalyst
function SiteCatalystTL() {
    if (typeof s_account != "undefined") {
        var s = s_gi(s_account);
        s.linkTrackVars = "eVar16";
        s.linkTrackEvents = "None";
        s.eVar16 = _chatType;
        s.tl(this, "o", "chat type");
    }
}
// END - Omniture SiteCatalyst
