// Common JavaScript

function setCookie(c_name,value,expiredays){
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name){
    if (document.cookie.length>0){
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1){
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}

/**
 * Flash detection functions
 */ 
function ControlVersion(){
    var version;
    var axo;
    var e;
    // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
    try {
        // version will be set for 7.X or greater players
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
        version = axo.GetVariable("$version");
    } catch (e) {
    }
    if (!version)
    {
        try {
            // version will be set for 6.X players only
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

            // installed player is some revision of 6.0
            // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
            // so we have to be careful.

            // default to the first public version
            version = "6";
            // throws if AllowScripAccess does not exist (introduced in 6.0r47)
            axo.AllowScriptAccess = "always";
            // safe to call for 6.0r47 or greater
            version = axo.GetVariable("$version");
        } catch (e) {
        }
    }
    if (!version)
    {
        try {
            // version will be set for 4.X or 5.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = axo.GetVariable("$version");
        } catch (e) {
        }
    }
    if (!version)
    {
        try {
            // version will be set for 3.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = "3";
        } catch (e) {
        }
    }
    if (!version)
    {
        try {
            // version will be set for 2.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            version = "2";
        } catch (e) {
            version = -1;
        }
    }

    return version;
}

function GetSwfVer() {
    var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
    var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
    var flashVer = -1;

    if (navigator.plugins != null && navigator.plugins.length > 0) {
        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
            var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
            var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
            var descArray = flashDescription.split(" ");
            var tempArrayMajor = descArray[2].split(".");
            var versionMajor = tempArrayMajor[0];
            var versionMinor = tempArrayMajor[1];
            var versionRevision = descArray[3];
            if (versionRevision == "") {
                versionRevision = descArray[4];
            }
            if (versionRevision[0] == "d") {
                versionRevision = versionRevision.substring(1);
            } else if (versionRevision[0] == "r") {
                versionRevision = versionRevision.substring(1);
                if (versionRevision.indexOf("d") > 0) {
                    versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
                }
            }
            var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
        }
    }
    // MSN/WebTV 2.6 supports Flash 4
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
    // WebTV 2.5 supports Flash 3
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
        // older WebTV supports Flash 2
        else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
            else if (isIE && isWin && !isOpera) {
                    flashVer = ControlVersion();
                }
    
    return flashVer;    
}

function GetSwfVerInt(){
    var intVersion = GetSwfVer().match(/\d{1,}/, "");    
    if (intVersion != null) {
        return parseInt(intVersion[0]);
    } else {
        return -1;
    }
}

/***
 * events logger
 */  

function eventLogger(eventDataObj){
    /*
        eModule - module name (e.g. Classic Uploader, Wizard)
        eType - event type (notice or error)
        eName - name of event 
        eValue - value of event
        eUserDetails - user's details 
        eFlashV - flash player version
        eURL - URL of the page 
        eScriptURL - URL of the script where js error occurred
        eScriptLine - line with js error
        eId - "process" id
        eClientTime - client's time UTC
        eUserSess - user's session
        eJobID - job id
        eScreen - screen resolution
        eViewPort - viewport size of user's browser
        
        Example of eventDataObj:
            {name:"val",name2:"val2"}
    */    
    var submitUrl = "/modules/common/logger/eventLogger.php";
       
    eventDataObj.eModule = eventDataObj.eModule || '';
    eventDataObj.eType = eventDataObj.eType || '';
    eventDataObj.eName = eventDataObj.eName || '';
    eventDataObj.eValue = eventDataObj.eValue || '';
    eventDataObj.eUserDetails = eventDataObj.eUserDetails || '';
    eventDataObj.eFlashV = eventDataObj.eFlashV || '';
    eventDataObj.eURL = eventDataObj.eURL || location.href + location.hash; 
    eventDataObj.eScriptURL = eventDataObj.eScriptURL || '';
    eventDataObj.eScriptLine = eventDataObj.eScriptLine || '';
    eventDataObj.eClientTime = eventDataObj.eClientTime || getClientTime(); 
    eventDataObj.eId = eventDataObj.eId || ''; 
    eventDataObj.eUserSess = eventDataObj.eUserSess || "csid:"+getCookie("cs_cookies[csid]");
    eventDataObj.eJobID = eventDataObj.eJobID || ''; 
    eventDataObj.eScreen = screen.width+"x"+screen.height;
    
    // get viewport size
    var viewportwidth;
    var viewportheight;
    if (typeof window.innerWidth != 'undefined'){
        viewportwidth = window.innerWidth,
        viewportheight = window.innerHeight
    }
    else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0){
         viewportwidth = document.documentElement.clientWidth,
         viewportheight = document.documentElement.clientHeight
    }
    else{
         viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
         viewportheight = document.getElementsByTagName('body')[0].clientHeight
    }
    eventDataObj.eViewPort = viewportwidth+"x"+viewportheight;
            
    $.ajax({
        url: submitUrl,
        type: "POST",
        data: eventDataObj
    });
}

function getClientTime(){
    var d = new Date();
    return [d.getUTCHours(),":",d.getUTCMinutes(),":",d.getUTCSeconds(),":",d.getUTCMilliseconds()].join("");
}

// log of events in flash uploaders
function logFlashEvent(sEventDataObj){
    try{
      var eventDataObj = eval(sEventDataObj);        
      
      if(GetSwfVer != 'undefined'){
          eventDataObj.eFlashV = GetSwfVer();
      }   
          
      eventLogger(eventDataObj);
    }
    catch(e){}
}

// log of js errors in wizard
function logWizardError(wizardEventObj){
    try{
        var eDataObj = {
                    eModule:wizardEventObj.eModule,
                    eType:"error",
                    eName:"JS error",
                    eValue:wizardEventObj.eMsg,
                    eUserDetails:"userid:"+wizardEventObj.userId+";ldocs:"+wizardEventObj.ldocs,
                    eScriptURL:wizardEventObj.eURL,
                    eScriptLine:wizardEventObj.eLine,
                    eJobID:wizardEventObj.jobId
                    };      
        eventLogger(eDataObj);
    }
    catch(e){}    
}

// show user's details with Ctrl+Alt+7 shortkey
function showDebugDetails (event, detailsObj){
	if (!document.getElementById) return;
	if (window.event) event = window.event;
    
    if (event.ctrlKey){
      if(event.altKey){
        switch (event.keyCode ? event.keyCode : event.which ? event.which : null){
          case 55:
          
            var sDetails = '';
            var delim = '';
            for(var i in detailsObj){
                sDetails += delim + i + ": " + detailsObj[i]; 
                delim = '\n';
            }
          
            alert("Please copy information below (or make a screenshot of this window), and send it to email: support@snapily.com. We'll try to solve your problem. Thank you very much!\n\n" + sDetails);
            break;			
        }
      }
    }			
}