/*-----------------------------------------------------------------------------------------------*/
/*                                                                                               */
/* Script          : General Javascript functions.                                               */
/*                                                                                               */
/* Script Name     : jsfunc.js                                                                   */
/*                                                                                               */
/* System Name     : Oli                                                                         */
/*                                                                                               */
/* Author          : OTTO                                                                        */
/*                                                                                               */
/* Date            : 06/03/2007                                                                  */
/*                                                                                               */
/* Copyright       : (c) OTTO UK Ltd                                                             */
/*                                                                                               */
/* Description     : Contains generic javascript functions for the whole site.                   */
/*                                                                                               */
/* Version History                                                                               */
/*                                                                                               */
/* Version Date       Who     Description                                                        */
/* ------- ---------- -----   -----------                                                        */
/* 1.0     06/03/2007 otto    Original version.                                                  */
/* 1.1     29/03/2007 hstdc04 Added belt and braces check to see if get  element by id is        */
/*                            available to the DOM. If not, it is wrapped up in the document.all */
/*                            proprietary alternative.                                           */
/* 1.2     11/04/2007 hstdc04 Added more generic functions for displaying FAQ / help.            */
/* 1.3     13/04/2007 hstdc04 Added function to assist debugging.                                */
/* 1.4     08/06/2007 hstdc03 Added functions to open Status Popup window alogn with a generic   */
/*                            window opener.                                                     */
/* 1.5     11/06/2007 hstdc03 Included openWarrantyWindow from productdisplay.js.                */
/* 1.6     22/06/2007 hstdc04 Added function to open window with whole params.                   */
/* 1.7     09/07/2007 hstdc08 Made CheckSearchValue more robust by adding an else clause to      */
/*                            reset search criteria back to keyword search if not a possible     */
/*                            item code                                                          */
/* 1.8     20/08/2007 hstdc05 Added Handbag Emergency Cover warranty type to openWarrantyWindow. */
/*                                                                                               */
/*-----------------------------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------------------------*/ 
/* Prototype       : toDecimals                                                                  */
/* Params          : n - the number of decimals to go to.                                        */
/* Returns         : The number to n decimal places.                                             */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Displays the number instance to n decimal places where n is the parameter.  */
/*                   E.g.                                                                        */
/*                   var myNum = 23;                                                             */
/*                   var myNum.toDecimal(5); // Will return 23.00000                             */
/*-----------------------------------------------------------------------------------------------*/
Number.prototype.toDecimals = function(n)
{
    n = isNaN(n) ? 2 : n;
    var powerNum = Math.pow(10, n);
    function pad(s)
    {
        s = s||'.';
        return (s.length > n) ? s : pad(s + '0');
    }
    
    return isNaN(this) ? 
        this : (new String(Math.round(this * powerNum) / powerNum)).replace(/(\.\d*)?$/, pad);
}


// If get element by id not available then wrap it up in document.all
if (document.all && !document.getElementById) 
{
    document.getElementById = function(id) 
    {
        return document.all[id];
    }
}

MM_reloadPage(true);

rnd.today=new Date();
rnd.seed=rnd.today.getTime();

function rnd() {
        rnd.seed = (rnd.seed*9301+49297) % 233280;
        return rnd.seed/(233280.0);
};

function rand(number) {
        return Math.ceil(rnd()*number);
};

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function open_featurewindow(url) {
mywin = window.open(url,"wirWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=570,height=375,left=5,top=120');
}

function open_miniwindow(url) {
mywin = window.open(url,"wirWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=345,height=190,left=5,top=120');
}


function open_helpWin(url) {
mywin = window.open(url,"wirWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=580,height=360,left=5,top=120');
}

function open_gotta(){
mywin = window.open("gotta.asp","gottaWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=600,height=378,left=5,top=120');
mywin.location.href = "gotta.asp";
   if (mywin.opener == null) mywin.opener = window; 
mywin.opener.name = "opener";
}

function open_gottaInt(){
mywin = window.open("gotta_int.asp","gottaWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=600,height=378,left=5,top=120');
mywin.location.href = "gotta_int.asp";
   if (mywin.opener == null) mywin.opener = window; 
mywin.opener.name = "opener";
}

function open_Account(url) {
mywin = window.open(url,"AccWin",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=auto,resizable=yes,width=765,height=500,left=5,top=5');
}


function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function setCountry(Country) {
    //var nextyear = new Date();
    //nextyear.setFullYear(nextyear.getFullYear()+1);
    //document.cookie = "Country="+escape(Country) //+ "; expires=" + nextyear.toGMTString();
    //window.location.href="index.asp?cc="+Country
    window.location.href="index.asp";
    //alert(window.location.href);
}


function setSignup() {
    var nextyear = new Date();
    var signup = "yes";
    nextyear.setFullYear(nextyear.getFullYear()+1);
    document.cookie = "signup=" + escape(signup) + "; expires=" + nextyear.toGMTString();

}

function openFSwindow(fstype)
{
    var pname = "";
    pname = "mm_" + fstype + "_pop.asp";
    fswin = window.open(pname,'fswindow','scrollbars=no,width=740,height=480');
    
    /* Set the pop window to have focus, if it was successfully opened */
    if (fswin)
    {
        fswin.focus(); 
    }
}

function openMetafaq(mfUrl){
     window.name  = "mfOpener";
     winHandle    = window.open(mfUrl.href, "mfWindow","width=473,height=575,resizable=yes");

     /* Set the pop window to have focus, if it was successfully opened */
     if (winHandle)
     {
         winHandle.focus();
     }
     return false;
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : openMetafaq                                                                 */
/* Params          : mfUrl - The url to open.                                                    */
/* Returns         : False.                                                                      */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Opens the window to display the FAQ information.                            */
/*-----------------------------------------------------------------------------------------------*/ 
function openMetafaq(mfUrl)
{
    window.name = "mfOpener";
    winHandle = window.open(mfUrl.href, "mfWindow", "width=473, height=575, resizable=yes");
    
     /* Set the pop window to have focus, if it was successfully opened */
     if (winHandle)
     {
         winHandle.focus();
     }
    return false;
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : openStatus                                                                  */
/* Params          : p_v_url - The url to open.                                                  */
/* Returns         : False.                                                                      */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Opens the window to display the srtatus information.                        */
/*-----------------------------------------------------------------------------------------------*/ 
function openStatus(p_v_url) 
{
    var strParms = "width=520,height=595,resizable=no,scrollable=no";  
    return openWindowWithParams(p_v_url, "Status", strParms);
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : openWindowWithParams                                                        */
/* Params          : url - The url to open.                                                      */
/*                   name - the name of the window.                                              */
/*                   params - the params to open the window.                                     */
/* Returns         : False.                                                                      */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Opens the window to display the srtatus information.                        */
/*-----------------------------------------------------------------------------------------------*/ 
function openWindowWithParams(url, name, params) 
{    
    winHandle = window.open(url, name, params);
    
    /* Set the pop window to have focus, if it was successfully opened */
    if (winHandle)
    {
        winHandle.focus();
    }
    
    return false;
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : openWindow                                                                  */
/* Params          : url - The url to open.                                                      */
/* Returns         : False.                                                                      */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Opens the window to display the srtatus information.                        */
/*-----------------------------------------------------------------------------------------------*/ 
function openWindow(p_v_url, p_v_name, p_i_width, p_i_height, p_v_scrollable) 
{
    var strParms = "width= " + p_i_width + ",height=" + p_i_height + ",scrollable=" + p_v_scrollable;
    return openWindowWithParams(p_v_url, p_v_name, strParms);
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : openWarrantyWindow                                                          */
/* Params          : warrantyCode - the warranty code indicating the type of window to open.     */
/* Returns         : None.                                                                       */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Opens up the appropriate pop-up window for a warranty.                      */
/*-----------------------------------------------------------------------------------------------*/
function openWarrantyWindow(warrantyCode)
{
    var url = "";
    
    // Derive which page to open from the parameter.
    switch(warrantyCode.toLowerCase())
    {
        case "pr":
            url = "warranty-product-replacement-cover.html";
            break; 
        case "ew":
            url = "warranty-extended-cover.html";
            break;           
        case "fp":
            url = "warranty-furniture-protection.html";
            break; 
        case "hec":
            url = "handbag-emergency.html";
            break; 
        default:
            // Do nothing - we do not have a popup for this code.
            return;
    }
    
    // If got here then we have a window to open.
    var warrantyWin = 
        window.open(url, "myWindow", "status=1,toolbar=0,resizable=0,width=500,height=600,scrollbars=auto");

    if (warrantyWin)
    {
        warrantyWin.focus(); 
    }
}


/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : checkSearchValue                                                            */
/* Params          : myForm - The form containing the search function.                           */
/* Returns         : True if the search is allowed, otherwise false.                             */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Performs validation and formatting on the search function in the site       */
/*                   header.                                                                     */
/*-----------------------------------------------------------------------------------------------*/ 
function checkSearchValue(myForm) 
{
    // Ensure the search form has the elements we need.
    if (myForm && myForm.Ntt && myForm.searchType && myForm.Nty) 
    {
        var strSearch = myForm.Ntt.value;	
        	
        if ((strSearch == '')||(strSearch == 'Keyword or Item Number'))
        {
            return false;
        }

        
        // See if they are searching on a specific item code.	        	
        var strSearchNoSpaces = strSearch.replace(' ', '');
        
        var strFirstSixChars = strSearchNoSpaces.substr(0, 6);
        var valid1 = strFirstSixChars.search(/^\d{2}[A-Za-z]\d{3}$/); 
        var valid2 = strFirstSixChars.search(/^\d{6}$/);
        
        if (valid1 == 0 || valid2 == 0) 
        {
            // It is an item code so change the search elements accordingly.
            myForm.Ntt.value = strFirstSixChars;
            myForm.searchType.value = 'ItemCode';
            myForm.Nty.value = '0';
        } 
        else
        {
            // It is a keyword search so change the search elements accordingly.
            myForm.searchType.value = 'FullText';
            myForm.Nty.value        = '1';
        }   
        
        // If got here then search is OK to go ahead.
        return true;
    }
    else
    {
        // Missing elements - should not happen so do not search.
        return false;
    }
}

/*-----------------------------------------------------------------------------------------------*/ 
/* Function        : debugPrint                                                                  */
/* Params          : debugText - The text to display.                                            */
/*                   debugTitle - The title to display.                                          */
/*                   insertAtEnd - Whether to insert at end or beginning of document.            */
/* Returns         : None.                                                                       */
/*-----------------------------------------------------------------------------------------------*/
/* Description     : Creates a div element with debug parameter text and inserts it into the     */
/*                   DOM - less intrusive than alert box.                                        */
/*-----------------------------------------------------------------------------------------------*/ 
function debugPrint(debugText, debugTitle, insertAtEnd) 
{
    // Format the message for HTML, remove newlines and use breaks.
    debugText = debugText.replace(/\n/g, "<br />");
    
    // Build up the inner html.
    var template = 
        "<div style='width:100%;border:1px outset #fff;background-color:#C0C0C0;'>" +
            "<div onclick='this.parentNode.style.display=\"none\"' " +
              "style='width:100%;background-color:#00f;color:#fff;font-weight:bold;padding-left:5px;'>" +
                "%TITLE% (Click to Remove)" +
            "</div>" +
            "<div style='padding-left:5px;'>" +
                "%TEXT%" +
            "</div>" +
        "</div>";

    // Insert the title and text into placeholders.
    var toWrite = template.replace("%TEXT%", debugText);
    var toWrite = toWrite.replace("%TITLE%", debugTitle);

    // Create the div and insert it into the document.
    var div = document.createElement("div");
    div.setAttribute("id", "debugPrintArea");
    div.innerHTML = toWrite;

    // Create the new element and insert at the beginning or end.
    var body = document.getElementsByTagName("body")[0];
    if (body)
    {
        if (insertAtEnd) 
        {
            body.appendChild(div);
        }
        else
        {
            body.insertBefore(div, body.firstChild);  
        }
    }
}

/*-----------------------------------------------------------------------------------------------*/
/* ------------------------------------ End of Javascript -------------------------------------- */
/*-----------------------------------------------------------------------------------------------*/
