/*************************************************************************



*



* ADOBE CONFIDENTIAL



* ___________________



*



*  Copyright 2008 Adobe Systems Incorporated



*  All Rights Reserved.



*



* NOTICE:  All information contained herein is, and remains



* the property of Adobe Systems Incorporated and its suppliers,



* if any.  The intellectual and technical concepts contained



* herein are proprietary to Adobe Systems Incorporated and its



* suppliers and may be covered by U.S. and Foreign Patents,



* patents in process, and are protected by trade secret or copyright law.



* Dissemination of this information or reproduction of this material



* is strictly forbidden unless prior written permission is obtained



* from Adobe Systems Incorporated.



*



* AdobePatentID="B564"



* AdobePatentID="B565"



*



**************************************************************************/







ICE = {};







// Set the ICE.useConfig flag to false in case you do not want to use the ice.conf.js file or if



// this file is missing form your server. This should be done to avoid HTTP error code 404.



ICE.useConfig = true;







(function () {



	var isNotInIde = parent == window || ( parent != window && !(/ide\.htm/i).test(parent.location.href) );



	if (isNotInIde) {



		/*



		 * This setting defines the default shortcut for launching the InContext Editing Login



		 * dialog on any PC machine.



		 * 



		 * DO NOT MODIFY THIS CONSTANT!



		 * 



		 * Instead modify the ICE.USER_LOGIN_PC variable inside the ice.conf.js file.



		 */



		ICE.DEFAULT_LOGIN_PC = "CTRL+E";







		/*



		 * This setting defines the default shortcut for launching the InContext Editing Login



		 * dialog on any MAC machine.



		 * 



		 * DO NOT MODIFY THIS CONSTANT!



		 * 



		 * Instead modify the ICE.USER_LOGIN_MAC variable inside the ice.conf.js file.



		 */



		ICE.DEFAULT_LOGIN_MAC = "CMD+E";







		/**



		 * Gets the relative path based on the ice.js includes.



		 */



		ICE.getSiteRoot = function() {



			var searchPath = "includes/ice/ice.js";



		    var s = null;



		    var url = '';



		    var scripts = document.getElementsByTagName("script");



		    for (var i=0; i<scripts.length; i++) {



				url = scripts[i].src.toLowerCase();



				if (typeof url != "undefined") {



					if (url.indexOf(searchPath) != -1) {



						s = scripts[i].src;



						break;



					}



				}



		    }







			s = s.substring(0, s.length - searchPath.length);







			if (!/http/i.test(s)) {



				// This Happens on IE



				var m = s.match(/\.\.\//g);



				var deep = m?m.length:0;



				var loca = window.location;



				var path = loca.pathname.replace(/\/([^\/]*)$/, '/');



				var temp = path.split('/');



				var newLength = temp.length - deep - 1;



				temp.length = (newLength >= 0) ? newLength : 0;



				path = temp.join('/') + '/';



				s = loca.protocol + '//'+ loca.hostname + (loca.port?':' + loca.port:'') + path;



			}







			return s;



		};







		/**



		 * Adds a link to the current configuration file to the page HEAD so the values in this file become available



		 */



		ICE.getConfig = function() {



			var scr = document.createElement('SCRIPT');



			scr.type = 'text/javascript';



			var head=document.getElementsByTagName('HEAD')[0];



			head.appendChild(scr);



			scr.onreadystatechange = scr.onload = function(e) {



				e = e || event;



				if (e.type == 'readystatechange') {



					if (typeof this.jsloaded == 'undefined' && (this.readyState == 'complete')){



						this.jsloaded = true;



						ICE.attachKeyEvent();



					}



				} else {



					ICE.attachKeyEvent();



				}



			};



			var siteRoot = ICE.getSiteRoot();



			scr.src = siteRoot + 'includes/ice/ice.conf.js';



		};







		/**



		 * This function returns the available transport object as instance



		 *



		 * @return Object The transport instance



		 */



		ICE.getTransport = function() {



			var ret = false;



			var options = ['new XMLHttpRequest()',



				'new ActiveXObject("Msxml2.XMLHTTP")',



				'new ActiveXObject("Microsoft.XMLHTTP")'];







			for (var i=0; i<options.length; i++) {



				try {



					ret = eval(options[i]);



					break;



				} catch(err) {



					ret = false;



				}



			}



			return ret;



		};







		/**



		 * This function begins the actual edit by pointing the browser to the new URL.



		 */



		ICE.startEdit = function() {



			var redirectto = window.location.href;



			var siteRoot = ICE.getSiteRoot();



			redirectto = redirectto.substring(siteRoot.length);



			redirectto =  siteRoot + 'includes/ice/ide.html#page=' + encodeURIComponent(redirectto);







			// Make a request so we have the page cached



			var transport = ICE.getTransport();



			transport.open('GET', redirectto, false);



			transport.send(null);







			// Do the actual redirect



			window.location.href = redirectto;



		};







		/**



		 * This function attaches key events so we catch the combination that will launch the InContext Editing Login UI



		 */



		ICE.attachKeyEvent = function() {



			var platform = navigator.userAgent.match(/mac/i) ? "MAC" : "PC";



			var shortcut = ICE['DEFAULT_LOGIN_' + platform];







			if (typeof ICE['USER_LOGIN_' + platform] == 'string') {



				shortcut = ICE['USER_LOGIN_' + platform];



			}







			if (shortcut !== '' && shortcut.indexOf('+') != -1) {



				ICE.shortcut = {



					ctrlKey: shortcut.indexOf('CTRL+') != -1,



					altKey: shortcut.indexOf('ALT+') != -1,



					metaKey: shortcut.indexOf('CMD+') != -1,



					shiftKey: shortcut.indexOf('SHIFT+') != -1,



					keyCode: shortcut.slice(-1).charCodeAt(0),



					platform: platform



				};







				ICE.isShortcutPressed = function(event) {



					var retVal = true;



					retVal = retVal && (ICE.shortcut.ctrlKey ? event.ctrlKey : !event.ctrlKey);



					if (ICE.shortcut.platform == "MAC") {



						retVal = retVal && (ICE.shortcut.metaKey ? event.metaKey : !event.metaKey);



					}



					retVal = retVal && (ICE.shortcut.altKey ? event.altKey : !event.altKey);



					retVal = retVal && (ICE.shortcut.shiftKey ? event.shiftKey : !event.shiftKey);



					retVal = retVal && (ICE.shortcut.keyCode == event.keyCode);



					return retVal;



				};







				ICE.onkeydown = function (e) {



					e = e || event;



					if (ICE.isShortcutPressed(e)) {



						//stop keyboard shortcut and redirect to ICE IDE



						try{e.cancelBubble = true;}catch(err){}



						try{e.returnValue = false;}catch(err){}



						try{e.stopPropagation();}catch(err){}



						try{e.preventDefault();}catch(err){}



						ICE.startEdit();



						return false;



					}



				};







				if (document.addEventListener) {



					document.addEventListener('keydown', ICE.onkeydown, false);



				} else if (document.attachEvent) {



					document.attachEvent('onkeydown', ICE.onkeydown);



				} else {



					document.onkeydown = ICE.onkeydown;



				}



			}



		};







		/**



		 * Depending on the current setting - to use or not the config file - we'll decide to read the config or not



		 */



		if (ICE.useConfig) {



			// If the site owner has decided to use the ice.conf.js we'll go ahead and read it



			ICE.getConfig();



		} else {



			// Otherwise we'll go with the defaults



			ICE.attachKeyEvent();



		}



	}



})();



