﻿var mod_path = "DesktopModules/AVMap.MapDigitizer/";
var mypageSplitter;
var midzone;
var rightzone;
var layoutControl;
var maplistControl;
var wizard;
var stepWizard;
var currentWizard;



$(document).ready(function(){
   // this sets up the telerik controls
   var controlID;
   
   controlID = $telerik.$("[id$='pageSplitter']").attr("id");
   mypageSplitter = $find(controlID);
   
   controlID = $telerik.$("[id$='middleZone']").attr("id");
   midzone = $find(controlID);
   
   controlID = $telerik.$("[id$='rightPanelZone']").attr("id");
   rightzone = $find(controlID);
   
   controlID = $telerik.$("[id$='layerDock']").attr("id");
   layoutControl = $find(controlID);
   if (layoutControl){
   layoutControl.add_dragStart(function(sender){wizardTracker(sender,'OnClientDragStart');});
   }
   
   controlID = $telerik.$("[id$='maplistDock']").attr("id");
   maplistControl = $find(controlID);
   
   controlID = $telerik.$("[id$='wizardActions']").attr("id");
   wizard= $find(controlID);
   
   controlID = $telerik.$("[id$='stepGuide']").attr("id");
   stepWizard = $find(controlID);
   if (wizard){
   wizard.trackChanges();
   wizard.get_items().clear();
   wizard.insertItems(wizActs("default"));
   wizard.commitChanges();
   }
   $('#Body').bind('wizardAction',wizardHandler);
   /*
   $(window).bind('beforeunload', function(){
    
      try{
        logCoordinates();
      }catch(Error){} 
      //event.returnValue="Are you sure you want to leave?";
      return "";
    });
    */
});

function setMapDescription(descr)
{
    document.getElementById("mapDescription").innerHTML = descr;
}

function saveAndClose()
{
    var postbackform = document.createElement("FORM");
    postbackform.id = "digiForm";
    postbackform.name = "digiForm";
    postbackform.method = "POST";
    postbackform.action = "";
    postbackform.target = "self";
    
    var inp_output = document.createElement("input");
    inp_output.id = "_output";
    inp_output.name = "_output";
    inp_output.value = getKML();
    postbackform.appendChild(inp_output);
    
    var inp_extra = document.createElement("input");
    inp_extra.id = "_extra";
    inp_extra.name = "_extra";
    inp_extra.value = getExtra();
    postbackform.appendChild(inp_extra);
    
    
    var inp_guid = document.createElement("input");
    inp_guid.id = "guid";
    inp_guid.name = "guid";
    inp_guid.value = getGUID();
    postbackform.appendChild(inp_guid);
    //document.body.appendChild(postbackform);
    //postbackform.submit();
    
    var inp_pback = document.createElement("input");
    inp_pback.id = "postbackurl";
    inp_pback.name = "postbackurl";
    inp_pback.value = postbackurl;
    postbackform.appendChild(inp_pback);
    
    
    $.ajax({
        data: $(postbackform).serialize(),
        success: function(data){
            self.close();
        },
        type: "POST"
    });
    
    
    
    return false;
}

function getKML()
{
    var retvalue = "";
    var thekml = document.getElementById("KMLoutput");
    if (thekml){
        retvalue = thekml.value;
    }
    return retvalue;
}

function getExtra()
{
    return extra;
}

function getGUID()
{
    return myguid;
}

function expandRightPane()
{
    mypageSplitter.getEndPane().expand();
}

function toggleRadControl(which,callerID)
{
    var ctrl;
    var caller = document.getElementById(callerID);
    switch(which)
    {
        case "layers":
            ctrl = layoutControl;
            break;
        case "maps":
            ctrl = maplistControl;
            break;
            
    }
    if (ctrl)
    {
        if (ctrl.get_closed()){
            if (ctrl.get_dockZoneID()==rightzone.get_clientID()){
                expandRightPane();
                var dockarray = rightzone.get_docks();
                for (var i=0;i<dockarray.length;i++)
                {
                    if (!dockarray[i].get_closed()){
                        dockarray[i].set_collapsed(true);
                    }
                }
                ctrl.set_collapsed(false);
                $('#Body').trigger('wizardAction',which,"open");
            }
            ctrl.set_closed(false);
            caller.ex_RemoveClassName("pressed");
        }else{
            ctrl.set_closed(true);
            caller.ex_AddClassName("pressed");
        }
        
        
    }
}

function wizClick(sender,e)
{
    var item = e.get_item();
    var value = item.get_value();
    currentWizard = value;
    if (value.indexOf("layers_")!=-1)
    {
       var newcall = value.split("_")[1];
       switch (newcall)
       {
        case "1":
            wizardHandler(layoutControl,"moveList");
            break;
       }
    }
}

function stepwizClick(sender,e)
{
    //var item = e.get_item();
    
}

function wizardTracker(obj,action)
{
    switch (action)
    {
        case "OnClientDragStart":
            if (currentWizard=="layers_1")  //more ifs
            {
                currentWizard == "layers_1_2";
                $(stepWizard.get_items().getItem(0)._element.firstChild).animateStrikethrough(20,null);
            }
            break;
        case "mouseup":
        
            break;
    }
}

function wizardHandler(firingControl,action,extraData)
{
    switch (action)
    {
        case "layers":
            wizard.trackChanges();
            wizard.get_items().clear();
            wizard.insertItems(wizActs("layers"));
            wizard.commitChanges();
            break;
        case "moveList":
            stepWizard.trackChanges();
            stepWizard.get_items().clear();
            stepWizard.insertItems(wizActs("moveList"));
            stepWizard.commitChanges();
            break;
        
    }
}

function wizActs(context)
{
    var retArray = new Array();
    var item;
    switch (context)
    {
        case "layers":
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_layers_1);
            item.set_value("layers_1");
            retArray.push(item);
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_layers_2);
            item.set_value("layers_2");
            retArray.push(item);
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_layers_3);
            item.set_value("layers_3");
            retArray.push(item);
            break;
       case "moveList":
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_moveList_1);
            retArray.push(item);
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_moveList_2);
            retArray.push(item);
            break;
       case "default":
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_default_1);
            item.set_value("default_1");
            retArray.push(item);
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_default_2);
            item.set_value("default_2");
            retArray.push(item);
            item = new Telerik.Web.UI.RadListBoxItem();
            item.set_text(wizAct_default_3);
            item.set_value("default_3");
            retArray.push(item);
            break;
    }
    for (var i=0; i<retArray.length;i++)
    {
        retArray[i].set_imageUrl(mod_path+ "Images/red_arrow.gif");
    }
    return retArray;
}




jQuery.fn.animateStrikethrough = function(speed, callback){
  return this.each(function(){
    if(jQuery(this).find('.strike').length == 0) {
      jQuery(this).wrapInner("<span class='letters-left'></span>");
      jQuery(this).prepend("<span class='strike'></span>");
    }
    
    var line = jQuery(this);
    var strike = jQuery(line).find('.strike');
    var left = jQuery(line).find('.letters-left');

    strikethrough = setInterval(function () {
      jQuery(line).strikeThroughFirstLetter();
      if(jQuery(left).text().length == 0) {
        jQuery(line).addClass('strike');
        //jQuery(line).text(jQuery(line).find('.strike').text());
        clearInterval(strikethrough);
        if(typeof callback == "function") callback();
      }
    }, speed);
  });
};

jQuery.fn.strikeThroughFirstLetter = function(){
  return this.each(function(){
    jQuery(this).find('.strike').transposeFirstLetter(jQuery(this).find('.letters-left'));
    jQuery(this).find('.letters-left').removeFirstLetter();
  });
};

jQuery.fn.transposeFirstLetter = function(toTransposeTo){
  return this.each(function(){
    
    var replacementText = jQuery(this).text() + jQuery(toTransposeTo).text().charAt(0);
    jQuery(this).text(replacementText);
  });
};

jQuery.fn.removeFirstLetter = function(){
  return this.each(function(){
    var replacementText = jQuery(this).text().replace(/^./, '');
    jQuery(this).text(replacementText);
  });
};




var notSupportedBrowsers = [{'os': 'Any', 'browser': 'MSIE', 'version': 7}, {'os': 'Any', 'browser': 'Firefox', 'version': 1}];
var displayPoweredBy = false;
var noticeLang = 'pk';
var noticeLangCustom = null;
var supportedBrowsers = [];

var BrowserDetection = {
	init: function(){
		if(notSupportedBrowsers == null || notSupportedBrowsers.length < 1){
			notSupportedBrowsers = this.defaultNotSupportedBrowsers;
		}
		
		this.detectBrowser();
		this.detectOS();
		
		if(this.browser == '' || this.browser == 'Unknown' || this.os == '' || 
		   this.os == 'Unknown' || this.browserVersion == '' || this.browserVersion == 0)
		{
			return;
		}
		
		// Check if this is old browser
		var oldBrowser = false;
		for(var i = 0; i < notSupportedBrowsers.length; i++){
			if(notSupportedBrowsers[i].os == 'Any' || notSupportedBrowsers[i].os == this.os){
				if(notSupportedBrowsers[i].browser == 'Any' || notSupportedBrowsers[i].browser == this.browser){
					if(notSupportedBrowsers[i].version == "Any" || this.browserVersion <= parseFloat(notSupportedBrowsers[i].version)){
						oldBrowser = true;
						break;
					}
				} 
			}
		}
		
		if(oldBrowser){
			this.displayNotice();
		}
	},
	
	getEl: function(id){ return window.document.getElementById(id); },
	getElSize: function(id){ 
		var el = this.getEl(id); 
		if(el == null){ return null; } 
		return { 'width': parseInt(el.offsetWidth), 'height': parseInt(el.offsetHeight) }; 
	},
	getWindowSize: function(){
		if(typeof window.innerWidth != 'undefined'){
			return {'width': parseInt(window.innerWidth), 'height': parseInt(window.innerHeight)};
		} else {
			if(window.document.documentElement.clientWidth != 0){
				return {'width': parseInt(window.document.documentElement.clientWidth), 'height': parseInt(window.document.documentElement.clientHeight)};
			} else {
				return {'width': parseInt(window.document.body.clientWidth), 'height': parseInt(window.document.body.clientHeight)};
			}
		}
	},
	positionNotice: function(){
		var noticeSize = this.getElSize('browser-detection');
		var windowSize = this.getWindowSize();
		var noticeEl = this.getEl('browser-detection');
		
		if(noticeEl == null || noticeSize == null || windowSize == null || !windowSize.width || !windowSize.height){ return; }
		noticeEl.style.left = (windowSize.width - noticeSize.width) / 2 + "px";
		
		var offset = (this.browser == "MSIE" && this.browserVersion < 7) ? (window.document.documentElement.scrollTop != 0 ? window.document.documentElement.scrollTop : window.document.body.scrollTop) : 0;
		noticeEl.style.top = (windowSize.height - noticeSize.height - 20 + offset) + "px";
		this.noticeHeight = noticeSize.height;
	},
	
	displayNotice: function(){
		if(this.readCookie('bdnotice') == 1){
			return;
		}
		
		this.writeNoticeCode();
		this.positionNotice();
		
		var el = this;
		window.onresize = function(){ el.positionNotice(); };
		if(this.browser == "MSIE" && this.browserVersion < 7){
			window.onscroll = function(){ el.positionNotice(); };
		}
		
		this.getEl('browser-detection-close').onclick = function(){ el.remindMe(false); };
		this.getEl('browser-detection-remind-later').onclick = function(){ el.remindMe(false); };
		this.getEl('browser-detection-never-remind').onclick = function(){ el.remindMe(true); };
	},
	
	remindMe: function(never){
		this.writeCookie('bdnotice', 1, never == true ? 365 : 7);
		this.getEl('browser-detection').style.display = 'none';
		this.getEl('black_overlay').style.display = 'none';
	},
	
	writeCookie: function(name, value, days){
		var expiration = ""; 
		if(parseInt(days) > 0){
			var date = new Date();
			date.setTime(date.getTime() + parseInt(days) * 24 * 60 * 60 * 1000);
			expiration = '; expires=' + date.toGMTString();
		}
		
		document.cookie = name + '=' + value + expiration + '; path=/';
	},
	
	readCookie: function(name){
		if(!document.cookie){ return ''; }
		
		var searchName = name + '='; 
		var data = document.cookie.split(';');
		
		for(var i = 0; i < data.length; i++){
			while(data[i].charAt(0) == ' '){
				data[i] = data[i].substring(1, data[i].length);
			}
			
			if(data[i].indexOf(searchName) == 0){ 
				return data[i].substring(searchName.length, data[i].length);
			}
		}
		
		return '';
	},
	
	writeNoticeCode: function(){
		var title = '';
		var notice = '';
		var selectBrowser = '';
		var remindMeLater = '';
		var neverRemindAgain = '';
		
		var browsersList = null;		
		var code = '<div id="black_overlay"></div><div id="browser-detection"><a href="javascript:;" id="browser-detection-close">Close</a>';
		
		if(noticeLang == 'custom' && noticeLangCustom != null){
			title = noticeLangCustom.title;
			notice = noticeLangCustom.notice;
			selectBrowser = noticeLangCustom.selectBrowser;
			remindMeLater = noticeLangCustom.remindMeLater;
			neverRemindAgain = noticeLangCustom.neverRemindAgain;
		} else {
			var noticeTextObj = null;
			eval('noticeTextObj = this.noticeText.' + noticeLang + ';');
			
			if(!noticeTextObj){
				noticeTextObj = this.noticeText.professional;
			}
			
			title = noticeTextObj.title;
			notice = noticeTextObj.notice;
			selectBrowser = noticeTextObj.selectBrowser;
			remindMeLater = noticeTextObj.remindMeLater;
			neverRemindAgain = noticeTextObj.neverRemindAgain;
		}
		
		notice = notice.replace("\n", '</p><p class="bd-notice">');
		notice = notice.replace("{browser_name}", (this.browser + " " + this.browserVersion));
		
		code += '<p class="bd-title">' + title + '</p><p class="bd-notice">' + notice + '</p><p class="bd-notice"><b>' + selectBrowser + '</b></p>';
		
		if(supportedBrowsers.length > 0){
			browsersList = supportedBrowsers;
		} else {
			browsersList = this.supportedBrowsers;
		}
		
		code += '<ul class="bd-browsers-list">';
		for(var i = 0; i < browsersList.length; i++){
			code += '<li class="' + browsersList[i].cssClass + '"><a href="' + browsersList[i].downloadUrl + '" target="_blank">' + browsersList[i].name + '</a></li>';
		}		
		code += '</ul>';
		
		if(displayPoweredBy){
			code += '<div class="bd-poweredby">Powered by <a href="http://www.devslide.com/labs/browser-detection" target="_blank">DevSlide Labs</a></div>';
		}
		/*
		code += '<ul class="bd-skip-buttons">';
		code += '<li><button id="browser-detection-remind-later" type="button">' + remindMeLater + '</button></li>';
		code += '<li><button id="browser-detection-never-remind" type="button">' + neverRemindAgain + '</button></li>';
		code += '</ul>';
		*/
		code += '</div>';
		window.document.body.innerHTML = code;
	},

	detectBrowser: function(){
		this.browser = '';
		this.browserVersion = 0;
		
		if(/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			this.browser = 'Opera';
		} else if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
			this.browser = 'MSIE';
		} else if(/Navigator[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			this.browser = 'Netscape';
		} else if(/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			this.browser = 'Chrome';
		} else if(/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			this.browser = 'Safari';
			/Version[\/\s](\d+\.\d+)/.test(navigator.userAgent);
			this.browserVersion = new Number(RegExp.$1);
		} else if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			this.browser = 'Firefox';
		}
		
		if(this.browser == ''){
			this.browser = 'Unknown';
		} else if(this.browserVersion == 0) {
			this.browserVersion = parseFloat(new Number(RegExp.$1));
		}		
	},
	
	// Detect operation system
	detectOS: function(){
		for(var i = 0; i < this.operatingSystems.length; i++){
			if(this.operatingSystems[i].searchString.indexOf(this.operatingSystems[i].subStr) != -1){
				this.os = this.operatingSystems[i].name;
				return;
			}
		}
		
		this.os = "Unknown";
	},
	
	//	Variables
	noticeHeight: 0,
	browser: '',
	os: '',
	browserVersion: '',
	supportedBrowsers: [
	       { 'cssClass': 'firefox', 'name': 'Mozilla Firefox', 'downloadUrl': 'http://www.getfirefox.com/' },
	       { 'cssClass': 'chrome', 'name': 'Google Chrome', 'downloadUrl': 'http://www.google.com/chrome/' },
	       { 'cssClass': 'msie', 'name': 'Internet Explorer', 'downloadUrl': 'http://www.getie.com/' },
	       { 'cssClass': 'opera', 'name': 'Opera', 'downloadUrl': 'http://www.opera.com/' },
	       { 'cssClass': 'safari', 'name': 'Apple Safari', 'downloadUrl': 'http://www.apple.com/safari/' }
	],
	operatingSystems: [
           { 'searchString': navigator.platform, 'name': 'Windows', 'subStr': 'Win' },
           { 'searchString': navigator.platform, 'name': 'Mac', 'subStr': 'Mac' },
           { 'searchString': navigator.platform, 'name': 'Linux', 'subStr': 'Linux' },
           { 'searchString': navigator.userAgent, 'name': 'iPhone', 'subStr': 'iPhone/iPod' }
	],
	defaultNotSupportedBrowsers: [{'os': 'Any', 'browser': 'MSIE', 'version': 6}],
	noticeText: {
    	   'professional': { "title": "Outdated Browser Detected", "notice": "Our website has detected that you are using an outdated browser. Using your current browser will prevent you from accessing features on our website. An upgrade is not required, but is strongly recommend to improve your browsing experience on our website.", "selectBrowser": "Use the links below to download a new browser or upgrade your existing browser.", "remindMeLater": "Remind me later", "neverRemindAgain": "No, don't remind me again" },
    	   'pk': { "title": "Outdated Browser Detected", "notice": "Our website has detected that you are using an outdated browser. Using your current browser will prevent you from accessing features on our website. An upgrade is required.", "remindMeLater": "Remind me later", "neverRemindAgain": "No, don't remind me again" },
    	   'informal': { "title": "Whoaaa!", "notice": "It appears you're using an outdated browser which prevents access to some of the features on our website. While it's not required, you really should <b>upgrade or install a new browser</b>!", "selectBrowser": "Visit the official sites for popular browsers below:", "remindMeLater": "Not now, but maybe later", "neverRemindAgain": "No, don't remind me again" },
    	   'technical': { "title": "Old Browser Alert! <span class='bd-highlight'>DEFCON 5</span>", "notice": "Come on! If you are hitting our site, then you must at least be partially tech savvy. So, why the older browser? We're not asking you to brush off your old Fibonacci Heap and share it with the class. Just upgrade!\nI know, I know. You don't like to be told what to do. But, we're only asking you to upgrade so you can access all the latest, greatest features on our site. It's quick and easy. But, if you still want to skip it, that's cool. We will still welcome you &mdash; and your creepy old browser. :P", "selectBrowser": "Visit the official sites for popular browsers below:", "remindMeLater": "Remind me later", "neverRemindAgain": "No, don't remind me. I like my Commodore 64!" },
    	   'goofy': { "title": "Are You Serious?", "notice": "Are you really using <b>{browser_name}</b> as your browser?\nYou're surfing the web on a dinosaur (a dangerous one too &mdash; like a Tyrannosaurus or Pterodactyl or something scary like that). <b>Get with it and upgrade now!</b> If you do, we promise you will enjoy our site a whole lot more. :)", "selectBrowser": "Visit the official sites for popular browsers below:", "remindMeLater": "Maybe Later", "neverRemindAgain": "No, don't remind me again" },
    	   'mean': { "title": "Umm, Your Browser Sucks!", "notice": "Get a new one here.", "selectBrowser": "Official sites for popular browsers:", "remindMeLater": "Remind me later, a'hole", "neverRemindAgain": "F' off! My browser rocks!" }
	}
};

window.onload = function(){
	BrowserDetection.init();
};
