/*
 * jQuery NetSuite Language Selector Plugin 
 * Copyright (c) 2009 Blaine Horrocks
 * Version: 0.4
 *
 * 	Requires: 
 *		jQuery v1.3.2 or later
 *		WEB_nsl10n suitelet and custom localization table in your account
 *
 * 	API
 *
 * $('selector').nsl10n(opts)
 *		For each element found by the selector the nsl10n attribute value is collected.
 *		Each nsl10n can contain either an internal id or a string key value that acts as an index 
 *		into a custom localization table maintained in your netsuite account.
 *		The localization values returned replace the innerHTML of the corresponding elements
 * $('selector').nsl10nPlaceControl(opts)
 *		Puts a user localization control in the webpage.
 *		Either wraps or replaces the selected element(s) based on opts.targetIsWrapper value (false)
 * $.nsl10n.currentLocale() 
 *		Returns the current user locale (e.g.  en_CA )
 * $.nsl10n.baseLocale() 
 *		Returns the current user base locale (e.g.  fr )
 * $.nsl10n.hideOtherLocales() 
 *		Hides elements with class having "locale" 
 *           excluding those with class containing the user's baseLocale
 * 		Useful for larger blocks of text hard coded into a template
 * $.nsl10n.substitute()
 *		Convenience method to do $('[nsl10n]').nsl10n();
 *		Finds all elements with attribute "nsl10n" and substitutes their localizations
 */
(function(E){var G="0.3";function D(){if(window.console&&window.console.log){window.console.log("[nsl10n] "+Array.prototype.join.call(arguments," "));}}function F(){var N="en-us";if(navigator.userLanguage){N=navigator.userLanguage;}else{if(navigator.language){N=navigator.language;}}return N;}function I(N){var O=N==null?F():N.locale[0].v;E("head").each(function(S,R){var Q=R.firstChild;while(Q){if(Q.nodeType===8){var P=Q.nodeValue.match(/lang=([a-zA-Z_]+)/);if(P&&P.length>1){O=P[1];return false;}}Q=Q.nextSibling;}});return O;}function C(O){if(window.location.href.indexOf("?")>-1){var P=window.location.href.split("?")[1].split("&");for(var N=0;N<P.length;N++){if(P[N].indexOf(O+"=")>-1){return unescape(P[N].split("=")[1]);}}}return"";}function J(Q){var P=C("locale");if(P){return P;}var O=E("script[src*=NLUtil]");if(O&&O[0].src.indexOf("locale=")>-1){var N=O[0].src.indexOf("locale=")+7;return O[0].src.substring(N,O[0].src.indexOf(".",N));}P=I(Q);if(P){return P;}return F();}function M(P){if(null==P){return"";}var O="";O+=P.prefixString;var Q=J(P);if(P.isLinkUsed&&P.locale.length==2){O+="<a id='"+P.l10nId+"' title= 'Language/Langue' href='";O+=H(P);O+="' onclick=";O+='"'+L(P)+'" >';if(P.locale[0].v==Q){O+=P.locale[1].l;}else{O+=P.locale[0].l;}O+=" </a>";}else{O+="<form id='"+P.l10nId+"' onsubmit=";O+='"window.location.href="';O+=K(P)+'"';O+=" name='"+P.l10nId+"' method='post' >";O+="<select id='"+P.selectId+"' name='"+P.selectId+"' class='input' onchange=";O+='"'+L(P)+'"';O+="  onchange='' valuewhenrendered=''  >";for(var N=0;N<P.locale.length;N++){if(P.locale[N].v==Q){O+='<option value="'+P.locale[N].v+'" selected="selected" >'+P.locale[N].l+"</option>";}else{O+='<option value="'+P.locale[N].v+'">'+P.locale[N].l+"</option>";}}O+="</select></form>";}return O;}function L(O){var N="setWindowChanged(window,true);window.location.href='";if(O.isLinkUsed){N+=H(O);}else{N+=K(O);}return N;}function A(N,O){for(key in N){if(N[key]){E("[nsl10n="+key+"]").each(function(){if(E(this).is("input")){E(this).attr("value",N[key]);}else{E(this).html(N[key]);}});}}}function B(P){var O=window.location;var N=O.protocol+"//"+O.host+"/app/site/backend/setshopperlanguagelocale.nl?redirect=";N+=encodeURIComponent(O.pathname+O.search);N+="&amp;c="+E("input[name='c']").attr("value");N+="&amp;n="+E("input[name='n']").attr("value");return N;}function K(O){var N=B(O);N+="&amp;selshopperlanguage='+getSelectValue(document.forms['"+O.l10nId+"'].elements['"+O.selectId+"']);return false;";return N;}function H(P){var N=B(P);var O=(P.locale[0].v==J(P))?P.locale[1].v:P.locale[0].v;N+="&amp;selshopperlanguage="+O;return N;}E.fn.nsl10n=function(O){var R=E.extend({},E.nsl10n.defaults,O);E.nsl10n.defaults=R;var S={s:this.selector,c:this.context};var P=new Array();var Q=new Array();this.each(function(){var T=E(this).attr("nsl10n");isNaN(parseInt(T,10))&&E.trim(T).length>0?Q.push(E.trim(T)):P.push(parseInt(T,10));});var N=R.url+"&lang="+E.nsl10n.baseLocale();if(Q.length>0){E.get(N+"&ids="+Q.toString(),{byname:true},A,"jsonp");}if(P.length>0){E.get(N+"&ids="+P.toString(),{},A,"jsonp");}};E.fn.nsl10nPlaceControl=function(N){var O=E.extend({},E.nsl10n.defaults,N);E.nsl10n.defaults=O;return this.each(function(){if(O.targetIsWrapper){E(this).html(M(O));}else{E(this).replaceWith(M(O));}if(E("#languageportlet").length<1){E(this).hide();}});};E.nsl10n={currentLocale:function(){return J();},baseLocale:function(){var N=J().substr(0,2).toLowerCase();return N;},hideOtherLocales:function(){E(".locale").not("."+E.nsl10n.baseLocale()).hide();},substitute:function(){return E("[nsl10n]").nsl10n();}};E.nsl10n.defaults={locale:[{v:"en_CA",l:"English"},{v:"fr_FR",l:"Français"}],l10nId:"l10n_form",selectId:"l10n_select",prefixString:"&nbsp;|&nbsp;",targetIsWrapper:false,isLinkUsed:true,url:"https://forms.netsuite.com/app/site/hosting/scriptlet.nl?script=17&deploy=1&compid=935369&h=aa2a02e33f98de2c3732"};})(jQuery);
