/* Core scripts for telia.se */

if (typeof dojo != "undefined") {
	
	// Needed for webbguide and lightwindow (f.ex. leads, login)
	if(document.domain.indexOf('tcat') == -1 && document.domain.indexOf('tindra-admin') == -1 && document.domain.indexOf('tse-adm') == -1){
		document.domain="telia.se";
	}
	//dojo.require("tse.NodeList-form");
	dojo.require("dijit.form.Form");
	dojo.require("dijit.form.ComboBox");
	dojo.require("dojox.data.CsvStore");
	//dojo.require("tse.form.ComboBox");
	
var directSearchConnectionIsSetup = false;
	dojo.ready(function() {

		var pathInfo = location.pathname;
		var pathInfoParts = pathInfo.slice(1).split("/");
		
		function getQueryParameter(name) {
			name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
			var regexS = "[\\?&]"+name+"=([^&#]*)";
			var regex = new RegExp( regexS );
			var results = regex.exec( window.location.href );
			if (results == null) {
				return "";
			} else {
				return results[1];
			}
		}
		
		function debug(str) {
			try {
				if(typeof console != "undefined" && console.log) {
					console.log(str);
				} else {
					//alert(str);
				}
			} catch (e) {
				//ignore
			}
		}
		
		var msdebug="no";
		var debug_param = getQueryParameter("msdebug");
		//debug("debug_param: " + debug_param);
		if(debug_param != "") {
			msdebug=debug_param;
		}
		
		function markSelected(pathInfoParts, pathInfo) {
			if(pathInfoParts.length > 2) {
				dojo.query("#navLevel1Right li." + pathInfoParts[1]+" a").addClass("selected");
			}
			if(pathInfoParts.length > 3) {
                            var splitpoint = 5;
                            var locationhref = location.href.split('/')[splitpoint];
                            dojo.query("#navLevel2 li a").some(function(item) {
                                    var linkhref = item.href.split('/')[splitpoint];
									var a = locationhref.split('?');
									if(a[0] == "VisaProdukt.do") {
										var b = pathInfo.split('/');		
										for(i=0;i<b.length;i++) {
											var b1 = b[i];
											if(b1 == linkhref) {
												dojo.addClass(item.parentNode, "selected");
                                            	return true;	
											}
										}
									}
                                    if(linkhref == locationhref) {
                                            dojo.addClass(item.parentNode, "selected");
                                            return true;
                                    }
                            });
                        }
		};
		
		// HEADER: Mark active navigation items
		// ---------------------------------------------------------------------------------------------
		try {
			//console.log("Current path: " + pathInfo +", pathInfoParts: "+pathInfoParts.length);
			var productRef = getQueryParameter("productRef"); 
			if(productRef != "") {
				markSelected(productRef.slice(1).split("/"), productRef);
			} else {
				if(dojo.query("#adaptiveForm input[name=productRef]").length > 0) {
					productRef = dojo.query("#adaptiveForm input[name=productRef]").attr("value")[0]; 
					markSelected(productRef.slice(1).split("/"), productRef);
				} else {
					markSelected(pathInfoParts, pathInfo);
				}	
			}
		} catch(err) {
			if (typeof console != "undefined" && console.error) {
				console.error("Unable to mark navigation items: " + err.message);
			}
		}	
		
	// HEADER: Enable login pop-up via header button (only "privat" so far)
		// ---------------------------------------------------------------------------------------------
		if(dojo.query("#headerLoginButton").length > 0) {
			dojo.require("tse.lightwindow");
			dojo.query("#headerLoginButton").onclick(function(evt) {
				try {
					var target = evt.target;
					var x = evt.clientX, y = evt.clientY;
					evt.preventDefault();
					dojo.ready(function() {
						tse.lightwindow.showIframe("/privat/loggain/login_popup.page", {viewportPadding: 0, activationPosition: {x:x, y:y}});
					});
				} catch(err) {
					if (typeof console != "undefined" && console.error) {
						console.error(err.message);
					}
				}
			});
		}
		
		// HEADER: Shoppingcart summary
		// ---------------------------------------------------------------------------------------------
		dojo.query("#shoppingCartSummary").onclick(function(evt) {
			try {
				var target = evt.target;
				var x = evt.clientX, y = evt.clientY;
				evt.preventDefault();
				dojo.require("tse.lightwindow");
				dojo.ready(function() {
					if(pathInfoParts.length > 0) {
						tse.lightwindow.showIframe("/"+pathInfoParts[0]+"/kundvagn/cart_popup.page", {activationPosition: {x:x, y:y}});
					} else {
						tse.lightwindow.showIframe("/privat/kundvagn/cart_popup.page", {activationPosition: {x:x, y:y}});
					}
				});
			} catch(err) {
				if (typeof console != "undefined" && console.error) {
					console.error(err.message);
				}
			}			
		});

		// HEADER: Search-field effects
		// ---------------------------------------------------------------------------------------------
		if(msdebug=="1") {
			dojo.require("tse.form.ComboBox");

			dojo.ready(function() {
				//debug("debug 1: " + typeof tse.form.ComboBox);
				var headerAutocomplete = new tse.form.ComboBox({ 
					id: "query",
					name: "q",
					store: new dojox.data.CsvStore({
						url: "/tse/components/search/autocomplete-utf8.csv"
					}),
					autoComplete: false,
					hasDownArrow: false,
					placeHolder: "Sök på telia.se...",
					queryExpr: "*${0}*",
					pageSize: 7,
					fetchProperties: {
						sort: [{attribute:"Score",descending: true},{attribute:"Value",descending: false}]
					},
					searchAttr: "Value"
				},
				"query");
				dojo.connect(headerAutocomplete, "onKeyPress", function(evt) {
					switch(evt.charOrCode){
						case dojo.keys.ENTER:
							if(evt.target.form) {
								dojo.stopEvent(evt);
								evt.preventDefault();
								evt.target.form.submit();
							}
					}
				});
				dojo.query("#header div.search form a").connect("onclick",function(evt){
					var f = dojo.query("form[name='header_search']")[0];
					if(typeof f != "undefined"){
						evt.preventDefault();
						f.submit();
					}
				});
			});
		} else if(msdebug=="2") {
			dojo.require("tse.form.ComboBox");
	
			dojo.ready(function() {
				debug("debug 2: " + typeof tse.form.ComboBox);
				dojo.query("#header div.search form a").connect("onclick",function(evt){
					var f = dojo.query("form[name='header_search']")[0];
					if(typeof f != "undefined"){
						evt.preventDefault();
						f.submit();
					}
				});
			});
		} else {
			//debug("debug default");
                        
			// Override default highlightning method since it contains a bug
			var updatedHighlight = function(/*String*/label, /*String*/find){
					// summary:
					//		Highlights the string entered by the user in the menu.  By default this
					//		highlights the first occurence found. Override this method
					//		to implement your custom highlighing.
					// tags:
					//		protected

					// Add greedy when this.highlightMatch == "all"
					var modifiers = "i"+(this.highlightMatch == "all"?"g":"");
					var escapedLabel = this._escapeHtml(label);
					find = dojo.regexp.escapeString(find); // escape regexp special chars
					// Update: mark all occurencies
					var ret = escapedLabel.replace(new RegExp("("+find+")", modifiers),
							'<span class="dijitComboBoxHighlightMatch">$1</span>');
					return ret;// returns String, (almost) valid HTML (entities encoded)
				};
				
			var headerAutocomplete;

                        var ACStore = new dojox.data.CsvStore({
	                              url: "/tse/components/search/autocomplete-utf8.csv"
	                       });
	        
	      	        ACStore.comparatorMap = {};	      	
	      		      	        
                        ACStore.comparatorMap["Value"] = function(a,b) {
		      	   a=localeIndependentSortFix(a.toLowerCase());
		      	   b=localeIndependentSortFix(b.toLowerCase());
	        	   return a.localeCompare(b);
	      	        };

  	      	        //Javascript's localeCompare consider 'Ã' as a sibling to 'a' (a < Ã¤ < b) therefore this fix:  
          	      	function localeIndependentSortFix(str) {  
		      	     return str.replace("å","zz").replace("ä","zzz").replace("ö","zzz");
 	      	        }
	      	
	      	        ACStore.comparatorMap["Score"] = function(a,b) {
		      	     a=parseFloat(a);
		      	     b=parseFloat(b);
	        	     return (a-b);
	      	        };

			headerAutocomplete = new dijit.form.ComboBox({ 
					id: "query",
					name: "q",
					store: ACStore,
					autoComplete: false,
					hasDownArrow: false,
					placeHolder: "Sök på telia.se...",
					queryExpr: "*${0}*",
					pageSize: 7,
					fetchProperties: {
						sort: [{attribute:"Score",descending: true},{attribute:"Value",descending: false}]
					},
					searchAttr: "Value"
				},
				"query");
			
			dojo.mixin(headerAutocomplete,{
				doHighlight: updatedHighlight,
				filter: function(val) {
					// summary:
					// 		Help user by filter out confusing characters
					// 		This is done both here and server-side
					// tags:
					//		protected
					val = val.replace(/\"|\+|\-/g,"");
					val = val.replace(/^[ ]+|[ ]+$/g,"");	
					return val;
				}
			});
                        
                                            
			dojo.connect(headerAutocomplete, "onMouseDown", function() {			    
			  if (directSearchConnectionIsSetup == false){
			    dojo.connect(headerAutocomplete, "_selectOption", function(evt) {			      
                                var headerSearchForm = dojo.byId('header_search');
                                headerSearchForm.submit();		
			    });
			    directSearchConnectionIsSetup = true;			    
			  }			  
			});
                        
                        
			dojo.connect(headerAutocomplete, "onKeyPress", function(evt) {
				switch(evt.charOrCode){
					case dojo.keys.ENTER:
						if(evt.target.form) {
							dojo.stopEvent(evt);
							evt.preventDefault();
							evt.target.form.submit();
						}
				}                               
                                if (directSearchConnectionIsSetup == false){
				  dojo.connect(headerAutocomplete, "_selectOption", function(evt) {				    
                                    var headerSearchForm = dojo.byId('header_search');
                                    headerSearchForm.submit();                                    
				  });
				  directSearchConnectionIsSetup = true;				
				}			  
			});
			dojo.query("#header div.search form a").connect("onclick",function(evt){
				var f = dojo.query("form[name='header_search']")[0];
				if(typeof f != "undefined"){
					evt.preventDefault();
					f.submit();
				}
			});
		}
		
		// Lightwindow delegation
		// ---------------------------------------------------------------------------------------------
	dojo.connect(document.body, "onclick", function(ev) {
            try {
                var target = ev.target;
                var x = ev.clientX, y = ev.clientY;
                while(target && target.tagName) {
                    var tagname = target.tagName.toLowerCase();
                    if (tagname == "a") {
                        var linkhref = new dojo._Url(document.baseURI, target.getAttribute("href"))
						if(dojo.attr(target,"data-tse-lightwindow") != null){
							dojo.require("tse.lightwindow");
                            try {
                            	var args = dojo.attr(target,"data-tse-lightwindow");
                            	var options = {};
                            	if(args != ""){
	                        		options = dojo.fromJson(args);
                            	}
	                        	if(typeof console != "undefined" && console.log){
									console.log("tse.lightwindow item found: " + dojo.attr(target, "href") + ", arguments: " + args);
	                        	}
	                        	if(typeof options.matchProtocol == "undefined") {
	                        		options.matchProtocol = true;
	                        	}
								var linktarget = dojo.attr(target, "href");
	                        	if(linktarget.substr(0,4) == "http" && options.matchProtocol){
	                        		var protocol = document.URL.match(/^[^:]+/)[0];
									var scheme = linkhref.scheme;
						if(protocol != scheme  && target.id && target.id.startsWith("lw")) {
							// change protocol to scheme and add correct reference to which lightwindow button was pressed,
							// so that it can be opened again when the page is refreshed.
							window.location.replace(scheme + document.URL.split("#")[0].substring(protocol.length) + "#" + target.id);
							// Stop animation
							dojo.stopEvent(ev);
							return false;
						} else {
							linktarget = protocol + linkhref.toString().substring(scheme.length);
						}
	                        	}else if(linktarget.substr(0,1) == "#"){
									if(linkhref.fragment == null){
										linktarget = linkhref.uri + linktarget;
									}else{
										linktarget = linkhref.uri;
									}
								}
	                        	if(typeof options.activationPosition == "undefined") {
		                        	options.activationPosition = {x:x, y:y};
	                        	}
	                        	//console.log("todo: fire - " + linkhref + ", opts: " + dojo.toJson(options));
								dojo.ready(function() { 
	                        		tse.lightwindow.showIframe(linktarget, options);
								});
                            }
                            catch(err) {
                                if (typeof console != "undefined" && console.error)
                                    console.error("Unable to initialize lightwindow item: " + err.message);
                            }
                            ev.preventDefault();
                            break;
                        } 
                    }
                    target = target.parentNode;
                }
            }
            catch(err) {
                if (typeof console != "undefined" && console.error) {
                    console.error(err.message);
		}
            }
        });
	});
	}

