
var xmlDoc = null;
var gError = false;
var gSelected = false;


function DvrSelected()
{
    var index = document.getElementById("drpDvrType").selectedIndex; 
    var type = document.getElementById("drpDvrType").options[index].value;
    
    //Clear error
    var selectError = document.getElementById('selecterror');
            
    if(selectError)
        selectError.innerHTML = "";
        
    gError = false;
        
    HideDivs();
    if (type > 0)
    {         
        var url = "SystemTypeInfo.aspx?systype=" +  type;
        sendRequest(url, OnSelectedCallback);        
    }
    
}

function DvrChange()
{
    var btnSelect = document.getElementById('btnConfirmSelect');
    btnSelect.disabled = false;
}

function OnSelectedCallback(req)
{    
    if (req.readyState == 4)
    {
        if (req.status == 200)
        {
            LoadSystemTypeNode(req.responseText);
        }
    }    
}

function LoadSystemTypeNode(xmlText)
{
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	    xmlDoc.async="false";
	    xmlDoc.loadXML(xmlText);
 	}
 	else
 	{
 	    var parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlText,"text/xml");
 	}
 	
 	if (xmlDoc != null)
 	{
 	    var btnSelect = document.getElementById('btnConfirmSelect');
        if(null != btnSelect)
        {
            btnSelect.disabled = true;
        }
        gSelected = true;
        
        var type = xmlDoc.getElementsByTagName('system')[0];
        
        if (type != null)
        {        
 	        if (!DisplaySystemType(type))
 	        {
 	         	//Show error in messge panel 	   
                var msgPanelContent = document.getElementById('msgpanelcontent');            
                msgPanelContent.innerHTML = "An error has occured, please try again later or contact Qeeps Support";
                ChangeVisibility('msgpanel', 'visible');
                gError = true;
 	        } 	        
 	    }
 	    else
 	    {
 	        //Show error in messge panel 	   
            var msgPanelContent = document.getElementById('msgpanelcontent');            
            msgPanelContent.innerHTML = "An error has occured, please try again later or contact Qeeps Support";
            ChangeVisibility('msgpanel', 'visible');
            gError = true;
 	    }
 	}
 	else
 	{
 	    //Show error in messge panel
        var msgPanelContent = document.getElementById('msgpanelcontent');        
        msgPanelContent.innerHTML = "An error has occured, please try again later or contact Qeeps Support";
        ChangeVisibility('msgpanel', 'visible');
        gError = true;
 	}
}

function DisplaySystemType(type)
{
    var retVal = false;

    var serialNo = null;
    
    var serialType = type.getElementsByTagName('serialtype')[0].childNodes[0].nodeValue;    
    
    if (xmlDoc.getElementsByTagName('_serialno')[0] != null)
        serialNo = xmlDoc.getElementsByTagName('_serialno')[0].childNodes[0].nodeValue;
    
    var hiddenSn = document.getElementById('serialno');
    hiddenSn.value = ""; //Clear it
       
    //Options
    //0. Show serial number txtBox
    //1. Generate serial number and show it (tell the user what to do with it)
    //2. Generate serial number but don't show it 
    if (serialType == 0)
    {
        var models = type.getElementsByTagName('models')[0];
        
        if (models!=null)
            DisplayModelSelect(models);
               
        //Fill-in serial number if we have it       
        if (serialNo != null)
        {
            var txtSn = document.getElementById('txtsn');
            txtSn.value = serialNo;
            hiddenSn.value = serialNo;              
        }
    
        ChangeVisibility('serialinput', 'visible');  
        
        //Fill in the 'a' tag        
        var snHelpLnk = document.getElementById('snhelplnk');
        
        if (snHelpLnk != null)
        {            
            //<a href="play.aspx?url={$url}" onclick="window.open(this.href,'metadata', 'width=450, height=300, scrollbars'); return false"></a>
            snHelpLnk.href = "dvrhelp.aspx?systype=" + type.getAttribute('type');
            snHelpLnk.onclick = function() {window.open(this.href,'Help', 'width=450, height=300, scrollbars'); return false;}
        } 
        
        retVal = true;                        
    }
    else if (serialType == 1)
    {    
    // DONT SHOW THIS BY DEFAULT ANY MORE, ONLY USED FOR EVENTS WHICH ARE NOT ALLOWED BY DEFAULT            
//        var snPanelContent = document.getElementById('serialpanelcontent');
//        
//        if (snPanelContent != null)
//        {
//            //get the autogen text
//            var autogenText = "";
//            if (type.getElementsByTagName('autogentxt')[0] != null)
//                autogenText = type.getElementsByTagName('autogentxt')[0].childNodes[0].nodeValue;
//            
//            if (autogenText != "")                  
//                snPanelContent.innerHTML =  autogenText + "<br><br>";
//                
//            snPanelContent.innerHTML += serialNo + "<br><br>For more information click ";                        
//            
//            //Add help link              
//            var aTag = document.createElement("a");
//            aTag.setAttribute("href", "dvrhelp.aspx?systype=" + type.getAttribute('type') + "&serialno=" + serialNo);
//            aTag.innerHTML = "here";
//            aTag.className = "helplink";            
//            aTag.onclick = function() {window.open(this.href,'Help', 'width=450, height=300, scrollbars'); return false;}
//            
//            snPanelContent.appendChild(aTag);
//               
//            //document.getElementById('serialpanel').style.cssText += "top:0;";                         
//            ChangeVisibility('serialpanel', 'visible');          
//        }
        
        var models = type.getElementsByTagName('models')[0];
        if (models!=null)
            DisplayModelSelect(models);
             
        hiddenSn.value = serialNo;
        retVal = true;      
    }
    else if (serialType == 2)
    {    
        var msgPanelContent = document.getElementById('msgpanelcontent');

        
//        if (msgPanelContent != null)
//        {
//            var autogenText = "";
//            if (type.getElementsByTagName('autogentxt')[0] != null)
//                autogenText = type.getElementsByTagName('autogentxt')[0].childNodes[0].nodeValue;
//     
//            if (autogenText != "")       
//            {
//                msgPanelContent.innerHTML = autogenText + "<br><br>For more information click ";            
//                ChangeVisibility('msgpanel', 'visible');
//            }
//            
//            var aTag = document.createElement("a");
//            aTag.setAttribute("href", "dvrhelp.aspx?systype=" + type.getAttribute('type'));
//            aTag.innerHTML = "here";
//            aTag.className = "helplink";            
//            aTag.onclick = function() {window.open(this.href,'Help', 'width=450, height=300, scrollbars'); return false;}            
//        }
        
        var models = type.getElementsByTagName('models')[0];
        if (models!=null)
            DisplayModelSelect(models);
                                      
        hiddenSn.value = serialNo; 
        retVal = true;   
    }
    
     EnableTextBoxes();
     
    return retVal;    
}

function DisplayModelSelect(modelsXml)
{
    //get the containing div
    var modelSelect = document.getElementById('modelSelect');
    
    if (modelSelect!=null)
    {    
        var lstModels = document.getElementById('lstModels');
        
        if (lstModels!=null)
        {
            var cnt = modelsXml.childNodes.length;
            
            for(var i=0; i < cnt; ++i)
            {
                var model = modelsXml.childNodes[i];
                lstModels.options[i] = new Option(model.text, model.getAttribute('id'));
            }
                          
            ChangeVisibility(modelSelect.id, "visible") ;
        }
    }
}

//Called when 'next' button is clicked
function OnSubmit()
{
    if (gError)
        return false;

    var retVal = true;
    
    //Clear errors
    var snError = document.getElementById('snerror');
    var licenserError = document.getElementById('licenseerror');
    var selectError = document.getElementById('selecterror');
    
    if(selectError)
        selectError.innerHTML = "";
          
    if(snError)
        snError.innerHTML = "";
        
    if(licenserError)
        licenserError.innerHTML = "";
                
    var index = document.getElementById("drpDvrType").selectedIndex; 
    var type = document.getElementById("drpDvrType").options[index].value;
    
    if (gSelected)
    {        
        if (type > 0)
        {                  
            if (!ValidateSerialNo(type))                   
                retVal = false;        
                         
            if (!ValidateLicenseKey())
                retVal = false;
                
            if (!ValidateModelSelected())
                retVal = false;
        }
    }
    else
    {
        if(selectError)
            selectError.innerHTML = "You must select a DVR";
    
        retVal = false;
    }
    
    //if (retVal)HideDivs();
            
    return retVal;
}

function ValidateSerialNo()
{
    var retVal = false;    
    
    var type = xmlDoc.getElementsByTagName('system')[0];
    var serialType = type.getElementsByTagName('serialtype')[0].childNodes[0].nodeValue;
        
    if (serialType == 0)
    {
        var serialno = document.getElementById('txtsn');
        
        if (serialno != null)
        {   
            if (serialno.value == "")
            {                                
                //Show error
                var snError = document.getElementById('snerror');
                
                if(snError)
                    snError.innerHTML = "You must enter a serial number";
            }
            else
            {
                //Validate it
                var serialregex = type.getElementsByTagName('snregex')[0].childNodes[0].nodeValue;
                
                if (serialregex != null)
                {
                    var regex = RegExp(serialregex);
                    
                    if (regex.test(serialno.value))
                    {
                        retVal = true;
                        //Set the hidden field 'serialno'
                        var hidden = document.getElementById('serialno');
                        
                        if (hidden != null)
                            hidden.value = serialno.value;
                    }
                    else
                    {
                        //Show error
                        var snError = document.getElementById('snerror');
                        
                        if(snError)
                            snError.innerHTML = "Serial number entered is invalid";
                    }
                }
            }
        } 
    } 
    else
        retVal = true; //Serial number generated
                 	
	return retVal;	
}


function ValidateLicenseKey()
{
    var retVal = false;

    var license = document.getElementById('txtLicenseKey');
    
    if (license == null)
    {
        // This is hidden when autogenerated, so if its null just let it validate
        retVal = true;
    }
    else
    {    
        if (license.value == "")
        {
            //Show error
            var licenseError = document.getElementById('licenseerror');
            
            if(licenseError)
                licenseError.innerHTML = "You must enter a License key";
        }
        else
        {
            //Match XXXXXXXX-XXXXXXXX-XX
            var regex = /^[\w]{8}-[\w]{8}-[\w]{2}$/;
            
            if (regex.test(license.value))
                retVal = true;
            else
            {
                //Show error
                var licenseError = document.getElementById('licenseerror');
                
                if(licenseError)
                    licenseError.innerHTML = "License key entered is invalid";
            }
        }
    }
    
    return retVal;
}

function ValidateModelSelected()
{
    var retVal = false;
    var lstModels = document.getElementById('lstModels');
    
    if (lstModels!=null)
    {
        var hdnModelId = document.getElementById('modelId');
        
        if (hdnModelId)
        {        
            var cnt = lstModels.options.length;
            
            if (cnt > 0)
            {
                //The user must select a model            
                if (lstModels.selectedIndex >= 0)
                {
                    hdnModelId.value = lstModels.options[lstModels.selectedIndex].value;
                    retVal = true;                
                } 
                else
                {
                    //Show error
                    var mdlError = document.getElementById('mdlerror');
                
                    if(mdlError)
                        mdlError.innerHTML = "You must select a model";                    
                }  
            }
            else
            {
                hdnModelId.value = -1;
                retVal = true;
            }
        }        
    }
    
    return retVal;
}

function ChangeVisibility(id, visibility)
{
    var object = document.getElementById(id);    
     
    if (object != null)
    {
        object.style.visibility = visibility;
    
        if (visibility == "visible")
            object.style.display = "block";
        else
            object.style.display = "none";
    }           
}

function HideDivs()
{
    var divs = new Array("serialinput", "serialpanel", "msgpanel", "modelSelect", "panelError");      
    var index;
      
    for (index in divs)
    {
        var object = document.getElementById(divs[index]);
        if(null != object)
        {             
            object.style.visibility = "hidden";
            object.style.display = "none";                       
        }
    }  
    
    DisableTextBoxes();
}

function EnableTextBoxes()
{    
    var tb = document.getElementById('txtLicenseKey');
    if (tb != null) { tb.disabled = false; tb.style.background = '#ffffff'; }
    var tb = document.getElementById('txtInvActCode');
    if (tb != null) { tb.disabled = false; tb.style.background = '#ffffff'; }
    var tb = document.getElementById('txtPromoCode');
    if (tb != null) { tb.disabled = false; tb.style.background = '#ffffff'; }
    var tb = document.getElementById('txtInstallerCode');
    if (tb != null) { tb.disabled = false; tb.style.background = '#ffffff'; }
}

function DisableTextBoxes()
{
    var tb = document.getElementById('txtLicenseKey');
    if (tb != null) { tb.disabled = true; tb.style.background = '#eeeeee'; }
    var tb = document.getElementById('txtInvActCode');
    if (tb != null) { tb.disabled = true; tb.style.background = '#eeeeee'; }
    var tb = document.getElementById('txtPromoCode');
    if (tb != null) { tb.disabled = true; tb.style.background = '#eeeeee'; }
    var tb = document.getElementById('txtInstallerCode');
    if (tb != null) { tb.disabled = true; tb.style.background = '#eeeeee'; }
}


//Async postback stuff - copied from quirksmode.org
function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () { callback(req); }
	//if (req.readyState == 4) return;
	req.send(postData);
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

