if (!window.fifthFinger)
{
    window.fifthFinger = new Object();
}

function EIsBrowserCompatible()
{
    if (!window.RegExp) return false;

    var AGENTS = ["firefox","mozilla","msie","netscape","opera","safari"];
    var agent = navigator.userAgent.toLowerCase();

    for (var i = 0; i < AGENTS.length; i++) 
    {
	var agentStr = AGENTS[i];
	if (agent.indexOf(agentStr) != -1) 
	{
	    var versionExpr = new RegExp(agentStr + "[ \/]?([0-9]+(\.[0-9]+)?)");
	    var version = 0;
	    if (versionExpr.exec(agent) != null)
	    {
		version = parseFloat(RegExp.$1);
	    }
	    if (agentStr == "firefox") return version >= 0.8;
	    if (agentStr == "msie") return (version >= 5.5 &&agent.indexOf("powerpc") == -1);
	    if (agentStr == "netscape") return version > 7;
	    if (agentStr == "opera") return version >= 7;
	    if (agentStr == "safari") return version >= 125;
	}
    }
    return !!document.getElementById;
}

function TabNext(obj, e,len,next_field)
{
    keycode = (e.keyCode||e.which);
    if ("0,8,9,16,17,18,37,38,39,40,46,".indexOf(keycode + ",") < 0)
    {
	    if (obj.value.length == len)
	    {
		    next_field.focus();
	    }
	}
}

function GoMobileWidget(params)
{
    if (!params || window.fifthFinger.widget)
    {
        return window.fifthFinger.widget;
    }
    window.fifthFinger.widget = this;
    
    this.entry = new WebEntry();
    this.parameters = params;
    
    this.submit = function()
	{
	    var entryParams = {"text": window.fifthFinger.widget.parameters.entryText,"entryInfo": window.fifthFinger.widget.buildEntryInfo()};
	    window.fifthFinger.widget.entry.submit(entryParams, window.fifthFinger.widget.submitCallback);
	}
	
    this.buildWidget = function()
    {
        var widgetDiv = document.createElement('div');
        widgetDiv.id = this.parameters.widgetId;
        widgetDiv.style.display = 'none';
        for (i in this.parameters.tags)
        {
            if (typeof this.parameters.tags[i] == 'object')
            {
                var tag = document.createElement('div');
                tag.id = this.parameters.tags[i].tagId;
                tag.setAttribute('class', 'tag');
                tag.setAttribute('className', 'tag');
                tag.innerHTML = this.parameters.tags[i].tagHTML;
                widgetDiv.appendChild(tag);
            }
        }
        
        for (i in this.parameters.fields)
        {
            if (typeof this.parameters.fields[i] == 'object')
	        {
                if (this.parameters.fields[i].showLabel != "false")
                {
                    var fieldLabel = document.createElement('div');
                    fieldLabel.id = this.parameters.fields[i].fieldId + 'Label';
                    fieldLabel.setAttribute('class', 'fieldLabel');
                    fieldLabel.setAttribute('className', 'fieldLabel');
                    fieldLabel.innerHTML = this.parameters.fields[i].fieldLabel;
                    widgetDiv.appendChild(fieldLabel);
                }
            
                var fieldInput = document.createElement('input');
                fieldInput.id = this.parameters.fields[i].fieldId;
                fieldInput.size = this.parameters.fields[i].fieldSize;
                fieldInput.setAttribute('maxlength', this.parameters.fields[i].fieldMaxLength);
                fieldInput.setAttribute('class', 'fieldInput');
                fieldInput.setAttribute('className', 'fieldInput');
                if (this.parameters.fields[i].autoTab != "false" && this.parameters.fields[i].fieldMaxLength)
                {
                    if (this.parameters.fields[parseInt(i)+1])
                    {
                        fieldInput.setAttribute('onKeyUp', "javascript:TabNext(this, event, "+this.parameters.fields[i].fieldMaxLength+", document.getElementById('"+this.parameters.fields[parseInt(i)+1].fieldId+"'))");
                    }
                }
                widgetDiv.appendChild(fieldInput);
            }
        }
        
        var submitBtn = document.createElement('div');
        submitBtn.setAttribute('class','submitBtn');
        submitBtn.setAttribute('className','submitBtn');
        submitBtn.widgetDiv = this;
        submitBtn.innerHTML = this.parameters.submitBtnText;
        submitBtn.style.cursor = 'pointer';
        submitBtn.onclick = this.submit;
        widgetDiv.appendChild(submitBtn);
        
        var statusBox = document.createElement('div');
        statusBox.setAttribute('class', 'statusBox');
        statusBox.setAttribute('className', 'statusBox');
        statusBox.style.display = 'none';
        widgetDiv.appendChild(statusBox);
        
        var statusBoxText = document.createElement('div');
        statusBoxText.setAttribute('class', 'statusBoxText');
        statusBoxText.setAttribute('className', 'statusBoxText');
        statusBoxText.innerHTML = 'Valid';
        statusBox.appendChild(statusBoxText);
        
        var statusBoxBtn = document.createElement('div');
        statusBoxBtn.setAttribute('class', 'statusBoxBtn');
        statusBoxBtn.setAttribute('className', 'statusBoxBtn');
        statusBoxBtn.innerHTML = 'Close';
        statusBoxBtn.style.cursor = 'pointer';
        statusBoxBtn.onclick = function()
        {
            statusBox.style.display = 'none';
        }
        statusBox.appendChild(statusBoxBtn);
        
        widgetDiv.statusBox = statusBox;
        widgetDiv.statusBoxText = statusBoxText;
        widgetDiv.statusBoxBtn = statusBoxBtn;
        
        document.getElementById(this.parameters.parent).appendChild(widgetDiv);
                
        return widgetDiv;
    }
    
    if (this.parameters)
    {
        this.widgetDiv = this.buildWidget();
    }
    
    this.buildEntryInfo = function()
    {
        var entryInfo = {};
        for (i in window.fifthFinger.widget.widgetDiv.childNodes)
        {
            var node = window.fifthFinger.widget.widgetDiv.childNodes[i];
            if ((node.tagName+'').toLowerCase() == 'input')
            {
                entryInfo[node.id] = node.value;
            }
        }
        var i = 1;
        if (entryInfo["phone1"])
        {
            entryInfo.phone = '';
        }
        while (entryInfo["phone"+i])
        {
            entryInfo.phone += entryInfo["phone"+i];
            entryInfo["phone"+i] = undefined;
            i ++;
        }
        return entryInfo;
    }
    
    
    this.clearInputFields = function()
    {
        for (i in window.fifthFinger.widget.widgetDiv.childNodes)
        {
            var node = window.fifthFinger.widget.widgetDiv.childNodes[i];
            if ((node.tagName+'').toLowerCase() == 'input')
            {
                node.value = '';
            }
        }
    }
    
    this.show = function()
	{
	    window.fifthFinger.widget.widgetDiv.style.display = '';	    
	}
	
	this.hide = function()
	{
	    window.fifthFinger.widget.widgetDiv.style.display = 'none';
	}
	
    this.toggleVisibility = function()
    {
        if (window.fifthFinger.widget.widgetDiv.style.display == 'none')
        {
            this.show();
        }
        else
        {
            this.hide();
        }
    }
	
    if (this.parameters && this.parameters.isVisible == "true")
    {
        this.show();
    }
    
    this.submitCallback = function(status, text)
	{
	    window.fifthFinger.widget.widgetDiv.statusBoxText.innerHTML = text;
	    window.fifthFinger.widget.widgetDiv.statusBox.style.display = '';
	    if (status == 'Valid')
	    {
	        window.fifthFinger.widget.clearInputFields();
	    }
	}
}

function WebEntry()
{
    this.baseUrl = 'http://services.air-cast.us/Proxy/gateway/webentry?certificateid=1vJzUtW8B7d5PT2iuPrkNm1Z%2bFeyFFg52NjdcDRb6HJvjnzPvmtj7FOKP45nJSPYcEbuGX97hxM%3d&Reference=';

    this.checkPhoneParam = function(params)
    {
        if (params.entryInfo.phone)
        {
            params.entryInfo.phone = params.entryInfo.phone.replace(/[^0-9]/g,'');
            switch (params.entryInfo.phone.length)
            {
                case 10:
                    params.entryInfo.phone = '1'+params.entryInfo.phone;
                    break;
                case 11:
                    break;
                case 12:
                    if (params.entryInfo.phone.charAt(0) == '+')
                    {
                        params.entryInfo.phone = params.entryInfo.phone.substring(1);
                    }
                    break;
                default:
                    break;
            }
        }
        return params;
    }

	this.submit = function(params, callback)
	{
	    params = this.checkPhoneParam(params)
	    
	    if (params.entryInfo.phone && params.entryInfo.phone.length != 11)
	    {
	        callback('InvalidCellNumber', 'The cell number you entered is not valid');
	        return;
	    }

	    if (!params.entryInfo.phone)
	    {
	        callback('InvalidCellNumber', 'Please enter your cell number.');
	        return;
	    }
        
	    var url = this.buildUrl(params);
        //create callback function
        var function_name = randomString(8);
        window[function_name] = function(response)
        {
            callback(response.web.message.entryInfo.ResultStatus, response.web.message.text);
        }
        
		//process service request
    	ProcessServiceRequest(url, function_name);
	}
	
	this.buildUrl = function(params)
	{
	    var url = this.baseUrl;
	    url += "&text=" + params.text;
	    if (params.entryInfo)
	    {
	        url += "&EntryInfo=<entryInfo>";
	        for (property in params.entryInfo)
	        {
	            url += "<"+property+">" + params.entryInfo[property] + "</"+property+">";
	        }
	        url += "</entryInfo>";
	    }
	    return url;
	}
}

function ProcessServiceRequest(url, callback)
{
    url += url.indexOf('?') == -1 ? '?' : '&';
    url += 'callback='+callback+'&output=json';

    scriptNode = document.createElement('script');
    scriptNode.type ='text/javascript';
    scriptNode.src = url;
    document.getElementsByTagName('head')[0].appendChild(scriptNode);
}

function randomString(string_length)
{
	var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}











GoMobilePinWidget.prototype = new GoMobileWidget();
GoMobilePinWidget.prototype.constructor = GoMobilePinWidget;

function GoMobilePinWidget(params)
{
    GoMobileWidget.call(this, params);
    this.entry = new WebSignUpEntry();
    
    var pinBox = document.createElement('div');
    pinBox.setAttribute('class', 'pinBox');
    pinBox.setAttribute('className', 'pinBox');
    pinBox.style.display = 'none';
    this.widgetDiv.appendChild(pinBox);
    
    var pinBoxText = document.createElement('div');
    pinBoxText.setAttribute('class', 'pinBoxText');
    pinBoxText.setAttribute('className', 'pinBoxText');
    pinBoxText.innerHTML = 'Valid';
    pinBox.appendChild(pinBoxText);
    
    var pinBoxInput = document.createElement('input');
    pinBoxInput.size = params.pinSize ? params.pinSize : 5;
    pinBoxInput.setAttribute('maxlength', params.pinSize ? params.pinSize : 5);
    pinBoxInput.setAttribute('class', 'pinBoxInput');
    pinBoxInput.setAttribute('className', 'pinBoxInput');
    pinBox.appendChild(pinBoxInput);

    var pinBoxBtn = document.createElement('div');
    pinBoxBtn.setAttribute('class', 'pinBoxBtn');
    pinBoxBtn.setAttribute('className', 'pinBoxBtn');
    pinBoxBtn.innerHTML = 'Submit';
    pinBoxBtn.style.cursor = 'pointer';
    pinBoxBtn.onclick = function()
    {
        var entryParams = {"pin": window.fifthFinger.widget.widgetDiv.pinInputBox.value ,"entryInfo": window.fifthFinger.widget.buildEntryInfo()};
	    window.fifthFinger.widget.entry.redeemPin(entryParams, window.fifthFinger.widget.pinCallback);
    }
    pinBox.appendChild(pinBoxBtn);
    
    this.widgetDiv.pinBox = pinBox;
    this.widgetDiv.pinBoxText = pinBoxText;
    this.widgetDiv.pinInputBox = pinBoxInput;
    this.widgetDiv.pinBoxBtn = pinBoxBtn;

    this.pinCallback = function(status, text)
	{
	    if (status == "Valid")
	    {
	        window.fifthFinger.widget.widgetDiv.statusBoxText.innerHTML = window.fifthFinger.widget.parameters.thankYouText ? window.fifthFinger.widget.parameters.thankYouText : 'Thanks';
            window.fifthFinger.widget.widgetDiv.statusBox.style.display = '';
	        window.fifthFinger.widget.widgetDiv.pinBox.style.display = 'none';
	        window.fifthFinger.widget.clearInputFields();
	    }
	    else
	    {
	        window.fifthFinger.widget.widgetDiv.pinBoxText.innerHTML = 'The pin you entered was invalid. Please try again.';
	    }
	}

	this.submitCallback = function(status, text)
	{
	    if (status == "InvalidCellNumber")
	    {
	        window.fifthFinger.widget.widgetDiv.statusBoxText.innerHTML = text;
	        window.fifthFinger.widget.widgetDiv.statusBox.style.display = '';
	    }
	    else
	    {
	        window.fifthFinger.widget.widgetDiv.pinBoxText.innerHTML = text;
	        window.fifthFinger.widget.widgetDiv.pinBox.style.display = '';
	    }
	}
	
	this.clearInputFields = function()
	{
       for (i in window.fifthFinger.widget.widgetDiv.childNodes)
        {
            var node = window.fifthFinger.widget.widgetDiv.childNodes[i];
            if ((node.tagName+'').toLowerCase() == 'input')
            {
                node.value = '';
            }
        }
        this.widgetDiv.pinInputBox.value = '';
	}
}

WebSignUpEntry.prototype = new WebEntry();
WebSignUpEntry.prototype.constructor = WebSignUpEntry;

function WebSignUpEntry()
{
    WebEntry.call(this);
    this.baseUrl = 'http://services.air-cast.us/Proxy/websignup/allocatepin?key=1vJzUtW8B7d5PT2iuPrkNm1Z%2bFeyFFg52NjdcDRb6HJvjnzPvmtj7FOKP45nJSPYcEbuGX97hxM%3d';

    this.redeemPin = function(params, callback)
    {
        this.baseUrl = 'http://services.air-cast.us/Proxy/websignup/redeempin?key=1vJzUtW8B7d5PT2iuPrkNm1Z%2bFeyFFg52NjdcDRb6HJvjnzPvmtj7FOKP45nJSPYcEbuGX97hxM%3d';
        this.submit(params, callback);
        this.baseUrl = 'http://services.air-cast.us/Proxy/websignup/allocatepin?key=1vJzUtW8B7d5PT2iuPrkNm1Z%2bFeyFFg52NjdcDRb6HJvjnzPvmtj7FOKP45nJSPYcEbuGX97hxM%3d';
    }

   	this.buildUrl = function(params)
	{
	    var url = this.baseUrl;
	    if (params.text)
	    {
	        url += "&text=" + params.text;
	    }
	    if (params.pin)
	    {
	        url += "&pin=" + params.pin;
	    }
	    url += "&phone=" + params.entryInfo.phone;
	    return url;
	}

}