/*
* Hannibal CMS 2010
* agvozden@gmail.com
* latest update 2010-01-30
*/
function include(file){
	//this function includes all necessary js files for the application
	var script  = document.createElement('script');
	script.src  = file;
	script.type = 'text/javascript';
	script.defer = true;
	document.getElementsByTagName('head').item(0).appendChild(script);
}
function setNewScript(src,elemId){
	var fileref = document.createElement('script');
	fileref.setAttribute("type","text/javascript");
	fileref.setAttribute("src", src);
	document.getElementById(elemId).appendChild(fileref);	
}
function checkForm(className){
	var arClass, bValid;
	//var objField = objForm.getElementsByTagName('*');
	// require prototype
	var objField = document.getElementsByClassName(className);

	for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++)  {
		// Allow for multiple values being assigned to the class attribute
		arClass = objField[iFieldCounter].className.split(' ');
		for (var iClassCounter=0; iClassCounter<arClass.length; iClassCounter++)    {
			switch (arClass[iClassCounter])      {
			case 'text':
				if (!checkTextField(objField[iFieldCounter],objField[iFieldCounter].id+'!')) return false;
				break;
			case 'email' :
				if (!checkEmailField(objField[iFieldCounter],objField[iFieldCounter].id+'!')) return false;
				break;
			case 'password' :
				if (!checkPasswordField(objField[iFieldCounter],objField[iFieldCounter].id+'!',6)) return false;
				break;
			case 'select':
				if (!checkSelectField(objField[iFieldCounter],objField[iFieldCounter].id+'!')) return false;           
				break;
			case 'check':
				if (!checkCheckField(objField[iFieldCounter],objField[iFieldCounter].id+'!')) return false;           
				break;
			case 'radio':
				if (!checkRadioField(objField[iFieldCounter],objField[iFieldCounter].id+'!')) return false;
				break;
			//alert(objField[iFieldCounter].id)
			}
		}
	}
	return true;
}
function checkTextField(field,message){
	if (field.value.length==0){
		field.focus();
		write_dump(message);
		return false;}
	return true;
}
function checkPasswordField(field,message,min_len,message_mlen){
	if (field.value.length==0){
		field.focus();
		write_dump(message);
		return false;}
	if (field.value.length<min_len){
		if (!message_mlen) message_mlen = message;
		field.focus();
		write_dump(message_mlen);
		return false;}
	return true;
}
function checkConfirm(field,field2,message){
	if (field.value!=field2.value){
		field.focus();
		write_dump(message);
		return false;}
	return true;
}
function checkEmailField(field,message,message_valid){
	if (field.value.length==0 && message !==''){
		field.focus();
		write_dump(message);
		return false;}
	if (!message_valid) message_valid = message;
	if (!checkEmailFieldValid(field, message_valid)) return false;
	return true;
}
function checkEmailFieldValid(field, message_valid){
	if (field.value.indexOf("@")<1 || field.value.indexOf(".")<1){
		write_dump(message_valid, field);
		return false;
	}
	return true;
}
function checkCheckField(field,message){
	if (!field.checked){
		write_dump(message, field);
		return false;}
	return true;
}
function checkSelectField(field,message){
	if (field.options[field.selectedIndex].value == ""){
		write_dump(message, field);
		return false;}
	return true;
}
function checkRadioField(field,message){
	var radioOption = -1;
	for (cntr=0; cntr<field.length; cntr++) {
		if (field[cntr].checked) radioOption = cntr;
	}
	if (radioOption == -1){
		write_dump(message);
		return false;
	}
	return true;
}
// -- common
function write_dump(message, field){
	if(message.length<1) return false;
	alert(message);
	if (field) field.focus();
	return true;
}
function writeDump(dumpDiv, message){
	var t = document.createTextNode(message);
	var p = document.getElementById(dumpDiv);
	var c = p.firstChild;
	if (c) p.removeChild(c);
	p.appendChild(t);
}
function clearDump(dumpDiv){
	var p = document.getElementById(dumpDiv);
	var c = p.firstChild;
	if (c) p.removeChild(c);
	return true;
}
// --
function initXMLHttp(){
	var req = false;
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
		// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject('Msxml2.XMLHTTP');
		} catch(e) {
			try {
				req = new ActiveXObject('Microsoft.XMLHTTP');
			} catch(e) {
				req = false;
			}
		}
	}
	return req;
}
function startAsync(sURL,fCallBack,elementId,alternative) {
	try{
		var req = initXMLHttp();
		req.onreadystatechange=function(){
			fCallBack(req, elementId);
		};
		req.open("GET",sURL,true);
		req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
		req.send(null);
	} catch (err) {
		if(alternative) setNewScript(alternative,elementId);
	}
}
function asyncComplete(oAsync) {
	if (oAsync.readyState == 4 && (oAsync.status==200 || window.location.href.indexOf("http")==-1)) {
		return true;
	} 
	return false;
}
function loadElement(oAsync,elementId){
	if(asyncComplete(oAsync)){
		var results = oAsync.responseText;
		if (results.indexOf("<script")>=0){
			// use reg: /<script[^>]*>([\s\S]*?)<\/script>/gi
			var jscript = results.substring(results.indexOf("<script"), results.indexOf("</script"));
			jscript = jscript.substr(jscript.indexOf(">")+1);
			eval(jscript);
		}
		document.getElementById(elementId).innerHTML = results;
	}
}
// --
function setInnerText(obj, text){
	if (obj.textContent){
		obj.textContent = text;}
	else if (obj.innerText){
		obj.innerText = text;}
}
function innerHTML_select(object,innerHTML,selected){
	if(document.all) {
		if (selected) innerHTML = object.innerHTML + innerHTML;
		object.innerHTML = '';
		object.outerHTML = object.outerHTML.replace("</SELECT>",innerHTML + "</SELECT>");
	} else 
	innerHTML_select_full(object,innerHTML);
	if (selected) selectSetByValue(object,selected);
}
function innerHTML_select_full(object,innerHTML){
	object.innerHTML = "";
	var selTemp = document.createElement("test_select");
	var opt;
	selTemp.id="test_select1";
	document.body.appendChild(selTemp);
	selTemp = document.getElementById("test_select1");
	selTemp.style.display="none";
	if(innerHTML.toLowerCase().indexOf("<option")<0){
		innerHTML = "<option>" + innerHTML + "</option>";
	}
	innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span");
	selTemp.innerHTML = innerHTML;
	var selTempLength = selTemp.childNodes.length;
	for(var i=0;i<selTempLength;i++){
		if(selTemp.childNodes[i].tagName){
			opt = document.createElement("OPTION");
			for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
				opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true));
			}
			opt.value = selTemp.childNodes[i].getAttribute("value");
			opt.text = selTemp.childNodes[i].innerHTML;
			opt.text = opt.text.replace(/&amp;/g,"&");
			if(document.all){
				object.add(opt);
			}else{
				object.appendChild(opt);
			}
		}
	}
	document.body.removeChild(selTemp);
	selTemp = null;
}
function selectSetByValue(field, value){
	field.disabled = true;
	for(index = 0; index < field.childNodes.length; index++){
		if(field[index].value == value){
			field.selectedIndex = index;
		}
	}
	field.disabled = false;
}
// --
/*Limit the number of characters per textarea */
function textCounter(field,cntfield,maxlimit) {
	if (field.value.length > maxlimit) // if too long...trim it!
	field.value = field.value.substring(0, maxlimit);
	// otherwise, update 'characters left' counter
	else
	cntfield.value = maxlimit - field.value.length;
}
// Flag for whether or not to automatically call the print function
var gAutoPrint = true;
function printSpecial(){
	if (document.getElementById != null){
		var html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml"><head>\n';
		if (document.getElementsByTagName != null){
			var headTags = document.getElementsByTagName("head");
			if (headTags.length > 0)
			html += headTags[0].innerHTML;
		}
		html += '\n</he' + 'ad>\n<body>\n';
		var printReadyElem = document.getElementById("printReady");
		if (printReadyElem != null){
			html += printReadyElem.innerHTML;
		}else{
			alert("Could not find the printReady section in the HTML");
			return;
		}
		html += '\n</bo' + 'dy>\n</ht' + 'ml>';
		var printWin = window.open("","printSpecial");
		printWin.document.open();
		printWin.document.write(html);
		printWin.document.close();
		if (gAutoPrint)
		printWin.print();
	}else{
		alert("Sorry, the print ready feature is only available in modern browsers.");
	}
}
//<div id="printReady">

/*toogle  show or hide element by id*/
function show_hide(elem, visible){
	var elem_id = document.getElementById(elem);
	if (visible == null){
		visible = elem_id.style.display;
		if (visible == 'none') elem_id.style.display = 'block';
		else elem_id.style.display = 'none';
	} else {
		elem_id.style.display = visible;
	}
}

function confirm_action(field, actionFn) {
	if (field.value=='delete'){
		return confirm_delete(false, actionFn);
	}else {
		return true;
	}
	return false;
}
function confirm_delete(message, actionFn){
	if (!message) var message = 'Are you sure you want to delete this?';
	var cf = false;
	if (actionFn) 
	try {customConfirm(message, actionFn);} catch(err) {cf = confirm(message);}
	else cf = confirm(message);
	return cf;
}

function trim(str){
	s = str.replace(/^(\s)*/, '');
	s = s.replace(/(\s)*$/, '');
	return s;
}

function mailto(account, domain){
	window.location.href = 'mailto:' + account + '@' + domain;
	return false
}

function checkAll(field) {
	if (field.length>0) {
		for (i = 0; i < field.length; i++)
		field[i].checked = true;
	} else {
		field.checked = true;
	}
}
function uncheckAll(field) {
	if (field.length>0) {
		for (i = 0; i < field.length; i++)
		field[i].checked = false;
	} else {
		field.checked = false;
	}
}
function radioValue(radio) {
	var selection=null;
	for(var i=0; i < radio.length; i++) {
		if(radio[i].checked) {
			selection=radio[i].value;
			return selection;
		}
	} return selection;
}
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
		return;
	}
}
function writeHTML(id,S) {
	var elem = (document.getElementById ? document.getElementById(id) : (document.all ? document.all[id] : undefined));
	if (!elem) { document.write(S); return false; }
	elem.innerHTML = S;
	return true;
}

/**
* str_replace
*
* This function returns a string or an array with all occurrences of
* [search] in [subject] replaced with the given [replace] value.
* If you don't need fancy replacing rules (like regular expressions), you should always use this function.
*
* @param string search
* @param string replace
* @param string string
*/
function str_replace (search, replace, subject){
	var result = '';
	var oldi = 0;
	for (i = subject.indexOf (search); i > -1; i = subject.indexOf (search, i)){
		result += subject.substring (oldi, i);
		result += replace;
		i += search.length;
		oldi = i;
	}
	return result + subject.substring (oldi, subject.length);
}

function retargExtLinks() {
	var l, i = 0;
	var r = new RegExp ('^' + location.protocol + '//' + location.hostname);
	while (l = document.links[i++]) {
		if (!r.test (l.href)) l.onclick = function () {
			window.open (this.href, '');
			return false;
		}
	}
}
function retargDivLinks(divId){
	theDiv = document.getElementById(divId);
	links = theDiv.getElementsByTagName('a');
	for (var i=0, len=links.length; i < len; i++) {
		links[i].setAttribute('target', '_blank');
	}
}
