
/*
var url = '/proxy?url=' + encodeURIComponent('http://www.google.com/search?q=Prototype');
// notice the use of a proxy to circumvent the Same Origin Policy.

new Ajax.Request(url, {
  method: 'get',
  onSuccess: function(transport) {
    var notice = $('notice');
    if (transport.responseText.match(/href="http:\/\/prototypejs.org/))
      notice.update('Yeah! You are in the Top 10!').setStyle({ background: '#dfd' });
    else
      notice.update('Damn! You are beyond #10...').setStyle({ background: '#fdd' });
  }
});
*/

var ajax_default_div = 'mainContent';
var ajaxLoadingImage = '/sitedesign/controls/img/loading.gif';		
var bookmarkCookie = 'BookmarkCookie';
var subscriptionCookie = 'SubscriptionCookie';


function do_bookmark_event( event ) {
	eventHelper.bookmark(event);
}


function do_callback(url, callback) {
	new Ajax.Request(url, {method: 'get', onSuccess: function(transport) { callback(transport.responseText); } } );
}


function do_get(uri, div) {
   	if (do_get.arguments.length == 1) div = ajax_default_div;
   	ajaxHelper.beginWait();
	new Ajax.Updater( div, '/ajax' + uri , { method: 'get', encoding: 'iso-8859-1', onComplete: ajaxHelper.endWait() } );	
}

function do_post(form, div) {
   	if (do_post.arguments.length == 1) div = ajax_default_div;
   	var uri = form.action; 
   	ajaxHelper.beginWait();
	new Ajax.Updater( div, '/ajax' + uri , { method: 'post', encoding: 'iso-8859-1', parameters : ajaxHelper.serializeForm(form) , onComplete: ajaxHelper.endWait() } );	
}


function do_get_event(uri, div) {
   	if (do_get_event.arguments.length == 1) div = ajax_default_div;
   	ajaxHelper.beginWait();
	new Ajax.Updater( div, '/ajax' + uri , { method: 'get', encoding: 'iso-8859-1', onComplete: function() {eventHelper.showEvent(); ajaxHelper.endWait();} } );	
}



//declaring the class
var AjaxHelper = Class.create();

AjaxHelper.prototype = {


    initialize: function() {
    },

	beginWait: function() {
		document.documentElement.className = 'waitCursor';
		waitMessage.show();
	},
	
	endWait: function() {
		document.documentElement.className = ''; 
		waitMessage.hide();
	},
	
	
	modalLogin: function() {
		var _loginModal = $('modal_login');
   		if (_loginModal) {
	   		_loginModal = new Control.Modal('modal_login', { width: 300 } );
   		}
	},
	
	
	serializeForm: function(form){
		var qs = this.createParameter('rnd', Math.random());
		for(var i = 0; i < form.elements.length ;i++){
			var el = form.elements[i];
			if (!el.disabled){
				var v = this.getValue(el);
				if (v != null){
					if(typeof v == "object"){
						for (var j = 0; j < v.length; j++) {
							qs += this.createParameter(el.name, v[j]);
						}
					} else {
						qs += this.createParameter(el.name, v);
					}
				}
			}
		}
		// move params from action to qs
		var qm = form.action.indexOf('?');
		if(qm != -1){
			var more = form.action.substring(qm + 1) + "&";
			form.action = form.action.substring(0, qm);
			qs += more;
		}
		
		return qs.charAt(qs.length-1)=="&" ? qs.substring(0, qs.length-1) : qs;
	},
	
	createParameter: function(key, value){
		return key + "=" + escape(encodeURI(value)) + "&";
	},
	
	getValue: function(obj) {
		switch (obj.type) {
			case "text":
			case "textarea":
			case "hidden":
			case "password":
				return obj.value;
			case "select-one" :
				return (obj.selectedIndex != -1) ? (obj.options[obj.selectedIndex].value) : null;
			case "checkbox" :
				return obj.checked ? obj.value : null;
			case "radio" :
				return obj.checked ? obj.value : null;
			case "select-multiple" :
				var values = new Array();
				for (var i = 0; i < obj.length; i++) {
					if (obj.options[i].selected) {
						values[values.length] = obj.options[i].value;
					}
				}
				return values;
			default :
				return null;
		}
	}



}

var ajaxHelper = new AjaxHelper();


/* -- PAGE OVERLAY ----------------- */
//declaring the class
var PageOverlay = Class.create();

//defining the rest of the class implementation
PageOverlay.prototype = {
   opacizer: null,
   id: null,
   
   initialize: function(id) {
   	this.id = id;
   },
   
   _init: function() {
	 	if(!this.opacizer){
	 		var opDiv = document.createElement("div");
	   		opDiv.id = this.id;
	   		opDiv.className = "opacizer";
	   		this.opacizer = opDiv;
			var objBody = document.getElementsByTagName("body").item(0);
 			objBody.appendChild(opDiv);
	   	}
	},
	
   enable: function(bgColor) {
 	this._init();
 	this.opacizer.style.display = "block";
 	if(bgColor){
 		this.opacizer.style.backgroundColor = bgColor;
 	}
 	this.moveToPage();
 	Event.observe(window, 'scroll', function(){pageOverlay.moveToPage()}, false);
   },
   
   disable: function() {
   	  this._init();
   	  this.opacizer.style.display = "none";
   },
   
   moveToPage: function() {
   		var y = (navigator.appName == 'Netscape') ? window.pageYOffset : document.body.scrollTop;
	    var x = (navigator.appName == 'Netscape') ? window.pageXOffset : document.body.scrollLeft;
 	    this.opacizer.style.top = y;
 	    this.opacizer.style.left = x;
   }
};

//now, let's instantiate and use one object
var pageOverlay = new PageOverlay("pageOverlay");

/* -- WAIT MESSAGE ----------------- */
var WaitMessage = Class.create();

WaitMessage.prototype = {
   waitMessage: null,
   
   initialize: function() {},
   
   show: function() {
	pageOverlay.enable('white');
	var wm = $('WaitMessage');

   	if(wm){
   		Element.show(wm);
   	}else{
		var objBody = document.getElementsByTagName("body").item(0);
		var objLoadingImage = document.createElement("img");
		objLoadingImage.setAttribute('src', ajaxLoadingImage);
 		var wmDiv = document.createElement("div");
		wmDiv.setAttribute('id','WaitMessage');
 		wmDiv.appendChild(objLoadingImage);
 		objBody.appendChild(wmDiv);
 		
   		this.waitMessage = wmDiv;
		this.centerOnPage();
 	}
   },
   
   hide: function() {
	pageOverlay.disable();
	var wm = $('WaitMessage');
	if(wm){
		Element.hide(wm);
	}
   },
   
   centerOnPage: function() {
   	var w = document.body.clientWidth;
   	var h = document.body.clientHeight;
 	var wmH = 50;
 	var wmW = 100;
 	var y = (navigator.appName == 'Netscape') ? window.pageYOffset : document.body.scrollTop;
	var x = (navigator.appName == 'Netscape') ? window.pageXOffset : document.body.scrollLeft;
	this.waitMessage.style.position = "absolute";
 	this.waitMessage.style.top = (h/2)+ y -(wmH/2);
 	this.waitMessage.style.left = (w/2)+ x -(wmW/2);
 	this.waitMessage.style.width = wmW;
 	this.waitMessage.style.height = wmH;
   },
   
   moveToMouse: function(e) {
   		var pos = getMousePosition(e);
		waitMessage.waitMessage.style.top = pos["y"];
		waitMessage.waitMessage.style.left = pos["x"];
   }
}

var waitMessage = new WaitMessage();



var CookieHelper = Class.create();

CookieHelper.prototype = {
   
   initialize: function() {},
   
   setCookie: function() {
		if(arguments.length < 2) { return; }
		var n = arguments[0];
		var v = arguments[1];
		var d = 0;
		if(arguments.length > 2) { d = parseInt(arguments[2]); }
		var exp = '';
		if(d > 0) {
			var now = new Date();
			then = now.getTime() + (d * 24 * 60 * 60 * 1000);
			now.setTime(then);
			exp = '; expires=' + now.toGMTString();
		}
		document.cookie = n + "=" + escape(String(v)) + '; path=/' + exp;
	},

  	getCookie: function(n) {
		var cookiecontent = new String();
		if(document.cookie.length > 0) {
			var cookiename = n+ '=';
			var cookiebegin = document.cookie.indexOf(cookiename);
			var cookieend = 0;
			if(cookiebegin > -1) {
				cookiebegin += cookiename.length;
				cookieend = document.cookie.indexOf(";",cookiebegin);
				if(cookieend < cookiebegin) { cookieend = document.cookie.length; }
				cookiecontent = document.cookie.substring(cookiebegin,cookieend);
			}
		}
		return unescape(cookiecontent);
	},
	
  	setCookieArray: function() {
		if(arguments.length < 2) { return; }
		var name = arguments[0];
		var varray = arguments[1];
		var value = varray.join("|");
		this.setCookie(name,value);
	},
	
	getCookieArray: function(n) {
		var cookiecontent = this.getCookie(n);
		return cookiecontent.split("|");
	}
}



var EventHelper = Class.create();

EventHelper.prototype = {
   cookieHelper: null,
   
   initialize: function() {
   		cookieHelper = new CookieHelper();
   },

   inArray: function(value, _array) {
		for (var i = 0; i < _array.length; i++) {
			if (value == _array[i]) {
				return i;
			}
		}
		return -1;
   },

   showEvent: function() {
		ajaxHelper.modalLogin();
   },
   
    
   bookmark: function(event) {
		var eventArray = cookieHelper.getCookieArray(bookmarkCookie);
		var index = this.inArray(event,eventArray);
		var bookmarkDiv = $('bookmark-event-' + event );
		if (bookmarkDiv.className == 'add_bookmark') {
			bookmarkDiv.className = 'rem_bookmark';
			if (index < 0) {
				eventArray.push(event);
			}
		}
		else {
		 	bookmarkDiv.className = 'add_bookmark';
			if (index >= 0) {
				eventArray.splice(index,1);
			}
		}
		cookieHelper.setCookieArray(bookmarkCookie,eventArray);
   },
   
   highLight: function() {
		var eventArray;
		eventArray = cookieHelper.getCookieArray(subscriptionCookie);
		for (var i = 0; i < eventArray.length; i++) {
			var id = 'event-' + eventArray[i];
			var element = document.getElementById(id);
			if (element) {
				element.style.backgroundColor = '#e2f3c9';
			}
		}
		
		eventArray = cookieHelper.getCookieArray(bookmarkCookie);
		for (var i = 0; i < eventArray.length; i++) {
			var element = $('bookmark-event-' + eventArray[i] );
			if (element) {
				element.className = 'rem_bookmark';
			}
		}
   }
   
   
   
   
}

var eventHelper = new EventHelper();




