/**
 * @author tapionlinna
 */

/*global self window unescape escape AppVersion swfobject SWFAddress */

/* Omniture control code */
var pt;
if(typeof(pt) == "undefined"){ pt={}; }


var jk = {
	//Status modes
	UNLOADED: 0,
	INITIALISED: 1,
	EMBEDDED: 2,
	PRELOADING: 3,
	LOADED: 4,
	
	//Visibility mode
	HIDDEN: 0,
	VISIBLE: 1
};
jk = {
	//Status modes
	UNLOADED: 0,
	INITIALISED: 1,
	EMBEDDED: 2,
	PRELOADING: 3,
	LOADED: 4,
	
	//Visibility mode
	HIDDEN: 0,
	VISIBLE: 1,
	
	//current status of jk library
	status: jk.UNLOADED,
	
	loadFlashFirst: !(self.document.location.hash.match(/.*#\/Etusivu\/(.+)/) !== null),
	
	debugLevel: 500,//the higher this value, the less debug messages are shown or captured 1 and 0 work now.
	debugLog: "",
	
	//Initialize the system
	init: function(){
		if(jk.cookie.get("debugLevel")!==""){
			jk.debugLevel = jk.cookie.get("debugLevel")*1;
		}
		
		if (jk.status===jk.UNLOADED) {
			jk.utils.debug("participant Flash");
			jk.utils.debug("participant JS");
			jk.utils.debug("participant Flex");
			
			
			if (jk.loadFlashFirst) {
				//Report page load with JS
				jk.utils.reportTag("/Jokakoti/Etusivu");
				
				jk.utils.debug("note over Flash,JS,Flex:pageload: root, starting with Flash");
				jk.flex.preloadNotify.hide();
				jk.flex.disableSwfObjectAutoHideShow = true;
				jk.flash.init();
				var onFlexLoad = function(){
						jk.status = jk.LOADED;
					};
				jk.flex.eventListeners.loaded.all.push({func:onFlexLoad,params:null});
			}else {
				jk.utils.debug("note over Flash,JS,Flex:pageload: not root, starting with Flex");
				jk.flex.preloadNotify.show();
				jk.flash.swfLoadHeight = "1";
				jk.flex.disableSwfObjectAutoHideShow = true;
				
				jk.flash.hide();
				jk.flash.objRef().style.overflow = "hidden";
				jk.flex.objRef().focus();
				jk.utils.debug("note over JS:Hiding flash");
				
				var onFlexPreloading = function(){
						jk.flex.showPreload();
						jk.flex.preloadNotify.hide();
					};
				var onFlexLoaded = function(){
						jk.utils.debug("note over JS:Waiting 5s before loading flash");
						window.setTimeout(jk.flash.init,5000);
					};
				var onFlashLoaded = function(){
						jk.flex.preloadNotify.hide();
						window.setTimeout(function(){
							//jk.flash.hide();
							jk.flash.swfLoadHeight = "100%";
							//jk.flash.objRef().height=jk.flash.swfLoadHeight;
							//jk.utils.debug("note over JS:Hiding flash 2");
						},1);
						
						jk.status = jk.LOADED;
					};
				jk.flex.eventListeners.preloading.all.push({func:onFlexPreloading,params:null});
				jk.flex.eventListeners.loaded.all.push({func:onFlexLoaded,params:null});
				jk.flash.eventListeners.loaded.all.push({func:onFlashLoaded,params:null});
				
				jk.flex.init();
			}
			document.getElementsByTagName("body")[0].className="jsEnabled";
			var h = document.getElementsByTagName("html");
			if(h.length > 0){
				h[0].style.overflow="hidden";
			}
			jk.status = jk.INITIALISED;
		}
	},
	
	
	flash: {
		disableSwfObjectAutoHideShow:false,
		status: jk.UNLOADED,
		containerId: "flashContent",
		swfLoadHeight:"100%",
		
		visibility: jk.VISIBLE,
		
		objRef: function(){
			return jk.$(jk.flash.containerId);
		},
		
		init: function(){
			if (jk.flash.status === jk.UNLOADED) {
				jk.utils.debug("JS-->Flash:embedSWF");
				var swfLocation = "swf/jokakoti2.swf?version=" + AppVersion;
				var containerId = jk.flash.containerId;
				var width = "100%";
				var height = jk.flash.swfLoadHeight;
				var version = "9.0.28";
				var expressInstall = null;
				//var expressInstall = "swfobject/expressInstall.swf"
				var flashvars = {
					swfurl: "swf/",
					bgurl: "img/Tausta_56Kb.jpg",
					bgscalemode: "bottom",
					bgaspectmode: "original",
					advurl: "swf/advSearch.swf",
					version: AppVersion
				};
				var params = {
					allowScriptAccess: "always"
				};
				var attributes = {
					id: containerId,
					name: containerId
				};
				var callBackFn = jk.flash.onEmbed;
				if (jk.flash.disableSwfObjectAutoHideShow) {
					
					swfobject.switchOffAutoHideShow();
				}
				swfobject.embedSWF(swfLocation, containerId, width, height, version, expressInstall, flashvars, params, attributes, callBackFn);
				
				jk.utils.debug("note over Flash:initialized");
				jk.flash.changeStatus(jk.INITIALISED);
			}
		},
		show: function(){
			
			var func = function(){
					if (jk.flash.visibility !== jk.VISIBLE) {
						jk.flex.hide();
						jk.flash.objRef().style.height = "100%";
						jk.flash.objRef().focus();
						
						jk.utils.debug("note over JS: Hide flex, show flash");
						
						//Report page load with JS
						jk.utils.reportTag("/Jokakoti/Etusivu");
				
						//ie8 bugs, lets go around it
						jk.utils.wakeUpIE8();
						jk.flash.visibility = jk.VISIBLE;
						try {
							//jk.flash.objRef().flex2js_showFlash();
							jk.flash.call("flex2js_showFlash");
						} 
						catch (error) {
							jk.utils.debug("note over Flash: flex2js_showFlash failed");
							//failed
						}
					}
				};
			if(jk.flash.status===jk.LOADED){
				func();
			}else{
				jk.flash.eventListeners.loaded.all.push({func:func,params:null});
			}
			
		},
		hide: function(){
			jk.flash.objRef().style.height = "1px";
			//jk.flash.objRef().style.overflow = "hidden";
			jk.flash.visibility = jk.HIDDEN;
		},
		call: function(func, params1, params2, params3){
			var obj = jk.flash.objRef();
			if (obj[func] === undefined) {
				jk.utils.debug("note over JS: Tried to call Flash." + func + "(), but no such method exists");
				return false;
			}
			switch(arguments.length){
				case 1:
					jk.utils.debug("JS->Flash:" + func + "(" + ")");
					return obj[func]();
				case 2:
					jk.utils.debug("JS->Flash:"+func+"("+params1+")",params1);
					return obj[func](params1);
				case 3:
					jk.utils.debug("JS->Flash:"+func+"("+params1+","+params2+")",params1,params2);
					return obj[func](params1, params2);
				case 4:
					jk.utils.debug("JS->Flash:"+func+"("+params1+","+params2+","+params3+")",params1, params2, params3);
					return obj[func](params1, params2, params3);
					
			}
		},
		presearch: function(params){
			var func = function(params){
					try {
						jk.flash.call("flex2flash_search",params);
					}catch(error){
						jk.utils.debug("note over Flash: flex2flash_search failed");
					}
				};
			if(jk.flash.status===jk.LOADED){
				func(params);
			}else{
				jk.flash.eventListeners.loaded.all.push({func:func,params:params});
			}
		},
		onEmbed: function(event){
			if (event.success) {
				jk.flash.changeStatus(jk.EMBEDDED);
			}else{
				//failed embedding!!!
				jk.utils.debug("note over Flash: embedding Flash failed");
			}
		},
		onLoadBegin: function(){
			if(jk.flex.status===jk.UNLOADED){
				jk.flex.init();
			}
			if (jk.flash.status <= jk.PRELOADING) {
				jk.flash.changeStatus(jk.PRELOADING);
			}
		},
		onLoadComplete: function(){
			var func = function(){
					try {
						//jk.flex.objRef().flash2flex_isReady();
						jk.flex.call("flash2flex_isReady");
					}catch(error){
						jk.utils.debug("note over Flash: flash2flex_isReady failed");
						//fail
					}
				};
			if(jk.flex.status===jk.LOADED){
				func();
			}else{
				jk.flex.eventListeners.loaded.all.push({func:func,params:null});
			}
			jk.flash.changeStatus(jk.LOADED);
		},
		changeStatus:function(newStatus){
			switch(newStatus){
				case jk.INITIALISED:
					jk.flash.triggerEvent("initialized");
					break;
				case jk.EMBEDDED:
					jk.flash.triggerEvent("embedded");
					break;
				case jk.PRELOADING:
					jk.flash.triggerEvent("preloading");
					break;
				case jk.LOADED:
					jk.flash.triggerEvent("loaded");
					break;
			}
			jk.flash.status = newStatus;
		},
		eventListeners:{
			initialized:{one:[],all:[]},
			embedded:{one:[],all:[]},
			preloading:{one:[],all:[]},
			loaded:{one:[],all:[]}
		},
		triggerEvent:function(functions){
			var i;
			var f=jk.flash.eventListeners[functions];
			for(i in f.all){
				if(typeof f.all[i] !== "function"){
					try {
						f.all[i].func(f.all[i].params);
					}catch(error1){
						jk.utils.debug("note over Flash: trigger "+functions+".all["+i+"] failed");
					}
				}
			}
			jk.flash.eventListeners[functions].all=[];
			for(i in f.one){
				if (typeof f.one[i] !== "function") {
					try {
						f.one[i].func(f.one[i].params);
					} 
					catch (error2) {
						jk.utils.debug("note over Flash: trigger " + functions + ".one[" + i + "] failed");
					}
				}
			}
			jk.flash.eventListeners[functions].one=[];
		}
	},
	
	
	
	
	
	flex: {
		disableSwfObjectAutoHideShow:true,
		containerId: "Kauppakanava_app",
		
		status: jk.UNLOADED,
		visibility: jk.HIDDEN,
		
		objRef: function(){
			return jk.$(jk.flex.containerId);
		},
		
		init: function(){
			if (jk.flex.status === jk.UNLOADED) {
				jk.utils.debug("JS-->Flex:embedSWF");
				var swfLocation = "Kauppakanava_app.swf?version=" + AppVersion;
				var containerId = "Kauppakanava_app";
				var width = "100%";
				var height = "100%";
				var version = "9.0.28";
				var expressInstall = null;
				//var expressInstall = "swfobject/expressInstall.swf";
				var flashvars = {
					version: AppVersion
				};
				var params = {
					quality: "high",
					bgcolor: "#869ca7",
					allowScriptAccess: "always"
				};
				var attributes = {
					id: containerId,
					name: containerId
				};
				var callBackFn = jk.flex.onEmbed;
				if (jk.flex.disableSwfObjectAutoHideShow) {
					
					swfobject.switchOffAutoHideShow();
				}
				swfobject.embedSWF(swfLocation, containerId, width, height, version, expressInstall, flashvars, params, attributes, callBackFn);
				
				jk.utils.debug("note over Flex:initialized");
				jk.flex.changeStatus(jk.INITIALISED);
			}
		},
		show: function(){
			jk.flash.hide();
			if (jk.flex.visibility !== jk.VISIBLE) {
				
				var func=function(){
					try {
						jk.flash.call("flex2js_showFlex");} 
					catch (error) {
						//failed
						jk.utils.debug("note over Flash: flex2js_showFlex failed");
					}
				};
				if (jk.flash.status === jk.LOADED) {
				}else{
					jk.flash.eventListeners.loaded.all.push({func:func,params:null});
				}
				
				jk.flash.hide();
				jk.flex.objRef().style.height = "100%";
				jk.flex.objRef().focus();
							
				jk.utils.debug("note over JS: Hide flash, show flex");
				
				//ie8 bugs, lets go around it
				jk.utils.wakeUpIE8();
				jk.flex.visibility = jk.VISIBLE;
			}
			
			return true;
		},
		showPreload: function(params){
			if (jk.flex.visibility === jk.HIDDEN) {
				jk.flex.show();
				try{
					//jk.flex.objRef().flash2flex_preload(params, true);
					jk.flex.call("flash2flex_preload",params, true);
				} 
				catch (error) {
					jk.utils.debug("note over Flex: flash2flex_preload failed");
					//failed
				}
			}else{
				jk.utils.debug("note over Flex: jk.flex.visibility="+jk.flex.visibility+", ignoring showPreload");
			}
		},
		hide: function(){
			jk.flex.objRef().style.height = "1px";
			//jk.flex.objRef().style.overflow = "hidden";
			jk.flex.visibility = jk.HIDDEN;
		},
		call: function(func, params1, params2, params3){
			var obj = jk.flex.objRef();
			if (obj[func] === undefined) {
				jk.utils.debug("note over JS: Tried to call Flex." + func + "(), but no such method exists");
				return false;
			}
			switch(arguments.length){
				case 1:
					jk.utils.debug("JS->Flex:"+func+"("+")");
					return obj[func]();
				case 2:
					jk.utils.debug("JS->Flex:"+func+"("+params1+")",params1);
					return obj[func](params1);
				case 3:
					jk.utils.debug("JS->Flex:"+func+"("+params1+","+params2+")",params1, params2);
					return obj[func](params1, params2);
				case 4:
					jk.utils.debug("JS->Flex:"+func+"("+params1+","+params2+","+params3+")",params1, params2, params3);
					return obj[func](params1, params2, params3);
					
			}
		},
		presearch: function(params){
			var func = function(params){
					try {
						//jk.flex.objRef().flash2flex_search(params);
						jk.flex.call("flash2flex_search",params);
					}catch(error){
						jk.utils.debug("note over Flex: flash2flex_search failed");
						//fail
					}
				};
			if(jk.flex.status===jk.LOADED){
				func(params);
			}else{
				jk.flex.eventListeners.loaded.one = [{func:func,params:params}];
			}
		},
		search: function(params){
			var func = function(params){
					try {
						jk.flex.call("flash2flex_startSearch",params);
					}catch(error){
						jk.utils.debug("note over Flex: flash2flex_startSearch failed");
					}
				};
			
			var preFunc = function(params){
					jk.flex.show();
					try {
						jk.flex.call("flash2flex_preload",params,true);
					}catch(error){
						jk.utils.debug("note over Flex: flash2flex_preload failed");
					}
				};
			
			if(jk.flex.status===jk.PRELOADING){
				preFunc(params);
				jk.flex.eventListeners.loaded.one = [{func:func,params:params}];
			}else if(jk.flex.status===jk.LOADED){
				func(params);
			}else{
				jk.flex.eventListeners.preloading.all.push({func:preFunc,params:params});
				jk.flex.eventListeners.loaded.one = [{func:func,params:params}];
			}
		
		},
		preloadNotify:{
			hide:function(){
				jk.$("flexPreLoad").style.visibility="hidden";
				jk.$("flexPreLoad").style.display="none";
			},
			show:function(){
				jk.$("flexPreLoad").style.visibility="visible";
				jk.$("flexPreLoad").style.display="block";
			}
		},
		onEmbed: function(event){
			if (event.success) {
				jk.flex.changeStatus(jk.EMBEDDED);
			}else{
				//failed embedding!!!
				jk.utils.debug("note over Flex: embedding failed");
			}
		},
		onLoadBegin: function(){
			jk.flex.changeStatus(jk.PRELOADING);
		},
		onLoadComplete: function(){
			jk.flex.changeStatus(jk.LOADED);
			//jk.flash.objRef().flex2flash_isReady();
			var func = function(){
					jk.flash.call("flex2flash_isReady");
				};
			if(jk.flash.status===jk.LOADED){
				func();
			}else{
				jk.flash.eventListeners.loaded.all.push({func:func,params:null});
			}
		},
		changeURL: function(params){
			var func = function(params){
					try {
						//jk.flex.objRef().flash2flex_changeUrl(params);
						jk.flex.call("flash2flex_changeUrl",params);
					}catch(error){
						//fail
						jk.utils.debug("note over Flex: flash2flex_changeUrl failed");
					}
				};
			if(jk.flex.status===jk.LOADED){
				func(params);
			}else{
				jk.flex.eventListeners.loaded.one = [{func:func,params:params}];
			}
		
		},
		showEstate: function(params){
			var func = function(params){
					try {
						//jk.flex.objRef().flash2flex_showEstate(params);
						jk.flex.call("flash2flex_showEstate",params);
					}catch(error){
						//fail
						jk.utils.debug("note over Flex: flash2flex_showEstate failed");
					}
				};
			if(jk.flex.status===jk.LOADED){
				func(params);
			}else{
				jk.flex.eventListeners.loaded.one = [{func:func,params:params}];
			}
		},
		changeStatus:function(newStatus){
			switch(newStatus){
				case jk.INITIALISED:
					jk.flex.triggerEvent("initialized");
					break;
				case jk.EMBEDDED:
					jk.flex.triggerEvent("embedded");
					break;
				case jk.PRELOADING:
					jk.flex.triggerEvent("preloading");
					break;
				case jk.LOADED:
					jk.flex.triggerEvent("loaded");
					break;
			}
			jk.flex.status = newStatus;
		},
		eventListeners:{
			initialized:{one:[],all:[]},
			embedded:{one:[],all:[]},
			preloading:{one:[],all:[]},
			loaded:{one:[],all:[]}
		},
		triggerEvent:function(functions){
			var i;
			var f=jk.flex.eventListeners[functions];
			for(i in f.all){
				if (typeof f.all[i] !== "function") {
					try {
						f.all[i].func(f.all[i].params);
					} 
					catch (error1) {
						jk.utils.debug("note over Flex: trigger " + functions + ".all[" + i + "] failed");
					}
				}
			}
			jk.flex.eventListeners[functions].all=[];
			for(i in f.one){
				if (typeof f.one[i] !== "function") {
					try {
						f.one[i].func(f.one[i].params);
					} 
					catch (error2) {
						jk.utils.debug("note over Flex: trigger " + functions + ".one[" + i + "] failed");
					}
				}
			}
			jk.flex.eventListeners[functions].one=[];
		}
		
	},
	debug:function(level){
		jk.cookie.set("debugLevel",level,365);
	},
	cookie: {
		set:
			function(cookieName,value,expiredays){
				var exdate=new Date();
				exdate.setDate(exdate.getDate()+expiredays);
				document.cookie=cookieName+ "=" +escape(value)+
				((expiredays===null) ? "" : ";expires="+exdate.toGMTString());
			},
		get:
			function(cookieName){
				if (document.cookie.length>0){
				  var cookieStart=document.cookie.indexOf(cookieName + "=");
				  if (cookieStart!==-1){
					    cookieStart=cookieStart + cookieName.length+1;
					    var cookieEnd=document.cookie.indexOf(";",cookieStart);
					    if (cookieEnd===-1) {
					    	cookieEnd=document.cookie.length;
					    }
					    return unescape(document.cookie.substring(cookieStart,cookieEnd));
				  }
				}
				return "";
			},
		clear:
			function(cookieName){
				jk.cookie.set(cookieName,"",0);
			}
	},
	SWFAddress: {
		setValue: function(param){
			jk.utils.debug("note over JS:jk.SWFAddress.setValue("+param+")",param);
			SWFAddress.setValue(param);
		}
	},
	$: function(id){
		try{
			var elem = document.getElementById(id);
		}catch(error){
			jk.utils.debug("note over JS: fetching object with $ failed");
		}
		return document.getElementById(id);
	},
	utils:{
		ping:
			function(){return true;},
		reloadPage:
			function(params){
				//TODO: save search params (And do what???)
				document.location = document.location;
			},
		openBugReport:
			function(params){
				//TODO: should search params be passed?
				document.location = "/ep/virheraportti.html?version="+AppVersion;
			},
		arrayFromArgs:
			function(args){
				var arr = [];
				var i;
				for (i = 0; i < args.length; i=i+1) {
					arr[i] = args[i];
				}
				return arr;
			},
		debug:
			function(param){
				if (1 >= jk.debugLevel) {
					jk.debugLog += param + "\n";
				}
				if (0 >= jk.debugLevel) {
					try {
						console.debug(param,jk.utils.arrayFromArgs(arguments).slice(1));
					} 
					catch (e) {
					}
				}
			},
		addPageLoadEvent:
			function(func){
				var oldonload = window.onload;
				if (typeof window.onload !== 'function') {
					window.onload = func;
				} else {
					window.onload = function() {
						if (oldonload) {
							oldonload();
						}
						func();
					};
				}
			},
		addPageUnLoadEvent:
			function(func){
				var oldonunload = window.onunload;
				if (typeof window.onunload !== 'function') {
					window.onunload = func;
				} else {
					window.onunload = function() {
						if (oldonunload) {
							oldonunload();
						}
						func();
					};
				}
			},
		popup:
			function(url, title, options){
				var optionsStr = "";
				for (var i in options) {
					if (typeof options[i] !== "function") {
						optionsStr += (optionsStr !== "") ? "," : "";
						optionsStr += i + "=" + options[i];
					}
				}
				return window.open(url,title,optionsStr);
			},
		popupWithContent:
			function(url, title, options, content){
				var popup = jk.utils.popup(url, title, options);
				var tmp = popup.document;
				tmp.write(content);
				tmp.close();
			},
		webSequenceDiagram:
			function(){
				var content = "";
				content+='<html><head><title>Communication Diagram</title></head><body>';
				content+='<div class=wsd wsd_style="modern-blue"><pre>\n';
				content+=jk.debugLog;
				content+='</pre></div>';
				content+='<script type="text/javascript" src="http://www.websequencediagrams.com/service.js"></s'+'cript>';
				content+='</body></html>';
				
				var url = "none.html";
				var title = "Communication Diagram";
				var options = {
						width:1000,
						height:750,
						menubar:"no",
						status:"no",
						location:"yes",
						toolbar:"no",
						scrollbars:"yes"
					};
				jk.utils.popupWithContent(url, title, options, content);
			},
		wakeUpIE8: function(){
			/*
			window.setTimeout(function(){
				jk.flash.objRef().style.borderWidth = "0px";
			}, 1);
			*/
		},
		
		searchResultHandler:{
			status:jk.UNLOADED,
			init:function(searchType){
				if(searchType != 1 && searchType != 2){
					return false;
				}
				if(jk.utils.searchResultHandler.status === jk.UNLOADED){
					jk.utils.searchResultHandler.status = jk.LOADED;
					jk.utils.addPageUnLoadEvent(jk.utils.searchResultHandler.onUnload);
				}else if (jk.utils.searchResultHandler.timer !== null) {
					jk.utils.searchResultHandler.onNewSearch();
				}
				
				//Store the timestamp when the search was started
				jk.utils.searchResultHandler.timeStamp = new Date();
				
				//In case the time takes longer than 10 minutes, mark search as failed
				jk.utils.searchResultHandler.timer = window.setTimeout(jk.utils.searchResultHandler.onTimeout,10*60*1000);
				
				//Select the search type
				jk.utils.searchResultHandler.mode = (searchType == 1)?"Osto":"Vuokra";
			},
			timeStamp:null,
			timer:null,
			mode:"Osto",
			resetTimer:function(){
				if(jk.utils.searchResultHandler.timer !== null){
					try{
						window.clearTimeout(jk.utils.searchResultHandler.timer);
					}catch(e){}
					jk.utils.searchResultHandler.timer = null;
				}
			},
			onEvents:function(tag){
				//Jokakoti/HakuLista/(Osto|Vuokra)kohdelistaus/(Lista|Unload|Timeout|UusiHaku)/MSAIKA
				jk.utils.searchResultHandler.resetTimer();
				if (jk.utils.searchResultHandler.timeStamp !== null) {
					var difference = (new Date()).getTime() - jk.utils.searchResultHandler.timeStamp.getTime();
					//XXXDOPXXX
					jk.utils.reportTag(tag+"$ms$"+difference);
				}
				jk.utils.searchResultHandler.timeStamp = null;
				
			},
			onSuccess:function(){
				jk.utils.searchResultHandler.onEvents("/Jokakoti/HakuLista/"+jk.utils.searchResultHandler.mode+"kohdelistaus/Lista/");
			},
			onUnload:function(){
				jk.utils.searchResultHandler.onEvents("/Jokakoti/HakuLista/"+jk.utils.searchResultHandler.mode+"kohdelistaus/Unload/");
			},
			onTimeout:function(){
				jk.utils.searchResultHandler.resetTimer();
				jk.utils.searchResultHandler.onEvents("/Jokakoti/HakuLista/"+jk.utils.searchResultHandler.mode+"kohdelistaus/Timeout/");
			},
			onNewSearch:function(){
				jk.utils.searchResultHandler.resetTimer();
				jk.utils.searchResultHandler.onEvents("/Jokakoti/HakuLista/"+jk.utils.searchResultHandler.mode+"kohdelistaus/UusiHaku/");
			}
			
		},
		
		reportedTags:{},
		reportTag: function(tag){
			if ( typeof OmnsendPage == 'function' && jk.utils.queuedTags.length === 0 ) {
				jk.utils.reportTagInternal(tag);
			}else{
				jk.utils.queuedTags.push(tag);
				if(jk.utils.tagTimer){
					window.clearTimeout(jk.utils.tagTimer);
				}
				jk.utils.tagTimer = window.setTimeout(jk.utils.reportQueuedTags,100);
			}
		},
		reportTagInternal:function(tag){
			jk.utils.debug("note over JS:OmnsendPage('" + tag + "')");
			try {
				var splitted = tag.split("$ms$");
				if(splitted.length<=1){
					OmnsendPage_jokakoti(tag);
				}else{
					OmnsendPage_jokakoti(splitted[0],splitted[1]);
				}
				
				jk.utils.reportedTags[tag] = true;
			} 
			catch (e) {
				jk.utils.debug("note over JS:Tag sending failed: OmnsendPage('" + tag + "')");
			}
		},
		tagTimer:null,
		queuedTags:[],
		reportQueuedTags:function (){
			if(OmnsendPage){
				for(var i=0;i<jk.utils.queuedTags.length;i++){
					if (jk.utils.queuedTags[i] !== null) {
						jk.utils.reportTagInternal(jk.utils.queuedTags[i]);
						jk.utils.queuedTags[i] = null;
					}
				}
				jk.utils.queuedTags = [];
			}else{
				if(jk.utils.tagTimer){
					window.clearTimeout(jk.utils.tagTimer);
				}
				jk.utils.tagTimer = window.setTimeout(jk.utils.reportQueuedTags,100);
			}
		}
	},
	poll:{
		open:function(){
				var url = "http://digiumenterprise.com/answer/?sid=340049&chk=CVY6VXHU";
				var title = "pollPopup";
				var options = {
						width:1000,
						height:750,
						menubar:"no",
						status:"no",
						location:"yes",
						toolbar:"no",
						scrollbars:"yes"
					};
				jk.utils.popup(url,title,options);
				return false;
			}
		}
	
		/* Omniture variable pass via cookie */
		if(jk.cookie.get("cmp")!==""){
			pt.cmp = jk.cookie.get("cmp");
			jk.cookie.clear("cmp");
		}
};
