function searchBox(boxID, prompt)
{
    //  Clear the search box
    var searchBox
    searchBox = document.getElementById(boxID);
    
    if (searchBox.value == prompt){
        searchBox.style.color = "black";
        searchBox.value = "";
    }
    else if (searchBox.value == ""){
        searchBox.style.color = "gray";
        searchBox.value = prompt;
    }
}

function swapImage(imageToChangeID, imageSRC)
{
    //  Swap image
    var imageToSwap
    imageToSwap = document.getElementById(imageToChangeID);
    
    imageToSwap.src = imageSRC;
}

function swapBG(imageToChangeID, imageSRC)
{
    //  Swap image
    var imageToSwap
    imageToSwap = document.getElementById(imageToChangeID);
    
    imageToSwap.style.backgroundImage = "url("+imageSRC+")";
}

function swapInnerHTML(elementID, newText)
{
    //  Swap inner HTML
    var element
    element = document.getElementById(elementID);
    
    element.innerHTML = newText;
}

function swapHref(elementID,newHref)
{
    var element
    element = document.getElementById(elementID);
    element.href = newHref;
}

function showBlock(element)
{
    var ele = document.getElementById(element);
    
    if (element == null)
        return;
        
    Effect.toggle(element, 'blind');
}

function inputStyle(inputID)
{
    //  Change style
    var inputBox
    inputBox = document.getElementById(inputID);

    if (inputBox.className == "inputOver")
    {
        inputBox.className = "inputOut";
    }
    else
    {
        inputBox.className = "inputOver";
    }
}    

function showHide(elementID)
{
    // Show or hide an element
    var element
    element = document.getElementById(elementID);
    
    if (element.style.display == "block")
    {
        element.style.display = "none";;
    }
    else
    {
        element.style.display = "block";;
    }
}

function confirmMsg(message)
{
    // Show a confirmation message
    
    if (confirm(message))
        return true;
    else
        return false;
}

function onClickMenu(elementID)
{
    var justChanged = true;
    
    var menu;
    menu = document.getElementById(elementID);
    
    // Show or hide an element
    var element;
    element = document.getElementById(elementID);
    
    if (element.style.display == "block")
    {
        element.style.display = "none";
    }
    else
    {
        element.style.display = "block";
    }
    
    menu.offclick = function(e)
    {
      if (!justChanged)
      {
        // Hide dropdown                                                                       
        menu.style.display = "none";
        
        removeEventBase(document, 'click', this.offclick, menu.id);
      }
      else
      {
        justChanged = false;
      }
    }.bind(menu);

    addEventBase(document, 'click', menu.offclick, menu.id);
}

function addEventBase(obj, type, fn, name_hash)
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
                obj["e"+type+fn+name_hash] = fn;
		obj[type+fn+name_hash] = function() { obj["e"+type+fn+name_hash]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn+name_hash] );
          
	}
}

// Limit text size in TextArea controls
function textAreaLimit(src, length){
    var taObj = src;
    if (taObj.value.length == length * 1) 
        return false;
}
// TextArea character counetrs
function textAreaCount(src, counter, length) { 
    var oTextArea = src;
    var oCounter = getObject(counter);
    if (oTextArea.value.length > length * 1)
        oTextArea.value = oTextArea.value.substring(0, length * 1);
    if (oCounter) 
        oCounter.innerHTML = length - oTextArea.value.length;
}
// Generic get object function
function getObject(obj) {
  var theObj;
  if(document.all) {
    if(typeof obj=="string") {
      return document.all(obj);
    } else {
      return obj.style;
    }
  }
  if(document.getElementById) {
    if(typeof obj=="string") {
      return document.getElementById(obj);
    } else {
      return obj.style;
    }
  }
  return null;
}

function selectItem(source, target) {
    var s = getObject(source); 
    var t = getObject(target); 
    t.value = s.options[s.selectedIndex].value; 
}

function getAttributeResults() {
    var warning =  getObject("lblSearchWarning");
    // Build list of selected attributes
    var params =  getSearchParams();
    
    if (params.length == 0) {
        return false;
    }

    if (params == "required"){
        hide_working();
        return false;
    }
    // Show the waiting dialog
    show_working('Searching parts by attributes');
    // Display waiting message 
    // warning.innerHTML = "Searching attributes, please wait...";
    
    // Put results in hidden form field
    var hf = getObject("ctl00_cph_hfAttributes");
    if (hf != null){
        hf.value = params;
    }

    // Clear any hidden manufacturer reference
    var hfmr = getObject("ctl00_cph_hfManRef");
    if (hfmr != null){
        hfmr.value = "";
    } 

    // Hide any existing results
    var prodList = getObject("attProductList"); 
    if (prodList != null){
        try{prodList.style.display = "none";}catch(e){} 
    }
    // Send postback 
    if (hf != null){
        __doPostBack("ctl00_cph_hfAttributes", params) ;
    }
}

function getSearchParams() {
    var attribCtrls = document.getElementById("attribCtrls"); 
    var ctls = attribCtrls.getElementsByTagName("select");
    var inpts = attribCtrls.getElementsByTagName("input");
    var paramList = ""; 
    var itemValue = ""; 

    var reqList = "";
    for (var i = 0; i < ctls.length; i++) { 
        if (ctls[i].className.indexOf("required")>-1){
            var parent = ctls[i].parentNode;
			var spans = parent.getElementsByTagName("span");
            var span = spans[0];
            reqList += "  " + span.innerHTML.substring(0, span.innerHTML.indexOf("&nbsp;", 0))+"\r\n";
        }
    }

    for (var i = 0; i < ctls.length; i++) { 
        var ctlValue = ""; 
        var ctlText = "";
        if (ctls[i].className.indexOf("required")>-1 && ctls[i].selectedIndex == -1){
            alert("Some mandatory information is missing...\r\n\r\nPlease select/highlight an item from the list(s):\r\n\r\n"+reqList);
            return "required";
        }
        if (ctls[i].selectedIndex > -1){
            ctlValue =  ctls[i].options[ctls[i].selectedIndex].value;
            ctlText =  ctls[i].options[ctls[i].selectedIndex].text;
        }
        else
            ctlValue = "0,0";
        if (ctlValue.substring(0,1) != "*"){
            itemValue = ctlValue;
            // if (itemValue == "Not-Important")
            //     paramList += i + ":Not-Important:Not-Important";
            if (itemValue == "Search All")
                paramList += i + ":Search All:Search All";
            else {
                if (ctlValue.indexOf(",") > 0)
                    paramList += i + ":" + ctlValue.substring((ctlValue.indexOf(",") + 1), (ctlValue.length)) + ":" + ctlText + "|";
                else
                    paramList += i + "::|";
            } 
        }
    }
    if (paramList.lastIndexOf("|") == paramList.length -1){
        paramList = paramList.substring(0, paramList.length - 1);
    }
   
    // trim attribute results to return 
   return  paramList.replace(/^\s+/,"");

}

// If the Manufacturers Reference textbox is displayed only
function getManufacturerResults(){
    var attribCtrls = document.getElementById("attribCtrls"); 
    var ctls1 = attribCtrls.getElementsByTagName("input");
    var warning =  getObject("lblSearchWarning");
    
    // Find the input and hidden length field 
    var manRef = "";
    var manRefLen = 0;
    var mr;
    var mrl; 
    for (var i = 0; i < ctls1.length; i++) { 
        if (ctls1[i].name.lastIndexOf("txtManRef") != -1)
            mr = ctls1[i];
        if (ctls1[i].name.lastIndexOf("hidManRefLen") != -1)
            mrl = ctls1[i];
    }
    if (mr != null)
        manRef = mr.value;
    if (mrl != null)
        manRefLen = parseInt(mrl.value);
    // Display validation warnings
    warning.innerHTML = "";
    if (manRef.length == 0){ 
        warning.innerHTML = "Please provide a manufacturers part number";
        hide_working();
        return;
    }
    if (manRef.length < manRefLen){ 
        warning.innerHTML = "Manufacturers part number must be at least " + manRefLen + " characters";
        hide_working();
        return;
    }
    // Manufactreres ref to return
    var hfmr = getObject("ctl00_cph_hfManRef");
    if (mr != null && hfmr != null){
        manRef = mr.value;
        hfmr.value = mr.value;
    } 
    // Display waiting message 
    warning.innerHTML = "Searching part numbers, please wait...";
    var results = getObject("attProductList");
    if (results != null)
        try{results.style.display = "none";}catch(e){} 
        //Effect.toggle(results, 'blind');
   
    // Send postback 
    if (manRef.length > 0){
        __doPostBack("ctl00_cph_hfManRef", mr.value) ;
    }
}

function addRelatedSku(skuId){
    var oQty = getObject("tbQuantity_"+skuId);
    if (oQty != null){
        var qty = oQty.value;
        var data = skuId + ":" + qty
        __doPostBack("AddRelatedSku", data) ;
    } 
}

function addNonListed(byEmail){
    var table = document.getElementById("tblNonListedAttrib"); 
    var ctls = table.getElementsByTagName("input");
    var msg = "";
    var paramList = ""; 
    var warning = getObject("lblNonListedWarning")
    var qty = getObject("attQty")
    warning.innerHTML = ""; // Clear previus warning
    for (var i = 0; i < ctls.length; i++) { 
        // validation
        if (ctls[i].id.indexOf("attItem") > -1){
            if (ctls[i].value == "")
                msg += ctls[i].value + "x";
            else
                paramList += i + ":" + ctls[i].value + "|";
        } 
    } 
    if (msg.length > 0){ 
        warning.innerHTML = "Please enter values for all attributes";
        return;
    }
    if (qty.length == 0){ 
        warning.innerHTML = "Please enter the quantity required";
        return;
    }
    if (paramList.lastIndexOf("|") == paramList.length -1){
        paramList = paramList.substring(0, paramList.length - 1);
    }
    // trim results to return 
    var hf = getObject("ctl00_cph_hfNonListed");
    if (hf != null){
        hf. value = paramList.replace(/^\s+/,"");
        if (byEmail)
            __doPostBack("AddNonListedEmail", paramList.replace(/^\s+/,"")) ;
        else
            __doPostBack("AddNonListed", paramList.replace(/^\s+/,"")) ;
    } 
}

function addNonListed_old(){
    var table = document.getElementById("tblNonListedAttrib"); 
    var ctls = table.getElementsByTagName("input");
    var msg = "";
    var paramList = ""; 
    var warning = getObject("lblNonListedWarning")
    var manRef = getObject("attManRef")
    var qty = getObject("attQty")
    warning.innerHTML = ""; // Clear previus warning
    for (var i = 0; i < ctls.length; i++) { 
        // validation
        if (ctls[i].id.indexOf("attItem") > -1){
            if (ctls[i].value == "")
                msg += ctls[i].value + "x";
            else
                paramList += i + ":" + ctls[i].value + "|";
        } 
    } 
    if (msg.length > 0 && manRef.value.length == 0){ 
        warning.innerHTML = "Please enter values for all attributes";
        return;
    }
    if (qty.length == 0){ 
        warning.innerHTML = "Please enter the quantity required";
        return;
    }
    if (paramList.lastIndexOf("|") == paramList.length -1){
        paramList = paramList.substring(0, paramList.length - 1);
    }
    // trim results to return 
    var hf = getObject("ctl00_cph_hfNonListed");
    if (hf != null){
        hf. value = paramList.replace(/^\s+/,"");
        __doPostBack("AddNonListed", paramList.replace(/^\s+/,"")) ;
    } 
}

// Code to display and maintain position of popup layer
var g_popup = null; var Ypos = 0; var Xpos = 0; 
var popTop = 0; var theTop = 0; var old = 0; var temp = null;

function show_working(msg)
{
    var overlay = document.getElementById("overlayWorking");
    overlay.style.height = f_documentHeight();
    overlay.style.display = "block";
    
    var obj = document.getElementById("working");
    positionObject(obj);
    
    if (msg.length > 0){
        var msgSpan = document.getElementById("workingMsg");
        msgSpan.innerHTML = msg;
    }
}

function hide_working() {
    var obj = document.getElementById("working");
    obj.style.display = "none";
    var objOverlay = document.getElementById("overlayWorking");
    objOverlay.style.display = "none";
}

function positionObject(obj)
{
    var winHeight = f_clientHeight();
    var scrollYPos = f_scrollTop();
    obj.style.top = (winHeight / 2) + scrollYPos + "px";
    
    var winWidth = f_clientWidth();
    var scrollXPos = f_scrollLeft();
    obj.style.left = (winWidth / 2) + scrollXPos + "px";
    
    obj.style.display = "block";
}

function showSku(id,cat) {
    showWaitMessage();
    g_popup = new PopupLayer("PopupMasterContainer","Product details...");
    //g_popup.center();
    var obj = document.getElementById("RowAddNonListed");
    if (obj != null)
        obj.style.display = "none";
   g_popup.open("/detail/" + cat + "/" + id + ".aspx","Product details...");
    g_popup.show();
    var obj = document.getElementById("PopupMasterContainer");
    positionLayer(obj); 
}

function showAlternates(id,cat) {
    showWaitMessage();
    g_popup = new PopupLayer("PopupMasterContainer","Alternative products...");
    //g_popup.center();
    var obj = document.getElementById("RowAddNonListed");
    if (obj != null)
        obj.style.display = "none";
    g_popup.open("/alternate/" + cat + "/" + id + ".aspx","Alternative products...");
    g_popup.show();
    var obj = document.getElementById("PopupMasterContainer");
    positionLayer(obj); 
}

function showNonListed(id) {
    showWaitMessage();
    g_popup = new PopupLayer("PopupMasterContainer","Add Non Listed item...");
    var obj = document.getElementById("RowAddNonListed");
    if (obj != null)
        obj.style.display = "none";
    g_popup.open("/nonlisted/" + id + ".aspx?params=" + getSearchParams(),"Add Non Listed item...");
    g_popup.show();
    var obj = document.getElementById("PopupMasterContainer");
    positionLayer(obj); 
}

function showHelp(title, topic) {
    // Test if the user has selected the mandatory items
    var itemSelected = true;
    if (topic == 'AttributeSearch'){
        var attribCtrls = document.getElementById("attribCtrls"); 
        var ctls = attribCtrls.getElementsByTagName("select");
        for (var i = 0; i < ctls.length; i++) { 
            if (ctls[i].className.indexOf("required")>-1 && ctls[i].selectedIndex == -1){
                itemSelected = false;
            }
        }
    }
    if (itemSelected == false) {
        javascript: window.open('/pdf/searchhelp.pdf');
    }
    else {
        showWaitMessage();
        g_popup = new PopupLayer("PopupMasterContainer", title);
        var obj = document.getElementById("RowAddNonListed");
        if (obj != null && itemSelected)
            obj.style.display = "block";
        g_popup.open("/help/" + topic + ".htm", title);
        g_popup.show();
        var obj = document.getElementById("PopupMasterContainer");
        positionLayer(obj);
    }
}

function showWaitMessage(){
    var obj = document.getElementById("PopupContent");
    if (obj != null){ 
        obj.innerHTML = "<p>Data loading...</p><p>Please wait...</p>";
    } 

}

function positionLayer(obj)
{
    var obj2 = document.getElementById("content");
	// Find the content offsetTop and offsetLeft relative to the BODY tag.
	var objLeft   = obj2.offsetLeft;
	var objTop    = obj2.offsetTop;
	var objParent = obj2.offsetParent;
	while(objParent != null) {
		objLeft  += objParent.offsetLeft;
		objTop   += objParent.offsetTop;
		objParent = objParent.offsetParent;
	}
    var pos = f_scrollTop();
    popTop = objTop - 100;
    obj.style.display = "block";
    obj.style.top = popTop + pos + 'px';
    obj.style.left = objLeft + 9 + 'px';
    moveBg();
}

function moveBg()
{
    var obj = document.getElementById("PopupMasterContainer");
    var overlay = document.getElementById("overlay");
    var pos = f_scrollTop();
//    if (pos < theTop) 
//        pos = theTop;
//    else 
//        pos += 0;
    //alert (pos);
    if (popTop + pos != old)
    {
        //obj.style.top = popTop + pos + "px";
        overlay.style.top = pos + "px";
        overlay.style.width = f_clientWidth() + "px";
        overlay.style.height = f_clientHeight() + "px";
    } 
    old = popTop + pos;
    if (overlay.style.display == "block")
        temp = setTimeout("moveBg()",100);
}

function hide_popup() {
    var obj = document.getElementById("PopupMasterContainer");
    obj.style.display = "none";
    var objOverlay = document.getElementById("overlay");
    objOverlay.style.display = "none";
}

function f_clientWidth(){
    try
    {
        if (window.innerWidth)
            return window.innerWidth;
        else if (document.documentElement && document.documentElement.clientWidth)
            return document.documentElement.clientWidth;
        else if (document.body)
            return document.body.clientWidth;
    }
    catch(e)
    {
        return 0;
    } 
}

function f_clientHeight(){
    try
    {
        if (window.innerHeight)
            return window.innerHeight;
        else if (document.documentElement && document.documentElement.clientHeight)
            return document.documentElement.clientHeight;
        else if (document.body)
            return document.body.clientHeight;
    }
    catch(e)
    {
        return 0;
    } 
}

function f_scrollTop(){
    try
    {
        if (window.pageYOffset)
            return window.pageYOffset;
        else if (document.documentElement && document.documentElement.scrollTop)
            return document.documentElement.scrollTop;
        else if (document.body)
            return document.body.scrollTop;
    }
    catch(e)
    {
        return 0;
    } 
}

function f_scrollLeft(){
    try
    {
        if (window.pageXOffset)
            return window.pageXOffset;
        else if (document.documentElement && document.documentElement.scrollLeft)
            return document.documentElement.scrollLeft;
        else if (document.body)
            return document.body.scrollLeft;
    }
    catch(e)
    {
        return 0;
    } 
}

function f_documentHeight()
{
    var doc_height = document.height ? document.height : 0; // Safari uses document.height

    if (document.documentElement && document.documentElement.scrollHeight) /* Strict mode */
        return Math.max(document.documentElement.scrollHeight, doc_height) + "px";
    else /* quirks mode */
        return Math.max(document.body.scrollHeight, doc_height) + "px";
}
    
