
// Prevents error if firebug console not available.
// @see http://getfirebug.com/console.html
if(!console){
    var console = new Object();
    console.log = function(){};
    console.info = function(){};
    console.warn = function(){};
    console.error = function(){};
    console.assert = function(){};
    console.dir = function(){};
    console.dirxml = function(){};
    console.trace = function(){};
    console.group = function(){};
    console.groupEnd = function(){};
    console.time = function(){};
    console.timeEnd = function(){};
    console.profile = function(){};
    console.profileEnd = function(){};
    console.count = function(){};
}

/**
 * For when we want to use fields 
 */
function addDefaulterField(fieldClassName, defValue){
     $$(fieldClassName).each(function(ie){


        // Page loads so set up default states:
        var defCol = ie.getStyle('color');
        var col = '#999999';
        startValue = ie.get('value');
        
        ie.store('isPassword', ie.get('type') == 'password');

        
        
        if(startValue == ''){
            
            ie.set('value', defValue);
            ie.setStyle('color', col);

            // 
            var isPass = ie.retrieve('isPassword');
            if(isPass){
                // @todo: Why not applying in IE? I have an answer but its
                // bad practice to swear in code comments, even about IE.
                ie.set('type', 'text');
            }
        }

        //
        ie.addEvent('blur', function(ev){

            // restore copy to default...
            if(ie.get('value') == ''){

                // if password box convert to ordinary text box to display
                // default value.
                var isPass = ie.retrieve('isPassword');
                if(isPass){
                    ie.set('type', 'text');
                }

                //
                ie.set('value', defValue);
                ie.setStyle('color', col);

            }

        });

        // links
        ie.addEvent('focus', function(ev){

            // clear copy...
            if(ie.get('value') == defValue){

                // check if was password box!
                // if so convert back to it.
                var isPass = ie.retrieve('isPassword');
                if(isPass){
                    ie.set('type', 'password');
                }

                //
                ie.set('value', '');
                ie.setStyle('color', defCol);

            }

        });  
    });
}

/*
<div class="fncSegmentRepeater">
    <div class="segment">
    <?= $this->fv->getErr('cfd_total-dial-in-vpn-connections'); ?>
        <div class="label"><label for="inptotaldialinvpnconnections">Number of dial-in VPN connections required?</label></div>
        <div class="input"><input id="inptotaldialinvpnconnections" name="cfd_total-dial-in-vpn-connections" class="<? if($rf['cfd_total-dial-in-vpn-connections']) echo "inpReq"?>" value="<?= $pms['cfd_total-dial-in-vpn-connections']; ?>" type="text" size="30" /></div>
        <hr />
    </div>
    <button class="fncSegmentRepeaterButAdd">Add another</button>
</div>
 */


// set up repeaters
// Popops for emailers
window.addEvent('domready', function(){

    var containers = $$('.fncFieldsetRepeater');

    if(!containers) return;
    containers.each(function(container){


        var fieldSets = container.getElements('fieldset');
        var addButs = container.getElements('.fncSegmentRepeaterButAdd');
        if(!fieldSets) return;
        if(!addButs) return;
        var totalFieldsets = fieldSets.length;


        addButs.each(function(addBut){
            
            addBut.addEvent('click', function(ev){
				
				ev.preventDefault();

                // Need to get new length of fieldsets each time so we can
				// increment the newly inserted one appropriately.
                var totalFieldsets = container.getElements('fieldset').length;
				
                //
                var ffSet = fieldSets[0];
                var fSetNew = ffSet.clone(true, true);

                var newSegs = fSetNew.getElements('.segment');
                if(!newSegs) return;

                newSegs.each(function(nSeg){

                    var lab = nSeg.getElement('label');
                    var inp = nSeg.getElement('input');
                    var sel = nSeg.getElement('select');
					
                    //  var hdr =

                    if(inp) inp.set('value', '');

                    if(sel) {
                        var isSelect = true;
                        inp = sel;

                        // Set val to empty -
                        // (@todo - take into account defaulter fields!)
                        inp.set('value', '');
                    }

                    // [Add 1 to the end of...]
                    var newInpID = inp.get('id').replace(/_[0-9]*$/g, '_' + (totalFieldsets));
                    var newInpName = inp.get('name').replace(/_[0-9]*$/g, '_' + (totalFieldsets));
                    var newLabFor = lab.get('for').replace(/_[0-9]*$/g, '_' + (totalFieldsets));
					
                    inp.set('id', newInpID);
                    inp.set('name', newInpName);
                    lab.set('for', newLabFor);
					
					
					
                });

                /*
                var headers = fSetNew.getElements('.fncNumberedHeader');
                headers.each(function(hdr){
                   var hHTML = hdr.get('html');
                   console.log(hHTML, ' - html content');
                   console.log(hHTML.replace(/[0-9]*\s*$/g, totalFieldsets), ' - replace');
                   hdr.set('html', hHTML.replace(/[0-9]*\s*$/g,  totalFieldsets));
                });
                */

                fSetNew.inject(addBut, 'before');
				
				// Deal with rep numbers (<span class="repNum">) that need to
                // be incremented by one.
                var repNums = fSetNew.getElements('.repNum');
                if(repNums){
                repNums.each(function(repNum){
                    var repNumHTML = repNum.get('html');
                    repNum.set('html', totalFieldsets + 1);
                });
                }  
				
            });

        }); // eof addButs

    });
});

// cancelMessage example: "Not deleted." if it was being used as a delete confirmation dialogue.
function confirmIt(message, cancelMessage, acceptURL){
    var confirmed = confirm(message);
    if(!confirmed){
        alert(cancelMessage);
    } else {
        window.location = acceptURL;
    }
    return;
}

/**
* @desc select options jump down jumps
*/
function selectLand(ref, target)
    {
    lowtarget=target.toLowerCase();
    if (lowtarget=="_self") {window.location=loc;}
    else {if (lowtarget=="_top") {top.location=loc;}
    else {if (lowtarget=="_blank") {window.open(loc);}
    else {if (lowtarget=="_parent") {parent.location=loc;}
    else {parent.frames[target].location=loc;};
    }}}
}

function selectJump(menu){
    ref=menu.actions.options[menu.actions.selectedIndex].value;
    splitc=ref.lastIndexOf("*");
    target="";
    if (splitc!=-1)
    {loc=ref.substring(0,splitc);
    target=ref.substring(splitc+1,1000);}
    else {loc=ref; target="_self";};
    if (ref != "") {selectLand(loc,target);}
}

function replace(string,text,by){
    // Replaces text with by in string
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}


function hideAddForm(){
    if(addFormSlide != null) addFormSlide.hide();
}



/**
*  AddOnload(myfunc) and AddOnloadEval(myfuncString) are used to stack up
*  onLoad events for execution.
*  AddOnload(myFunction1);
*  AddOnload(myFunction2);
*  etc.
*/
function AddOnload(myfunc){
    if(window.addEventListener)
        window.addEventListener('load', myfunc, false);
    else if(window.attachEvent)
        window.attachEvent('onload', myfunc);
}

/* Eval version so args can be passed too! */
function AddOnloadEval(myfuncString){
    myfunc = function(){
        eval(myfuncString);
    }
    AddOnload(myfunc);
}

//
var debOut = "";
function confirmDeleteAsset(
    acceptURL, callbackURL, assetID, assocObjectType, assocObjectID, assocObjectColName){
    
    var message = "Really delete this asset?";
    var cancelMessage = "Cancelled. Asset not deleted.";
    var confirmed = confirm(message);
    if(!confirmed){
        alert(cancelMessage);
    } else {
    
        var postStr = "acceptURL=" + acceptURL + "&";
        postStr += "callbackURL=" + callbackURL + "&";
        postStr += "assetID=" + assetID + "&";
        postStr += "assocObjectType=" + assocObjectType + "&";
        postStr += "assocObjectID=" + assocObjectID + "&";
        postStr += "assocObjectColName=" + assocObjectColName + "&";
        
        makePOSTRequest(acceptURL, postStr);  

    }
    return;
}


// Delete confirmation messages.
// cancelMessage example: "Not deleted." if it was being used as a delete confirmation dialogue.
function confirmIt(message, cancelMessage, acceptURL){
    var confirmed = confirm(message);
    if(!confirmed){
        alert(cancelMessage);
    } else {
        window.location = acceptURL;
    }
    return;
}

function flashConfirm(message, suppressReviewNow, reviewURL){
    reviewURL = reviewURL != null ? reviewURL : '/cart/';
    var elem = document.getElementById('flash_confirm_holder');
    if(elem){
        var html = "<div id='added_to_cart'>" + message;
        if(!suppressReviewNow) html += " <a href='" + reviewURL + "'>Review now?</a>"; 
        html += "</div>"; 
        elem.innerHTML = html;
    }
    
    var fxelem = $('added_to_cart');
    // alert(fxelem);
    
    var fx = new Fx.Styles(fxelem, {duration:400, wait:false});  
    
    fx.start({
        // 'margin-left': 5,
        'background-color': '#84A5A0'// ,
    });
}



/**
*
*/
function updateTBodyListOrder(sortedItemsTBodyElemID, postURL){
    var orderedIDArr = new Array();
    var idSpans = $$('#' + sortedItemsTBodyElemID + ' span.objid');
    for(var i = 0; i < idSpans.length; i++){ orderedIDArr.push(idSpans[i].innerHTML);}
    var csv = orderedIDArr.join(',');
    
    // get the empty postform and inject some vals to post.
    var postForm = $('listpostform');
    postForm.setProperty('action',  postURL);
    postForm.setProperty('method', 'post');
   
    var newOrderInp = new Element('input', {
        'type' : 'hidden',
        'name' : 'new_order',
        'value' : csv
    });
    
                             
    newOrderInp.inject(postForm);
    
    // post it
    postForm.submit();  
}

/**
* @desc hiddenInputID, hiddenInputValue are optional (used to carry an extra
* value if needed.)
*/
function inputWrite(
        inputID,
        anchorContainer,
        hiddenInputID,
        hiddenInputValue
    ){
    $(inputID).set('value', anchorContainer.get('html'));
    if((hiddenInputID != null) && (hiddenInputValue != null)){
    	$(hiddenInputID).set('value', hiddenInputValue);
    }
}

// Fix buttons passing contents rather than values in in IE
if(Browser.Engine.trident){ // if IE
    window.addEvent('domready', function(){
        $$('form button').each(function(el){
            if(el.get('type') == 'submit'){
                el.addEvent('click', function(e){

                    var form = el.getParent('form');
                    var hElem = new Element('input', {
                        'type': 'hidden',
                        'name': el.get('name'),
                        'value': el.attributes["value"].value
                    });

                    if(form){
                        hElem.inject(form);
                    }
                });
            }
        });
    });
}

/**
 * Get url param
 */
function getURLParam(name){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if(results == null) return '';
    return results[1];
}