// Too bad this doesn't seem to work... 
//document.getElementByTag("text").addEventListener("KeyPress",noEnter,false);
//document.getElementByTag("text").attachEvent("onKeyPress",noEnter);

function noEnter(e) 
{
    // This limitation should only apply to text fields, 
    // not textareas which do not submit a form via enter 
    // and in fact need to allow returns in their input
    if( window.event ) 
    {
        if( window.event.srcElement.type == 'text' || window.event.srcElement.type == 'password' ) 
        {
            return window.event.keyCode != 13;
        } 
        else 
        {
            return true;
        }
    }
}

    function limitChars(textid, limit)
    {
        var text = $('#'+textid+'_data').val();
        var text_override = $('#'+textid+'_override').is(':checked');
        if($('#'+textid+'_data').val().length > limit && !text_override)
        {
            $('#'+textid+'_data').val(text.substr(0,limit));
            document.getElementById(textid+'_data').scrollTop = 99999;
        }

        $("#textlimit_count_" + textid).text(limit - $('#'+textid+'_data').val().length);
    }

function textlimiter( div_id, max_length )
{
    if( $("#" + div_id + "_override").is(":checked") == false )
    {
        limitChars(div_id,max_length,div_id + '_override');
    }
    else
    {
        if( confirm ( 'You have reached the RECOMMENDED character limit\r\nfor this field. If you would like to OVERRIDE the\r\ncharacter counter and add additional text,\r\nplease click OK.\r\n\r\nYour proof will display EXACTLY how your text\r\nwill appear.\r\n\r\nNO CREDITS WILL BE GIVEN TOWARDS ORDERS\r\nTHAT WERE PLACED WITH ADDITIONAL TEXT.\r\n' ) )
        {
            return true;
        }
        else
        {
            limitChars(div_id,max_length,div_id + '_override');
            $('#' + div_id + '_override').attr('checked',false);
            return false;
        }
    }
}


function textCounter(field, countfield, maxlimit, override) 
{
    var override = override ? override : false;

    // These codes represent 1 character
    var temp = field.value.replace(/(\\\*|\*reg|\*tm|\*copy)/gi,"1");

    // These codes are for tagging only and don't represent any characters
    var temp = temp.replace(/\\[biu]/gi,"");

    // Find out how many characters don't count against the total
    var xtrachars = field.value.length - temp.length;

    // if too long...trim it!
    if( override == false && temp.length > maxlimit) 
    {
        field.value = field.value.substring(0, maxlimit + xtrachars);
        countfield.value = field.value.length;

    // otherwise, update characters left counter
    } 
    else 
    {
        countfield.value = maxlimit - temp.length;
    }

}

// 1 visible, 0 hidden
function toggleBox(szDivID, iState) 
{    
    //NN4+
    if(document.layers) 
    { 
       document.layers[szDivID].visibility = iState ? "show" : "hide";
    } 
    //gecko(NN6) + IE 5+
    else if(document.getElementById) 
    {
        var obj = document.getElementById(szDivID);
        obj.style.visibility = iState ? "visible" : "hidden";
    } 
    // IE 4
    else if(document.all) 
    {
        document.all[szDivID].style.visibility = iState ? "visible" : "hidden";
    }
}

// work in jquery the same way as it did in prototype?
// currently only called in xadmin
function toggle_display(id)
{
    if($(id).style.display != 'none')
    {
        $(id).style.display = 'none';
    }
    else
    {
        $(id).style.display = '';
    }
}

function refresh_sidebar_menu(perm_value, path, session, category_id)
{

    if(perm_value != '')
    {
        $.ajax({
            type: 'POST',
            data: {ajax: '1', permission_selection: perm_value},
            success: function(transport) 
            {

                if(path == '/next/template.php')
                {
                    var location = 'http://' + document.location.hostname + '/next/template.php?id_session=' + session + '&permission_selection=' + $('#available_states').val();

                    if(category_id)
                    {
                        location = location + '&category_id=' + category_id;
                    }
                    window.location.href = location;
                }
                else
                {
                    $('#sidebar_menu').html(transport);
                }
            },
            error: function(transport)
            {
                alert("An error occurred.");
            }
        });
    }
}

function js_submit ( go )
{
    document.siteForm.js_go.value = go;
    document.siteForm.submit();
}


function js_submit_redirect ( go, url )
{
    //document.siteForm.js_go.value = go;
    document.siteForm.submit();
    window.location = url;
}


function comp_reorder (orderid) 
{
    if(confirm('Are you sure you want to duplicate this order?')) 
    {
        window.open('/next/xadmin/orders/comp_reorder.php?id_order=' + orderid );
    }

}


//checks if a number is numberic or not
function IsNumeric(sText)
{
    var ValidChars = "0123456789.";

    //loop through the string passed in, iif its in the validchars list, continue, otherwise, return false
    for(i = 0; i < sText.length; i++) 
    { 
        if(ValidChars.indexOf(sText.charAt(i)) == -1) 
        {
            return false;
        }
    }

    return true;
}

function validateNumerical(evt)
{
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var regex = /[0-9,\.]/;
    if( !regex.test(key) )
    {
        theEvent.returnValue = false;
        if(theEvent.preventDefault)
        {
            theEvent.preventDefault();
        }
    }
}

// Removes leading whitespaces
function LTrim( value ) 
{
    var re = /\s*((\S+\s*)*)/;
    return value.replace(re, "$1");
}

// Removes leading and ending whitespaces
function trim( value ) 
{
    return LTrim(RTrim(value));
}

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
    var version;
    var axo;
    var e;

    // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

    try 
    {
        // version will be set for 7.X or greater players
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
        version = axo.GetVariable("$version");
    }
    catch (e)
    {}

    if(!version)
    {
        try
        {
            // version will be set for 6.X players only
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
            
            // installed player is some revision of 6.0
            // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
            // so we have to be careful. 

            // default to the first public version
            version = "WIN 6,0,21,0";

            // throws if AllowScripAccess does not exist (introduced in 6.0r47)
            axo.AllowScriptAccess = "always";

            // safe to call for 6.0r47 or greater
            version = axo.GetVariable("$version");

        }
        catch(e)
        {}
    }

    if (!version)
    {
        try 
        {
            // version will be set for 4.X or 5.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = axo.GetVariable("$version");
        } 
        catch (e) 
        {}
    }

    if (!version)
    {
        try
        {
            // version will be set for 3.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = "WIN 3,0,18,0";
        }
        catch (e) 
        {}
    }

    if (!version)
    {
        try 
        {
            // version will be set for 2.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            version = "WIN 2,0,0,11";
        } 
        catch (e) 
        {
            version = -1;
        }
    }
    
    return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer()
{
    // NS/Opera version >= 3 check for Flash plugin in plugin array
    var flashVer = -1;
    
    if(navigator.plugins != null && navigator.plugins.length > 0) 
    {
        if(navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) 
        {
            var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
            var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
            var descArray = flashDescription.split(" ");
            var tempArrayMajor = descArray[2].split(".");            
            var versionMajor = tempArrayMajor[0];
            var versionMinor = tempArrayMajor[1];
            var versionRevision = descArray[3];
        
            if (versionRevision == "") 
            {
                versionRevision = descArray[4];
            }
            
            if (versionRevision[0] == "d") 
            {
                versionRevision = versionRevision.substring(1);
            } 
            else if (versionRevision[0] == "r") 
            {
                versionRevision = versionRevision.substring(1);
            
                if (versionRevision.indexOf("d") > 0) 
                {
                    versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
                }
            }
            var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
        }
    }
    
    // MSN/WebTV 2.6 supports Flash 4
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
    // WebTV 2.5 supports Flash 3
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
    // older WebTV supports Flash 2
    else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
    else if ( isIE && isWin && !isOpera ) 
    {
        flashVer = ControlVersion();
    }    
    return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
    versionStr = GetSwfVer();
    
    if(versionStr == -1 ) 
    {
        return false;
    } 
    else if (versionStr != 0) 
    {
        if(isIE && isWin && !isOpera) 
        {
            // Given "WIN 2,0,0,11"
            tempArray         = versionStr.split(" ");     // ["WIN", "2,0,0,11"]
            tempString        = tempArray[1];            // "2,0,0,11"
            versionArray      = tempString.split(",");    // ['2', '0', '0', '11']
        } 
        else 
        {
            versionArray      = versionStr.split(".");
        }
        
        var versionMajor      = versionArray[0];
        var versionMinor      = versionArray[1];
        var versionRevision   = versionArray[2];

            // is the major.revision >= requested major.revision AND the minor version >= requested minor
        if (versionMajor > parseFloat(reqMajorVer)) 
        {
            return true;
        } 
        else if (versionMajor == parseFloat(reqMajorVer)) 
        {
            if (versionMinor > parseFloat(reqMinorVer))
                return true;
            else if (versionMinor == parseFloat(reqMinorVer)) 
            {
                if (versionRevision >= parseFloat(reqRevision))
                    return true;
            }
        }
        return false;
    }
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
      var str = '';

      if (isIE && isWin && !isOpera)
      {
        str += '<object ';
        
        for (var i in objAttrs)
        {
              str += i + '="' + objAttrs[i] + '" ';
        }
        
        str += '>';
    
        for (var i in params)
        {
              str += '<param name="' + i + '" value="' + params[i] + '" /> ';
        }
        
        str += '</object>';
      }
      else
      {
        str += '<embed ';
        
        for (var i in embedAttrs)
        {
              str += i + '="' + embedAttrs[i] + '" ';
        }
        str += '> </embed>';
      }
      
    document.write(str);
}

function AC_FL_RunContent()
{
    var ret = 
        AC_GetArgs
            (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
             , "application/x-shockwave-flash"
            );
      AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent()
{
    var ret = 
        AC_GetArgs
            (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
             , null
            );
      AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType)
{
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){    
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":    
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
function showTotalSelection(last_select_id, imagesetname, count, images_to_select) {
    var tcount = 0;
    for (tcount = 0; tcount < count; tcount++) {
        var check = document.getElementById(imagesetname + tcount);
        if (check.checked) {
            if (images_to_select > 0) {
                images_to_select--;
            }
            else
            {
                alert('You have selected the maximum number of images.');
                document.getElementById(last_select_id).checked = '';
            }
        }
    }
    document.getElementById('select_num_' + imagesetname).innerHTML = images_to_select;
}

function in_array (needle, haystack, argStrict)
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // +   input by: Billy
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
    var key = '',
        strict = !! argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
}

/* 
* FormChanges(string FormID | DOMelement FormNode)
 * Returns an array of changed form elements.
 * An empty array indicates no changes have been made.
 * NULL indicates that the form does not exist.
 *
 * By Craig Buckler,        http://twitter.com/craigbuckler
 * of OptimalWorks.net      http://optimalworks.net/
 * for SitePoint.com        http://sitepoint.com/
 * 
 * Refer to http://blogs.sitepoint.com/javascript-form-change-checker/
 *
 * This code can be used without restriction. 
 * 
 * http://www.sitepoint.com/detect-html-form-changes/
 * http://www.sitepoint.com/javascript-form-change-checker/
 */
function sitepoint_form_changes(form) {

    // get form
    if (typeof form == "string") form = document.getElementById(form);
    if (!form || !form.nodeName || form.nodeName.toLowerCase() != "form") return null;
    
    // find changed elements
    var changed = [], n, c, def, o, ol, opt;
    for (var e = 0, el = form.elements.length; e < el; e++) {
        n = form.elements[e];
        c = false;
        
        switch (n.nodeName.toLowerCase()) {
        
            // select boxes
            case "select":
                def = 0;
                for (o = 0, ol = n.options.length; o < ol; o++) {
                    opt = n.options[o];
                    c = c || (opt.selected != opt.defaultSelected);
                    if (opt.defaultSelected) def = o;
                }
                if (c && !n.multiple) c = (def != n.selectedIndex);
                break;
            
            // input / textarea
            case "textarea":
            case "input":
                
                switch (n.type.toLowerCase()) {
                    case "checkbox":
                    case "radio":
                        // checkbox / radio
                        c = (n.checked != n.defaultChecked);
                        break;
                    default:
                        // standard values
                        c = (n.value != n.defaultValue);
                        break;              
                }
                break;
        }
        
        if (c) changed.push(n);
    }
    
    return changed;

}

function jq_number_format(x)
{
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}

/*** MODIFIED : Nov 2, 2011 REFS #28901 **/ 
function js_redirect ( url, id_order, id_session )
{
	//alert("url: "+url+" id_order: "+id_order+"  id_session: "+id_session);
    window.location.href=url+"?id_session="+id_session+"&id_order="+id_order;
	
}
/** END OF MODIFICATION **/


