// Common Functions
function el(e) { return document.getElementById(e);}
function create(e) { return document.createElement(e);}
function hasClass(ele,cls) { return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));} 
function addClass(ele,cls) { if (!this.hasClass(ele,cls)) ele.className += " " + cls;} 
function removeClass(ele,cls) {	if (hasClass(ele,cls)) { var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); ele.className=ele.className.replace(reg,' ');	}}
function merge(vals) { var s=''; for (var i = 0; i < vals.length; i++) if(s == "") s += vals[i];else  s += ',' + vals[i];  return s;}
function addTxt(el, txt) { var tx = document.createTextNode(txt); el.appendChild(tx);}
function getPos(e) { var l = t = 0;  var c = e; if (c.offsetParent) do {l += c.offsetLeft; 	t += c.offsetTop;} while (c = c.offsetParent);return [t,l];}
function setPos(e, t, l) { e.style.top = "" + t + "px"; e.style.left = "" + l + "px";}
function row_mover(e) {	if (e.className.lastIndexOf("_h") == -1) e.className = e.className + "_h"; }
function row_mout(e){ var i = e.className.lastIndexOf("_h");if (i > 0)e.className = e.className.substring(0, i); }
function open_link(link){ window.open(link, "newWnd"); return false; }

// Form Validate
var validate = function(){
	return {
		init: function(fid){ 
			var fe = el(fid); var fl = 0;	
			var es = fe.elements;
			var n = es.length;	
			for (var i = 0; i <= n; i++) {	
				if (es[i] && es[i].id) {
					var eid = es[i].id;			
					var arr = eid.split('.');
					
					if (!this.validate(fid, eid, arr[1], arr[2]))
						fl++;
				}
			}
	
			if (fl == 0) fe.submit();
	
			return false;
		}, // Validate
		validate:function(fid, eid, tid, type) {
			var e = el(eid); if (e) {
				var le = el(fid + "." + tid + ".lbl");
				var err = el(fid + "." + tid + ".err");					
				if (type && !this.isValid(fid, tid, e, e.value, type)) {  
			  		
					this.showErr(e);
			  		this.showErr(le);
			  		this.showErr(err);
				
			  		return false;
			  	}
				
				this.hideErr(e);
				this.hideErr(le);
				this.hideErr(err);
			}		
			
			return true;
		},
		showErr: function (e) {
			if (e && e.className && e.className.lastIndexOf("_e") == -1)
				e.className = e.className + "_e";					
		},
		hideErr: function(e) {
			if (e && e.className) {
				var i = e.className.lastIndexOf("_e");
				if (i > 0) e.className = e.className.substring(0, i);
			}
		}, // Valid Value?
		isValid: function(fid, tid, e, value, type)	{
			var tarr = type.split(":");
			for(var i = 0; i < tarr.length; i++) {
				var t = tarr[i];
				
				if (t == "rq") {
					if (value == "") return false;
				}
				else if (t == "em") {
					if (value) 	{	
						var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;   
		     			if(reg.test(value) == false)	
		     				return false;
					}
				}
				else if (t == "ul") {
					if (value) {
						var reg = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
     					if (reg.test(value) == false) return false;     			
					}
				}
				else if (t == "mi") {
					if (value && value.length <= 5) return false;
				}
				else if (t == "ma") {
					if (value &&value.length >= 10) return false;
				}
				else if (t == "ck"){
					if (!e.checked) return false;
				}
				else if (t == "ct") {				
					if (value == "" || value.split(',').length < 1)
						return false; 
				}
				else if (t == "ta") {	
					if (value == "" || value == "<BR>" || value == "<br>")
  						return false;
				}
				else if (t == "cate") {				
					if (value == "" || value.split(',').length < 3)
						return false; 
				}
				else if (t == 'sl') {					
					if (e.selectedIndex < 0 || !parseInt(e.options[e.selectedIndex].value))
						return false;
				}
				else if (t == "pw") {	
					var tid = parseInt(tid);	
					var ce = el(fid + "." + (tid + 1) + ".rq"); 
			
					if (value != ce.value) return false;
				}	
				else if (t == "dt" || t == "dr") {				
					var tid = parseInt(tid);
					var dEl = el(fid + "." + (tid + 1)); 
				 	var yEl = el(fid + "." + (tid + 2));
				
					var mVal = e.options[e.selectedIndex].value;
					var dVal = dEl.options[dEl.selectedIndex].value;
					var yVal = yEl.options[yEl.selectedIndex].value;
				
					if (mVal != 0 && dVal != 0 && yVal != 0)
					{
						mVal = mVal - 1;
						var dt = new Date();dt.setFullYear(yVal, mVal, dVal);
						
						if (dt.getMonth() != mVal)
							return false;
					} else if (t == "dr"){
						return false;
					}
					
					return true;
				}	
			}
			return true;			
		}	
	};
}();

// Ajax
var ajax = function(){
	return {
		mget: function(url, data, func) {
			this.request('GET', url, data, func);
		},
		post: function(url, data, func) {
			this.request('POST', url, data, func);
		},
		request: function(m, url, data, func){
			var xr = false;    		
    		if (window.XMLHttpRequest) xr = new XMLHttpRequest();
    		else if (window.ActiveXObject) xr = new ActiveXObject("Microsoft.XMLHTTP");
						
    		xr.open(m, url, true);
			if (m == 'POST') xr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    		xr.onreadystatechange = function() {
        		if (xr.readyState == 4) {
					if (func) func(xr.responseText);
        		}
    		}
    		xr.send(data);
		},
		getxml: function(str) {
			var doc = null;
			if (document.implementation.createDocument) {
        		var pr = new DOMParser();
        		doc = pr.parseFromString(str, "text/xml");
    		} else if (window.ActiveXObject) {
        		doc = new ActiveXObject("Microsoft.XMLDOM");
        		doc.async="false"; doc.loadXML(str);
    		}
    		return doc;
		}		
	};
}();

//Site Specific
var site = function() {
	return {
		addCategory:function(cid, title, inpId, dispId) {
			var inp = el(inpId); var val = "" + inp.value;
			var vals = val.split(',');
			if (this.updateValue(vals, cid)) {
				var newEl = create('div');
				newEl.id = 'cat.' + cid;
				newEl.className = 'cateRow';
				newEl.innerHTML = '<div class="fhleft">' + title + '</div><div align="right" class="fhright"><a onclick="return site.delCategory(\'' + inpId + '\',' + cid + ');" href="#">Remove</a></div>';
				 
				var disp = el(dispId); 
				disp.appendChild(newEl);
				inp.value = merge(vals);
			}
			
			return false;
		},		
		delCategory:function(inpId, cid) {
			elem = el('cat.' + cid);
			if (elem) {
				var inp = el(inpId); var val = "" + inp.value;
				var vals = val.split(',');
				var newvals = new Array(); var j = 0;			 
				for (var i = 0; i <= vals.length; i++) 
					if (vals[i] != cid)
						newvals[j++] = vals[i];
				
				elem.parentNode.removeChild(elem);
				inp.value = merge(newvals);
			}
			
			return false;
		},
		updateValue:function(vals, val) {
			var ex = false;
			for (var i = 0; i <= vals.length; i++) {
				if (vals[i] == val) {
					ex = true;
					break;	
				}	
			}
			
			if (!ex) {				
				vals[vals.length] = val;
				return true;
			}
			
			return false;
		},
		openlink: function(l) {
			window.open(l, "newWnd", 'status=0, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0, resizable=1, width=1000, height=450');
			return false;
		},
		openviewlink: function(l) {
			window.open(l, "newWnd");
			return false;
		},
		openParentLink: function (l) {
			window.parent.location.href = l;
			return false;
		},
		addLinks: function(inpId, contId) {
			var par = el(contId); 	var inp = el(inpId);
			var cnt = parseInt(inp.value) + 1;			
			
			this.createInp(par, 'text', null, 'url' + cnt, 'URL ' + cnt + ':', '');			
			
			inp.value = cnt;
			
			return false;
		}, 
		createInp:function(par, typ, id, nam, lbl, size) {
			var li = create('li'); par.appendChild(li);
			var lb = create('label'); lb.className = 'lbl';
			li.appendChild(lb);
			addTxt(lb, lbl);
			
			var inp = create('input');
			inp.name = nam; inp.className = 'inp';
			inp.type = typ; 
			li.appendChild(inp);
		}, 
		showEpisodeDetails: function (url, contId) {
			var contElem = el(contId);
			
			if (contElem.style.display == 'none')
			{
				contElem.style.display = 'block';
				contElem.innerHTML = '<div align="center" class="loading">Loading...</div>';
				ajax.mget(url, '', function(resp){
					contElem.innerHTML = resp;
				});
			}
			else 
				contElem.style.display = 'none';
				
			return false;
		}
	}
}();

var Ratings = function(){
	var curr = 0;
	var curTxt = '';
	var curTxtId = null;
	var txtEl = null;	
	var parentId = null;
	var thumPar = '';
	
	return {
		over: function(e, txt, txtId, rat) {
			curr = rat; 
			var bHover = true;
			for (var i = 1; i <= 5; i++) {
				var ele = el(txtId +  '.' + i);
				ele.className = ele.className.replace('_h', ''); 
				if (bHover) ele.className += '_h';		
				if (ele.id == e.id) bHover = false;	
			}
			txtEl = el(txtId); curTxt = txtEl.innerHTML; txtEl.innerHTML = txt;
			curTxtId = txtId;
		},
		out: function(e) {
			for (var i = 1; i <= 5; i++) {
				var ele = el(curTxtId +  '.' + i);
				ele.className = ele.className.replace('_h', '');
				if (i <= curr) ele.className += '_h';
			}
			
			if (txtEl) txtEl.innerHTML = curTxt;
			curr = 0; curTxt = ''; curTxtId = null;
		},
		click: function(url, txtId, ratId) {
			txtEl = el(txtId); curTxt = txtEl.innerHTML;
			txtEl.innerHTML = 'Saving';
			parentId = ratId;
			
			for (var i = 1; i <= 5; i++) {
				var ele = el(txtId +  '.' + i);
				ele.onmouseover = null;
				ele.onmouseout = null;
				ele.click = null;
			}
			ajax.mget(url, '', function(resp){
				Ratings.reset(resp);
			});
		},
		reset: function(resp) {
			el(parentId).innerHTML = resp;
			curTxt = ''; txtEl = null;
		}, 
		updateThumb : function(e, bIncr, url, parId, bLogin) {
			if (bLogin) {
				var act = "I"; if (!bIncr) act = "D";
				url = url + act;
				thumPar = parId;
				e.className = 'loading';
				ajax.mget(url, '', function(resp){
					Ratings.resetThumb(resp);
				});
			}
			else
			{
				window.location.href = '' + url;
			}
			
			return false;
		},
		resetThumb: function(resp) {
			el(thumPar).innerHTML = resp;
		},
		changeThumbHover: function (bIncr, thumbId, bTip) {
			var th = el(thumbId);
			var tip = '';
			if (bIncr) {
				th.className = 'hand rt_inc_h';
				tip = '<span class="clrGr">Works!</span>';
			}
			else {
				th.className = 'hand rt_dec_h';
				tip = '<span class="clrRd">Dead!</span>';
			}
			
			if (bTip) 
				tooltip.show(tip, 'tt');			
		},
		changeThumbHout: function(bIncr, thumbId, bTip) {
			var th = el(thumbId);
			if (bIncr)
				th.className = 'hand rt_inc_n';
			else 
				th.className = 'hand rt_dec_n';
				
			if (bTip)
				tooltip.hide();
		}
	}
}();

// Loader
var loader = function(){
	return {
		init:function(){
			var ts = "span,a,label,div,img,li";
			var el = ts.split(","); var es,e,cls;
			for (var j = 0; j < el.length; j++) {	
				es = document.getElementsByTagName(el[j]);
				if (es) {
					for (var i = 0; i < es.length; i ++) {
						e = es[i]; cls = e.className;
						if (cls) {
							if (cls.search('jsTip') != -1) this.tooltip(e);
							else if (cls.search('jsLink') != -1 && el[j] == 'a') this.openlink(e);
						}
					}
				}
			}
		},
		tooltip: function(e) {
			tooltip.add(e, 'tt');
		},
		openlink: function(e) {
			var l = e.href;
			alert(1);
			e.onclick = function() {
				alert(2);
				window.open(l, "newWnd");
				return false;
			}
		}
	};
} ();

document.onload = loader.init();
