/**
 *	Modifies DOM to achieve certain visual effects
 */ 
Visuals = {
	/**
	 *	The "constructor" ;)
	 */	 	
	initialize: function() {
		this.hash();
		this.inputs();
		if (window.ie6) this.buttons();
		this.orderedlists();
		this.code();
		this.tables();
		this.definitions();
		this.faqs();
		this.infos();
		this.submenu();
		this.slidingContextMenu();
	},
	
	/**
	 *	Adds "onfocus" visual effect to text-type inputs (along with password-types)
	 */
	inputs: function() {
		var is = $$('.content input[type=text],.content input[type=password]');
		for (var i=0;i<is.length;i++) {
			is[i].addEvent('focus',function(){
				var p = this.getParent();
				if (p.hasClass('w')) {
					p.addClass('selected');
				};
			});
			is[i].addEvent('blur',function(){
				var p = this.getParent();
				if (p.hasClass('w')) {
					p.removeClass('selected');
				};
			});
		};
	},
	
	/**
	 *	Adds "onmouseover" visual effect in IE6
	 */	
	buttons: function() {
		var btns = $$('.content form button');
		for (var i=0;i<btns.length;i++) {
			btns[i].addEvent('mouseover',function(){
				this.addClass('selected');
			});
			btns[i].addEvent('mouseout',function(){
				this.removeClass('selected');
			});
		};
	},
	
	/**
	 *	Creates graphic numbers in ol.gfx's
	 */	
	orderedlists: function() {
		var ols = $$('.content ol.gfx');
		for(var i=0;i<ols.length;i++) { // looping through ol.gfx's
			ols[i].setStyle('padding-left','0');
			var lis = $ES('li',ols[i]);
			for (var j=0;j<lis.length;j++) { // looping through li's within each ol.gfx
				lis[j].setStyles({
					'background': 'url(/images/numbers/'+(j+1)+'.gif) 0px 4px no-repeat',
					'padding-left':'45px',
					'list-style':'none'
				});
			};
		};
	},
	/**
	 *  Adds necessary markup to <code>'s to achieve certain visual effects
	 */	
	code: function() {
		var code = $$('.content code');
		for(var i=0;i<code.length;i++) {
			var oldHTML = code[i].getText();
			code[i].setHTML('<div class="w1"><div class="w2">' + oldHTML + '</div></div>');
		};
	},
	
	/**
	 *  Adds necessary markup to <table>'s to achieve certain visual effects
	 */
	tables: function() {
		var headers = $$('.content h4.table_theme1, .content h4.table_theme2');
		for (var i=0;i<headers.length;i++) {
			headers[i].setHTML('<div class="w">' + headers[i].innerHTML + '</div>');
		};
		var tables = $$('.content table.theme1,.content table.theme2');
		for (var i=0;i<tables.length;i++) { // looping through all tables
			var ths = $ES('thead th',tables[i]);
			ths[0].addClass('f');
			ths[ths.length-1].addClass('l');
			for (var j=0;j<ths.length;j++) { // looping through th's in THEAD
				ths[j].setHTML('<span>' + ths[j].innerHTML + '</span>');
			};
			var trs = $ES('tbody tr',tables[i]);
			trs[0].addClass('f');
			trs[trs.length-1].addClass('l');
			for (var k=0;k<trs.length;k++) { // looping through all rows in TBODY
				var tds = $ES('td',trs[k]);
				tds[0].addClass('f');
				tds[tds.length-1].addClass('l');
				for (var l=0;l<tds.length;l++) { // looping through all tds in a row
					// if (window.ie && tds[l].hasClass('pre')) tds[l].setHTML('<pre>' + tds[l].innerHTML + '</pre>')
					if (trs.length == 1) {
						tds[l].setHTML('<div class="w">'+tds[l].innerHTML+'</div>');
						tds[l].setStyle('padding','0 0 5px');
					};
				};
			};
		};
	},
	
	definitions: function() {
		var defs = $$('.content .definitions dl');
		for (var i=0;i<defs.length;i++) {
			var dt = $E('dt',defs[i]);
			dt.setHTML('<span>' + dt.innerHTML + '</span>');
		};
	},
	
	faqs_array: new Object(),
	faqs: function() {
		var lists = $$('.content ul.faq');
		lists.each(function(item) { // looping through all ul.faq's
			var listitems = $ES('li',item);
			for (var i=0;i<listitems.length;i++) { // looping through all li's within each ul.faq
				var answer = $E('div.answer',listitems[i]);
				if ($defined(answer)) {
					var answerLink = answer.getPrevious();
					if (answer.getProperty('id')) {
						Visuals.faqs_array[answer.getProperty('id')] = new Fx.Slide(answer,{duration: 500});
						if ('#' + window.hash != answerLink.getProperty('href')) {
							Visuals.faqs_array[answer.getProperty('id')].hide();
						} else {
							answerLink.getParent().addClass('selected');
						} ;
					} else {
						answer.setProperty('id','faq_'+i);
						Visuals.faqs_array['faq_'+i] = new Fx.Slide(answer,{duration: 500});
						if ('#' + window.hash != answerLink.getProperty('href')) {
							Visuals.faqs_array['faq_'+i].hide();
						} else {
							answerLink.getParent().addClass('selected');
						};
					};
				};
				var trigger = $E('a',listitems[i]);
				if ($defined(trigger)) {
					trigger.addEvent('click',function(e) {
						evnt = new Event(e);
						answer = evnt.target.getNext().getFirst().getProperty('id');
						Visuals.faqs_array[answer].toggle('vertical');
						if (evnt.target.getParent().hasClass('selected')) {
							evnt.target.getParent().removeClass('selected');
						} else {
							evnt.target.getParent().addClass('selected');
						};
						evnt.stop();
					});
				};
			};
		});
	},
	
	infos: function() {
		var infos = $$('.content .info');
		for(var i=0;i<infos.length;i++) {
			infos[i].setHTML('<div class="w1"><div class="w2">' + infos[i].innerHTML + '</div></div>');
		};
	},
	
	/**
	 *	Checks and holds the info on anchor part of URL
	 */	
	hash: function() {
		var loc = window.location.toString();
		if ( (loc.lastIndexOf('#') != -1) && (loc.substr(loc.lastIndexOf('#')+1) != '') ) {
			window.hash = loc.substr(loc.lastIndexOf('#')+1);
		} else {
			window.hash = null;
		};
	},
	
	/**
	 *	Modifies code of submenus to achieve certain visual effects
	 */	
	submenu: function() {
		var sms = $$('.context .submenu');
		for (var j = 0;j<sms.length;j++) {
			var its = $ES('li',sms[j]);
			if (its.length > 0) {
				its[0].addClass('first');
				its[its.length-1].addClass('last');
			};
		};
	},
	/**
	 *
	 */
	slidingContextMenu: function() {
	  if(window.ie)
	    return
	    
		var triggers = $$('#sliding_context_menu a');
		var slides = $$('#sliding_context_menu_tab .slide');
		var options = {
			onActive: function(toggler, element){
				toggler.addClass('selected');
				toggler.getParent().addClass('selected');
			},
			onBackground: function(toggler, element){
				toggler.removeClass('selected');
				toggler.getParent().removeClass('selected');
			}
		};
		if (window.hash) {
			for (var i=0;i<slides.length;i++) {
				if (slides[i].getProperty('id') == window.hash) {
					options.show = i;
					break;
				}
			}
		}
		var accordion = new Accordion(triggers, slides , options);
		for (var j=0;j<triggers.length;j++) {
			triggers[j].addEvent('click',function(e){
				var evnt = new Event(e);
				evnt.stop();
			});
		}
	}
};


Validations = {
  compactLoginForgotPassword: function() {
    email = $('#account_email')[0].value;
    if(email == "") {
      $('#login_message').removeClass('info_message');
      $('#login_message').addClass('error_message');
      $('#login_message')[0].innerHTML = 'Please enter your email address first.';
      return false;
    }
    else if (Validations.emailIsValid(email)) {
      return true;
    }
    else {
      $('#login_message').removeClass('info_message');      
      $('#login_message').addClass('error_message');
      $('#login_message')[0].innerHTML = 'This email address is not valid.';
      return false;
    }
  }
  
  ,
  
  emailIsValid: function(email) { 
    return (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/).test(email);
  }
}


function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}
window.onload = externalLinks;

function selectInMenu(menuUlID, selectedItemId) {
  selectedClass = "selected";
  $('ul#' + menuUlID + ' > li' ).removeClass(selectedClass)
  $('ul#' + menuUlID + ' > li#' + selectedItemId).addClass(selectedClass)
  return true;
}

defaultLoginEmailValue = "email address";
defaultLoginPasswordValue = "password";

function loginFormShown() {
  loginEmailOnBlur();
  loginPasswordOnBlur();
  domElm =  $('#account_email')[0];

  if (!window.ie){
    domElm.focus();
    domElm.value=defaultLoginEmailValue;
    domElm.select();
  }else{
    domElm.value = defaultLoginEmailValue
    domElm.select()
    domElm.blur()
  }
}

function loginEmailOnFocus() {
  domElm =  $('#account_email')[0];

  if (domElm.value==defaultLoginEmailValue) {
    domElm.value = "";
    $('#compact_login #account_email').removeClass('pale');
    domElm.focus();
  }
}

function loginEmailOnBlur() {
  domElm =  $('#account_email')[0];

  if (domElm.value=="" || domElm.value==defaultLoginEmailValue) {
    domElm.value = defaultLoginEmailValue;
    $('#account_email').addClass('pale');
  }
}

function loginPasswordOnFocus() {
  domElm =  $('#account_password')[0];

  if (domElm.value==defaultLoginPasswordValue) {
    domElm.value = "";
    domElm.type = "password";
    $('#compact_login #account_password').removeClass('pale');
    domElm.focus();
  }
}

function loginPasswordOnBlur() {
  domElm =  $('#account_password')[0];

  if (domElm.value=="" || domElm.value==defaultLoginPasswordValue) {
    $('#compact_login #account_password').addClass('pale');
    try {
      domElm.type = 'text';
      domElm.value = defaultLoginPasswordValue;
    } catch(e){
      $('#account_email')[0].value = defaultLoginEmailValue
      domElm.value = defaultLoginPasswordValue;
    }
  }
}

$(document).ready(function(){
    $('.content > .info').each(function(i, elm){  
      elm.innerHTML = '<div class="w1"><div class="w2">' + elm.innerHTML + '</div></div>';
      });
    });


