/* Global variables */
var browser; // Global variable to store browser type
var isMac = 0; // Global variable to specify whether the client is running macos
var i; // Used in every for loop there ever was

/* Browser sniffer */

// Test if Mac
if(navigator.userAgent.indexOf("Mac") != -1) isMac = 1;

// Test for browser type
if(document.images){
    if(navigator.userAgent.indexOf("Opera") != -1) browser = "opera";
    else if(navigator.userAgent.indexOf("AOL") != -1) browser = "aol";
    else if(document.all && !document.getElementById) browser = "ie4";
    else if(document.all && document.getElementById) browser = "ie5";
    else if(document.layers) browser = "nn4";
    else if(document.addEventListener) browser = "nn6";
    else browser = 0;
} else browser = "v3";


/** Quote Form Functions *
*************************/

// dates for pre-filled date fields
var today = new Date();
var date = today.getDate();
if(String(date).length == 1) date = '0'+String(date); // Convert to two digits, if it's not.
var month = today.getMonth()+1;
if(String(month).length == 1) month = '0'+String(month); // Convert to two digits, if it's not.
var year = today.getFullYear();

function fillStartDate() {
	document.forms.yourdetails.cover_start_day.value = date;
	document.forms.yourdetails.cover_start_month.value = month;
	document.forms.yourdetails.cover_start_year.value = year;
}


function noscript(choice,elem) { /* Removes 'noscript' class from the class attribute of an element, leaving all other classes intact */
	
	/* reinstate with Postcode Finder */
	//if(elem == 'address'){ populateAddress(); }
	
	if(elem.indexOf('help')!=-1) { var help = true; } // Identify the Help messages
	
    // Find the element.
    if(!elem.nodeType || !elem.nodeType == 1) elem = document.getElementById(elem); // If it's not an element, try to use it as an ID
    
    if(!elem) return true; // Error - can't find element
	
    // Add/Remove noscript class
    var isNoscript  = elem.className.match(/(\s|^)noscript(\s|$)/); // Does element already have a noscript class?
	
	if(help) { // toggle Help messages on and off
		if(isNoscript) { var helpOn = 'no'; }
		else if(!isNoscript) { // if Help message is displayed, turn it off
			var helpOn = 'yes';
			choice = 'add';
		}
	}

   	if(isNoscript && choice == 'remove'){ // If it does have noscript class and we need to remove it then:
    	var newName = elem.className.replace(/\snoscript|noscript\s|noscript/,''); // Get a new classname that doesn't include noscript
    	elem.className = newName; // Replace classname with new classname
		if((help) && (helpOn == 'no')) {
			helpOn == 'yes';
		}
    } 
	else if(!isNoscript&&choice == 'add') {
		elem.className += ' noscript'; // Else if it doesn't and we need to add one then add one.
		if((help) && (helpOn == 'yes')) {
			helpOn == 'no';
		}
	}
    return false; // Return with no error.
}

function populateAddress() {
	a = document.getElementById('address_5');
	pt = document.getElementById('postcode_text');
	a.value = pt.value;
}

function namePartner() {
	var selected = document.forms.yourdetails.company_type.selectedIndex;
	if(selected == 5) { noscript('remove','partner'); } // if 'partnership' selected
	else { noscript('add','partner'); }	
}

function nameDrivers() {
	var selected = document.forms.yourdetails.drivers.selectedIndex;
	if(selected == 2) {
		for(i=1; i<5; i++) { noscript('add','driver_' + i); } // no named driver fields to appear
	}
	if(selected == 3 || selected == 9) {
		for(i=1; i<5; i++) { noscript('remove','driver_' + i); } // four named driver fields to appear
	}
	if(selected > 3 && selected < 7) { 
		noscript('remove','driver_1'); // only 1 named driver field to appear
		for(i=2; i<5; i++) { noscript('add','driver_' + i); } // others disappear
	}
	if(selected == 7) {
		for(i=1; i<3; i++) { noscript('remove','driver_' + i); } // two named driver fields to appear
		for(i=3; i<5; i++) { noscript('add','driver_' + i); } // others disappear
	}
	if(selected == 8) {
		for(i=1; i<4; i++) { noscript('remove','driver_' + i); } // three named driver fields to appear
		noscript('add','driver_4');  // others disappear
	}
}

function addClaims() {
	var selected = document.forms.yourdetails.add_claims.selectedIndex;
	if(selected == 2) {
		for(i=1; i<5; i++) { noscript('add','claim_' + i); } // no claim fields to appear
	}
	if(selected == 3) { 
		noscript('remove','claim_1');  // one claim field to appear
		for(i=2; i<5; i++) { noscript('add','claim_' + i); } // others disappear
	}
	if(selected == 4) {
		for(i=1; i<3; i++) { noscript('remove','claim_' + i); } // two claim fields to appear
		for(i=3; i<5; i++) { noscript('add','claim_' + i); } // others disappear
	}
	if(selected == 5) {
		for(i=1; i<4; i++) { noscript('remove','claim_' + i); } // three claim fields to appear
		for(i=4; i<5; i++) { noscript('add','claim_' + i); } // other disappears
	}
	if(selected == 6) {
		for(i=1; i<5; i++) { noscript('remove','claim_' + i); } // all claim fields to appear
	}
}

function transferSelected(fromId,toId) {
    fromElem = document.getElementById(fromId);
    toElem = document.getElementById(toId);
    
    // Cycle through options of the from element
    for(var i=0; i<fromElem.options.length; i++) {
        var current = fromElem.options[i];
        if(current.selected) { // If they are selected..
            toElem.appendChild(current.cloneNode(true)); // Add current option to destination select box
            fromElem.removeChild(current); // Remove current option from source select box
        }
    }
    
    
    
    return false;
}

function sortSelect(obj){
    var o = new Array();
    
    if(!hasOptions(obj)){
        return;
    }
    
    for(var i=0;i<obj.options.length;i++){
        o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
    }
    
    if(o.length==0){
        return;
    }
    
    o = o.sort(
        function(a,b){
            if((a.text+"") <(b.text+"")){
                return -1;
            }
            if((a.text+"") >(b.text+"")){
                return 1;
            }
            return 0;
        }
    );
    
    for(var i=0;i<o.length;i++){
        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
    }
}


/*
   openPopupPos creates a popup at (winnX, winnY)
*/
function openPopupPos (url, thewidth, theheight, winnX, winnY, params, insurance) {
    var aname = 'popup';

    if ( ! url ) {
        return true; // failed because no link to open!
    }

    if ( params ) {
        params = ',' + params;
    }

    str_WinParams = 'top=' + winnY+',left=' + winnX + params + ',width='+thewidth+',height='+theheight;

    thewindowobject = window.open(url,aname, str_WinParams);

    if ( thewindowobject ) {
        if (window.focus) thewindowobject.focus()
        return true;
    }
	//thewindowobject.document.forms['call_back'].elements['insurance'].value = insurance;

    return false; // failed
}

/*
   openPopup creates a centered popup
*/
function openPopup (url, thewidth, theheight, params, insurance) {
    var winX = 0;
    var winY = 0;
    var winnX = 0;
    var winnY = 0;

    if ( ! url ) {
        return true; // failed because no link to open!
    }

    if ( screen ) {
        if ( thewidth != 0 ) {
            var diffX = (screen.width-thewidth); /* don't want to do a division by 0 */
            if ( diffX > 0 ) winnX = diffX / 2;
        } else {
            thewidth  = screen.width - 10;
        }

        if ( theheight ) {
            var diffY = (screen.height-theheight);
            if ( diffY > 0 ) winnY = diffY / 2;
        } else {
            theheight = screen.height - 10;
        }
    } else {
        if ( ! thewidth ) thewidth   = 795;
        if ( ! theheight ) theheight = 595;
    }
    
    return openPopupPos(url, thewidth, theheight, winnX, winnY, params, insurance);
}

function check_is_internal_link (url, base_href) {
    if ( url && url.match(base_href) ) {
        return 1;
    }

    return 0;
}
function pageTimeout() {
    document.forms.yourdetails.mode.value='timeout';
    is_internal_link=1;
    document.forms.yourdetails.submit();
}
    function postcodeLookup(mode2) {
        if(mode2 == 'getList' && document.forms.yourdetails['postcode'].value=='') {
            showError('postcode');
            alert ('Please enter your postcode');
            return true;
        } else if(mode2 == 'getList' && checkPostcodeError(document.forms.yourdetails['postcode'].value)) {
            showError('postcode');
            alert ('Please check the format of your postcode');
            return true;
        //} else if (notNIpostcode(document.forms.yourdetails['postcode'].value)){ //check it's not a NI postcode
        //    alert ('Thank You for using Premierline Direct Ltd. Sorry we cannot give our customers from Northern Ireland a quote at this time <96> you may need to choose a more local insurer.');
        //    return true;
        }
        else if(mode2 == 'getAddress' && document.forms.yourdetails['addrMoniker'].value == '') {
            alert('Please select an address');
        }
        else {
            var xmlhttp = ajaxObject();
            if (xmlhttp) {
                var target =  document.getElementById("addressSection");
                xmlhttp.onreadystatechange=function() {
                    if(xmlhttp.readyState==4) {
                        target.innerHTML=xmlhttp.responseText;
                    }
                }
                var postcode="";
                var addrMoniker="";
                if (mode2 == 'getList' || mode2=='cantFindAddress') {
                    postcode = document.getElementById("postcode").value;
                } else if (mode2 == 'getAddress') {
                    addrMoniker= document.getElementById("addrMoniker").value;
                }
                var session=document.getElementsByName("session_key")[0].value;
                var quote=document.getElementsByName("quote_id")[0].value;
                xmlhttp.open("GET","/scripts/ajax/address.cgi?postcode="+postcode+"&quote_id="+quote+"&session_key="+session+"&mode2="+mode2+"&addrMoniker="+addrMoniker,true);
                xmlhttp.send(null);
                target.innerHTML='<table><tr><td class="lefthand" /><td colspan="3" class="helptext">Please wait....</td></tr></table>';
            } else {
                return false;
            }
        }
        return false;
}
function guessTrade(product, suffix) {
    var xmlhttp = ajaxObject();
    if (xmlhttp) {
        xmlhttp.onreadystatechange=function() { ajaxUpdate(xmlhttp,"tradeDescription"+suffix,"ajaxSuggestTrade");}
        var key=document.getElementById("tradeDescription"+suffix).value;
        if ((key.length >=3) || (key.length >=2 && product !='commercial_vehicle')) {
            xmlhttp.open("GET","/scripts/ajax/tradecode.cgi?product="+product+"&suffix="+suffix+"&key="+key,true);
            xmlhttp.send(null);
        } else {
            if (key.length == 0) {
                var prompt =  document.getElementById("ajaxSuggestTrade");
                if (prompt) {
                    prompt.style.display="none";
                }
                var mask = document.getElementById("selectmask");
                if (mask) {
                    mask.parentNode.removeChild(mask);
               }
            }
        }
    } else {
        return false;
    }
}
function allTrades(product_name, suffix) {
    var xmlhttp = ajaxObject();
    if (xmlhttp) {
        xmlhttp.onreadystatechange=function() { ajaxUpdate(xmlhttp,"tradeDescription"+suffix,"ajaxSuggestTrade");}
        xmlhttp.open("GET","/scripts/ajax/tradecode.cgi?product="+product_name+"&suffix="+suffix+"&key=",true);
        xmlhttp.send(null);
    } else {
        return false;
    }

}
function setTradeCode(tradecode,trade,suffix) {
    var baseRow = document.getElementById('traderow1');
    document.getElementById("trade_code"+suffix).value = tradecode;
    document.getElementById("tradeDescription"+suffix).value = trade;
    document.getElementById("tradeDescription"+suffix).className = 'readonly';
    document.getElementById("tradeDescription"+suffix).readOnly = true;
    document.getElementById("tradeDescription"+suffix).onkeyup = null;
    document.getElementById("ajaxSuggestTrade").style.display = 'none';
    var mask = document.getElementById("selectmask");
    if (mask) { mask.parentNode.removeChild(mask);}
    var addrow = document.getElementById("add_trade");
    if (addrow) { addrow.style.display = baseRow.style.display;}
    var addbutton = document.getElementById("addButton");
    if (suffix==3) {
        if (addbutton) { addbutton.disabled = true;}
        if (addrow) {addrow.style.visibility = 'hidden';}
    } else {
        if (addbutton) { addbutton.disabled = false;}
        if (addrow) {addrow.style.visibility = 'visible';}
    }
}
function clearTrade(suffix) {
var thisTrade=document.getElementById('tradeDescription'+suffix);
var nextTrade=document.getElementById('tradeDescription'+(suffix+1));
var thisTradeCode=document.getElementById('trade_code'+suffix);
var nextTradeCode=document.getElementById('trade_code'+(suffix+1));
var addrow = document.getElementById("add_trade");
if (nextTrade) {
    if (nextTrade.value && nextTrade.value != 'Type business description here') {
        thisTrade.value = nextTrade.value;
		thisTradeCode.value = nextTradeCode.value;
        clearTrade(suffix+1);
    } else {
        removeTrade(suffix);
        removeTrade(suffix+1);
    }
} else {
    removeTrade(suffix);
}
if (suffix != 1) {
        var addbutton = document.getElementById("addButton");
        if (addbutton) { addbutton.disabled = false;}
        if (addrow) {addrow.style.visibility = 'visible';}
} else {
	if (thisTrade.value && thisTrade.value != 'Type business description here') {
        var addrow = document.getElementById("add_trade_"+(suffix));
        if (addrow) { addrow.style.display = baseRow.style.display;}
	} else {
        var addbutton = document.getElementById("addButton");
        if (addbutton) { addbutton.disabled = true;}
        if (addrow) {addrow.style.visibility = 'hidden';}
	}
}
}
function removeTrade(suffix) {
    var row= document.getElementById('traderow'+suffix);
    var input= document.getElementById('tradeDescription'+suffix);
    var code= document.getElementById('trade_code'+suffix);
    var button= document.getElementById('clearButton'+suffix);
    if (suffix == 1) {
        if (input) {
            input.disabled = false;
            input.readOnly = false;
            input.value = 'Type business description here';
            input.onkeyup = function() {guessTrade(product_name,suffix)};
        }
    } else {
        if (row) {
            row.style.display ='none';
        }
        if (button) {
            button.disabled = true;
        }
        if (input) {
            input.disabled = true;
            input.value = "";
            input.className='empty_trade';
        }
        var baseRow = document.getElementById('traderow1');
        var addrow = document.getElementById("add_trade_"+(suffix));
        if (addrow) { addrow.style.display = baseRow.style.display;}
    }
    if (code) {
        code.value='';
    }
}
function addTrade() {
    var baseRow = document.getElementById('traderow1');
    var row2= document.getElementById('traderow2');
    var row3= document.getElementById('traderow3');
    var addrow = document.getElementById("add_trade");
    var suffix = -1;
    if (row2.style.display=='none') {
        suffix=2;
    } else if (row3.style.display=='none') {
        suffix=3;
    }
    if (suffix !=-1) {
        var row=document.getElementById('traderow'+suffix);
        var input= document.getElementById('tradeDescription'+suffix);
        var button= document.getElementById('clearButton'+suffix);
        if (row) {
            row.style.display = baseRow.style.display;
        }
        if (button) {
            button.disabled = false;
        }
        if (input) {
            input.disabled = false;
            input.readOnly = false;
            input.onkeyup = function() {guessTrade(product_name,suffix)};
        }
        var addbutton = document.getElementById("addButton");
        if (addbutton) { addbutton.disabled = true;}
        if (addrow) { addrow.style.visibility = 'hidden';}
    }
}
function quoteFocus(element) {

    if (element != focusedElement) {
        focusedPrevious = focusedElement;
        if (timeout) {
            clearTimeout(timeout)
        }
        timeout=setTimeout("pageTimeout()",1000*60*30);
        if (focusedPrevious) {
            if (/tradeDescription./.test(focusedPrevious.id)) {
                tradeBlur();
            }
        }
        if (/tradeDescription./.test(element.id)) {
            if (element.value.length >=2 && !element.readOnly && element.value !='Type business description here') {
             tradeUnBlur();
            }
        }
    }
    focusedElement = element;
}
function tradeUnBlur() {
    var suggest = document.getElementById("ajaxSuggestTrade");
    if (suggest) {suggest.style.display = 'block';}
    var mask = document.getElementById("selectmask");
    if (mask) { mask.style.visibility = 'visible';}
}
function tradeBlur() {
    var suggest = document.getElementById("ajaxSuggestTrade");
    if (suggest) {suggest.style.display = 'none';}
    var mask = document.getElementById("selectmask");
    if (mask) { mask.style.visibility = 'hidden';}
}
function getAbsPosition(element) {
    element = element.offsetParent;
    var position = new Array(2);
    position[0] =0;
    position[1] =0;
	if ( element.getBoundingClientRect) {
		var br = element.getBoundingClientRect();
		position[0] = br.left+document.documentElement.scrollLeft-2+document.body.scrollLeft;
		position[1] = br.top+document.documentElement.scrollTop+document.body.scrollTop;
	} else	{
	    while( element != null ) {
	        if (element.offsetLeft) {
        	    position[0] += element.offsetLeft;
    	    }
	        if (element.offsetTop) {
            	position[1] += element.offsetTop;
        	}
    		element = element.offsetParent;
    	}
	}
return position;
}
function pageTimeout() {
    document.forms.yourdetails.mode.value='timeout';
    is_internal_link=1;
    document.forms.yourdetails.submit();
}
    function postcodeLookup(mode2) {
        if(mode2 == 'getList' && document.forms.yourdetails['postcode'].value=='') {
            showError('postcode');
            alert ('Please enter your postcode');
            return true;
        } else if(mode2 == 'getList' && checkPostcodeError(document.forms.yourdetails['postcode'].value)) {
            showError('postcode');
            alert ('Please check the format of your postcode');
            return true;
        //} else if (notNIpostcode(document.forms.yourdetails['postcode'].value)){ //check it's not a NI postcode
        //    alert ('Thank You for using Premierline Direct Ltd. Sorry we cannot give our customers from Northern Ireland a quote at this time <96> you may need to choose a more local insurer.');
        //    return true;
        }
        else if(mode2 == 'getAddress' && document.forms.yourdetails['addrMoniker'].value == '') {
            alert('Please select an address');
        }
        else {
            var xmlhttp = ajaxObject();
            if (xmlhttp) {
                var target =  document.getElementById("addressSection");
                xmlhttp.onreadystatechange=function() {
                    if(xmlhttp.readyState==4) {
                        target.innerHTML=xmlhttp.responseText;
                    }
                }
                var postcode="";
                var addrMoniker="";
                if (mode2 == 'getList' || mode2=='cantFindAddress') {
                    postcode = document.getElementById("postcode").value;
                } else if (mode2 == 'getAddress') {
                    addrMoniker= document.getElementById("addrMoniker").value;
                }
                var session=document.getElementsByName("session_key")[0].value;
                var quote=document.getElementsByName("quote_id")[0].value;
                xmlhttp.open("GET","/scripts/ajax/address.cgi?postcode="+postcode+"&quote_id="+quote+"&session_key="+session+"&mode2="+mode2+"&addrMoniker="+addrMoniker,true);
                xmlhttp.send(null);
                target.innerHTML='<table><tr><td class="lefthand" /><td colspan="3" class="helptext">Please wait....</td></tr></table>';
            } else {
                return false;
            }
        }
        return false;
    }


