function initTab(){
	var tabs = document.getElementById("ipow_tabs").getElementsByTagName("li");
	for(var i=0; i<tabs.length ; i++){
		var tab = tabs[i];
		tab.onclick = function(){focusTab(this)};
		tab.onmouseover = function(){onOffTab(this,'hover')};
		tab.onmouseout = function(){onOffTab(this,'')};
	}
	if(tabs[0] != null)	focusTab(tabs[0]);
}

function onOffTab(obj,clazz){
	var as = obj.getElementsByTagName("a");
	if(obj.className != "focus"){ 	
		obj.className = clazz;
		for(var i=0; i<as.length; i++){
			as[i].className = clazz;
		}
	}
}

function focusTab(obj){	
	// Main function for onClick
	changeIpowTab(obj);
	showIpowTool(obj);
}
function changeIpowTab(obj) {
	// Clear class names for tab li's & set the class name for the selected tab li
	var lis = document.getElementById('ipow_tabs').getElementsByTagName('li');
	for (var i = 0; i < lis.length; i++) { lis[i].className = '';	}

	var as = document.getElementById('ipow_tabs').getElementsByTagName('a');
	for (var i = 0; i < as.length; i++) {	as[i].className = '';	}

	document.getElementById(obj.id).className = 'focus';
	var as = document.getElementById(obj.id).getElementsByTagName('a');
	for (var i = 0; i < as.length; i++) {	as[i].className = 'focus';	}
}

function showIpowTool(obj) {
	var divs = document.getElementById('ipow_tools').getElementsByTagName('div');
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == "ipow_tool") {	divs[i].style.display = 'none'; }
	}
	document.getElementById(obj.id.replace("tab","tool")).style.display = 'block';
}

function initBestPick(){
	switchPage(1);
}

function nextPrevPage(action){
	var current = eval(document.getElementById('ipow_bestpicks_current').innerHTML);
	var totalPage = eval(document.getElementById('ipow_bestpicks_total').innerHTML);
	if(action == 'next'){
		if(current+1 > totalPage) return false;
		else	switchPage(current+1);
	}
	if(action == 'prev'){
		if(current-1 < 1)	return false;
		else	switchPage(current-1);	
	}
}

function switchPage(page){
	var ts = document.getElementById("ipow_bestpicks_content").getElementsByTagName("table");
	if(ts.length > 0){
		var totalPage = eval(document.getElementById('ipow_bestpicks_total').innerHTML);
		for(var i=0; i<ts.length; i++){
			if(ts[i].id.match(/bestpicks_/) )	ts[i].style.display = 'none';
		}	
		document.getElementById("bestpicks_"+page).style.display = "block";
		var current = document.getElementById('ipow_bestpicks_current');
		if(current) current.innerHTML = page;
		var next = document.getElementById("ipow_bestpicks_next");
		var prev = document.getElementById("ipow_bestpicks_prev");
		if(prev) prev.style.visibility = "";
		if(next) next.style.visibility = "";
		if(page==1){
			if(prev) prev.style.visibility = "hidden";
		}
		if(page==totalPage){
			if(next) next.style.visibility = "hidden";
		}
	}
}

function setTabHeight(){
	//get max height from best picks
	var height = 0;	
	var ts = document.getElementById("ipow_bestpicks_content").getElementsByTagName("table");
	for(var i=0; i<ts.length; i++){
		if(ts[i].id.match(/bestpicks_/)){
			var rowHeight = 0;
			var trs = ts[i].getElementsByTagName("tbody")[0].childNodes;
			for(var j=0; j<trs.length; j++){
				var tagName = trs[j].tagName;
				if(tagName!=null && tagName.toLowerCase()=="tr"){
					rowHeight += trs[j].offsetHeight;
				}
			}
			if(rowHeight > height)	height = rowHeight;
		}
	}
	if((height+60) < 230) height = 230; //min height 230
	else height += 60;
	var divs = document.getElementById("ipow_tools").getElementsByTagName("div");
	for(var i=0; i<divs.length; i++){
		if(divs[i].id.match(/ipow_tool/)){
			divs[i].style.height = "0px";
			divs[i].style.height = height + "px";
			if(!divs[i].id.match(/ipow_tool1/)){
				divs[i].getElementsByTagName("div")[0].style.height = height + "px";
				divs[i].getElementsByTagName("div")[0].style.overflow = "auto";
			}
		}
	}
}

function toggle(strId){
	var obj = document.getElementById(strId);
	obj.style.display = (obj.style.display == 'none')?'block':'none';
}

function show(strId){
	document.getElementById(strId).style.display = 'block';
}

function hide(strId){
	document.getElementById(strId).style.display = 'none';
}

function popUpWin(url, x, y) {
	if (x == null || y == null) {
		var newWin = window.open(url, '');
	} else {
		var newWin = window.open(url,'Popup','width='+x+',height='+y+',,resizable=1,scrollbars=1');
	}	
	newWin.focus();
}

/*Add windows onload event without overwrite the original*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if(oldonload) oldonload();
      func();
    }
  }
}

function trim(val){
	return val.replace(/^\s*|\s*$/g,"");
}

function setUrlParam(name,val){
	return setParam(window.location.href,name,val);
}

function setParam(url,name,val){
	url = url.replace(new RegExp("&?"+name+"=[^&\s]*"),"");
	return url + ((url.match(/\?$/)?"":(url.indexOf("?")!=-1)?"&":"?")+name+"="+val);
}

//name-spacing
var ipowjs = {
	
	//** Utility **
	//identifying Array object
	isArray: function(o){
	 	return Object.prototype.toString.call(o) === '[object Array]';
	}, 
	
	
	//get elem by id
	byId: function(id, context){
		context = context || document;
		if ( typeof context.getElementById !== "undefined") {
			return context.getElementById(id);			
		}
		return null;
	},
	
	//A good enough event listener
	addEvent: function( obj, type, fn ) {
		if(typeof(obj)  == 'string'){
			obj = this.byId(obj);
		}
		if(this.isArray(obj)){
			for(var i=0; i<obj.length; i++){
				this.addEvent(obj[i],type,fn);
			}
			return;
		}
		if(obj){
	       this.lazyEvent(obj, type, fn);
		}
	},
	
	lazyEvent: function(obj, type, fn){
		if (window.addEventListener){
			this.lazyEvent = function(obj, type, fn){
				obj.addEventListener(type, fn, false);
			}
		}
		else if (window.attachEvent){
			this.lazyEvent = function(obj, type, fn){
				obj.attachEvent('on' + type, function() {
					return fn.call(obj,window.event);
				});
			}
		}
		this.lazyEvent(obj, type, fn);
	},
	
	//Copy of add loadEvent
	addLoadEvent: function(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
	   		window.onload = function() {
		    	if(oldonload) oldonload();
		    	func();
		    }
		}
	},
	
	//focus field onload
	focusField: function(id){
		var obj = ipowjs.byId(id);
		if(obj){
			this.addLoadEvent(function(){
				obj.focus();	
			});
		}
	},
	
	//set select option
	setSelectOption: function(obj, val){
		for(var i=0; i<obj.options.length; i++){
			if(obj.options[i].value == val){
				obj.options[i].selected = true;
				break;
			}
		}
	},
	
	//Form validation
	isEmptyField: function(id){
		
		//speical syntax to support partial required group fields.
		//e.g. address1|address2, phone|phoneArea|phoneCountry
		//all fields empty ==> return empty
		if(id.match(/\|/)){ 
			var ids = id.split(/\|/);
			var empty = true;
			for(var i=0; i<ids.length; i++){
				var obj = this.byId(ids[i]);
				if(obj && trim(obj.value)!=""){
					empty = false;
					break;
				}
			}
			return empty;
		}
		
		var obj = this.byId(id);
		if(obj && trim(obj.value)=="") 
			return true;
		return false;
	},
	
	hasEmptyFields: function(arr){
		for(var i=0; i<arr.length; i++){
			if(this.isEmptyField(arr[i]))
				return true;
		}
		return false;
	},
	
	checkChecked: function(id){
		var obj = this.byId(id);
		return obj && obj.checked;
	}, 
	
	checkValue: function(id, value){
		var obj = this.byId(id);
		return obj &&  trim(obj.value) == value;
	},
	
	setBtnsError: function(idList, hasError){
		for(var i=0; i<idList.length; i++){
			var obj = this.byId(idList[i]);
			if(obj){
				obj.className = hasError? "btn-disable":"btn";
				obj.disabled = hasError;
			}	
		}
	},
	
	
	btnState : function(params){
		var requiredFields = params.requiredFields;
		var buttonIds = params.buttonIds;
					
		var refresh = function(){
			var hasEmpty = ipowjs.hasEmptyFields(requiredFields);
			ipowjs.setBtnsError(buttonIds, hasEmpty);
		};
		
		this.attachBtnStateEvent(requiredFields, refresh);
		return refresh;
	},
	
	attachBtnStateEvent: function(fields, func){
		fields = fields.join("|").split("|");
		for(var i=0; i<fields.length; i++){
			var obj = this.byId(fields[i]);
			if(obj){
				ipowjs.addEvent(obj,'change', func);
				if(!/select/.test(obj.tagName) && !/radio|checkbox/.test(obj.type)){ //text or textarea
					ipowjs.addEvent(obj,'keyup', func);	
				}
			}
		}
	},
	
	initBtnState: function(params){
		var f = this.btnState(params);
		f();
		this.addLoadEvent(f);
	}	
}