/**
 * JS Help Functions
 * Copyright 2011, Stephen Liu 
 * WiderFunnel Marketing Optimization 
 * Website: http://www.widerfunnel.com
 * 
 * Date: 2011-Oct-20
 */

// Widerfunnel Namespace
var _wf = _wf || {};

if (typeof _wf.debug === 'undefined') {
    _wf.debug = function(o) {
        if (window.console && window.console.log)
            window.console.log(o);
    }           
}      


if (typeof _wf._lib_widerfunnel === 'undefined') {        
    
    (function() {                    
        _wf._lib_widerfunnel = "2.2";  

        var REFERRER_COOKIE_KEY = "wf_referrer";        
        
        // Modded of http://www.quirksmode.org/js/cookies.html
        // can still be modded to add change path
        _wf.createCookie = function(name,value,days,domain) {
            var expires = "";
            if (days) {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                expires = "; expires="+date.toGMTString();
            }     
            var cookie = "";
            if (domain) {
                cookie = name+"="+value+expires+"; path=/; domain=" + domain;
            } else {
                cookie = name+"="+value+expires+"; path=/";
            }    
            document.cookie = cookie;
        };

        _wf.readCookie = function(name) {
            var nameEQ = name + "=";        
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
            }
            return null;
        };

        _wf.eraseCookie = function(name) {
            _wf.createCookie(name,"",-1);
        };

        _wf.setControlReferrer = function(r) {    
            if (r)
                _wf.createCookie(REFERRER_COOKIE_KEY, encodeURIComponent(r));
            else 
                _wf.eraseCookie(REFERRER_COOKIE_KEY);
        };

        _wf.getControlReferrer = function() {
            var r = _wf.readCookie(REFERRER_COOKIE_KEY);
            if (r) 
                return decodeURIComponent(r);            
            else 
                return null;
        };
       
        // Save referrer, then redirect
        _wf.controlPageRedirect = function(param, debug) {
            var d=document, l=location, s=l.search, h=l.href, arr=h.split("#"), url;       
            if (param.indexOf("wfvar=") === -1 ) {                 
                // Redirect to URL
                url = param + s;
            } else {
                // Redirect to same page, add ?wfvar=
                var qs = param; 
                url = h.indexOf("?") === -1 ? arr[0] + "?" + qs:  arr[0] + "&" + qs;
            }        
            // Save referrer for GA
            if (d.referrer) {                           
                _wf.setControlReferrer(d.referrer);            
            }                        
            
            if (debug) {
                _wf.debug("redirect url:" + url + l.hash);
            } else {
                l.replace(url + l.hash);
            }
        };           

        // Returns the combination order of a GWO test
        _wf.combination = function() {
            if (typeof utmx === 'function') {
                var combo = utmx('combination');
                if (typeof combo !== 'undefined') {
                    return "" + combo; 
                }
            }
            
            return null;
        };        
        
        // 1.7 Modified http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript
        _wf.getQueryStringValue = 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 decodeURIComponent(results[1].replace(/\+/g, " "));
            else
                return null;            
        };
        
        _wf.loadCSSFile = function(url) {            
            var css  = document.createElement("link");
            css.setAttribute("rel", "stylesheet");
            css.setAttribute("type", "text/css");
            css.setAttribute("href", url);
            document.getElementsByTagName("head")[0].appendChild(css);            
        };
        
        _wf.loadJSFile = function(src) {
            var script = document.createElement('script'); 
            script.type = 'text/javascript'; 
            script.async = true; 
            script.src = src;
            
            var s = document.getElementsByTagName('script')[0]; 
            s.parentNode.insertBefore(script, s);            
        };

        // Save referrer
        _wf.refOverride = null;                
        var ref = _wf.getControlReferrer();    

        if (ref !== null) {
            _wf.refOverride = ref;        
            _wf.setControlReferrer(null);            
        }        
        
    })(); // closure

} 


