var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS){
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

function checkIt(string){
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}
function showImages(path, imageFile){
	imageSpace = document.getElementById("displayImages");
	
	str = "";
	str += "<p><b>Thumbnail</b></p>";
	str += "<p><img src='" + path + "thumbs/" + imageFile+ "' /></p>";
	str += "<p><b>Image</b></p>";
	str += "<p><img src='" + path + imageFile+ "' /></p>";
	
	imageSpace.innerHTML = str;
}

function showRouteImages(path, imageFile){
	imageSpace = document.getElementById("displayImages");
	
	str = "";
	str += "<p><b>Small</b></p>";
	str += "<p><img src='" + path + "routeImageMed/" + imageFile+ "' /></p>";
	str += "<p><b>Large</b></p>";
	str += "<p><img src='" + path + "routeImageLarge/" + imageFile+ "' /></p>";
	
	
	if(imageSpace.innerHTML == ""){
		imageSpace.innerHTML = str;	
	}
	
	imageSpace.innerHTML = str;
}

function showSingleImage(path, imageFile){
	//alert("path=" + path + ", imageFile=" + imageFile);
	var str = "<p><b>Image</b></p>";
	str += "<p><img src='" + path + imageFile+ "' /></p>";
	
	document.getElementById("displayImages").innerHTML = str;
}


// figures out the order of the list
function get_list_order(theList, attributeName){
	var ar = new Array();
	var children = document.getElementById(theList).childNodes;
	// clear the styles first
	for(i = 0; i < children.length; i++){
		if(children[i].nodeName == "LI"){	// make sure it is a list tag
			if(children[i].getAttribute(attributeName) != null){
				ar.push(children[i].getAttribute(attributeName));
			}
		}
	}
	return ar;	// return the array with the order
}

function navigationLink(l){
	parent.frames[1].location.href = l;	
}

function refreshNavigationList(){
	parent.frames[0].location = "navigationList.php?audienceId=" + audienceID;
}
function refreshMainNavigationList(){
	parent.frames[0].location = "../special/asset_list.php?pageType=navAudiences";
}
function refreshNavigation(type){
	parent.frames[0].location = "../special/asset_list.php?pageType=" + type;
}
var mouse_x, mouse_y;
// updates the x and y variables of the mouse pointer when the mosemove event listener is declared
function getXY(e) {
  mouse_x = (window.Event) ? e.pageX : event.clientX;
  mouse_y = (window.Event) ? e.pageY : event.clientY;
}
function getScrollY(){
	return (window.pageYOffset == undefined ? document.documentElement.scrollTop : window.pageYOffset);	
}
var overModify = false;
var modifyTimeout;
function showModifyDiv(id){
	clearTimeout(modifyTimeout);
	var elem = document.getElementById(	id);
	var modify = document.getElementById("podModify");
	modify.innerHTML = document.getElementById("podModify_" + id).innerHTML;
	var offset_y = elem.offsetTop + elem.offsetParent.offsetTop;
	var new_elem = elem.offsetParent;
	while(Math.abs(offset_y - mouse_y) > 30){
		//if(new_elem.offsetParent){
			if(new_elem){
				new_elem = new_elem.offsetParent;
				if(new_elem){
					offset_y += new_elem.offsetTop;
				}else{
					break;	
				}
			}else{
				break;	
			}
	}
	browser_offset_y = (browser == "Internet Explorer" ? 15 : 20);
	//if(Math.abs(mouse_y - offsetTop);
	modify.style.top = (offset_y - browser_offset_y) + "px";
	//modify.style.left = (mouse_x - 20) + "px";
	modify.style.left = "2px";
	modify.style.display = "block";
}
function hideModifyDivDelay(){
	modifyTimeout = setTimeout("hideModify();", 500);
}

function hideModify(){
	document.getElementById('podModify').style.display = 'none';
}

// takes an even number of arguements, the odd arguements are the tag's id
// and the even arguements are the classname to change the id to
function changeClass(){
	args = changeClass.arguments;
	for(i = 0; i < args.length; i += 2){
		if(document.getElementById(args[i])){
			document.getElementById(args[i]).className = args[i + 1];
		}
	}
}

function jump_page(pageNumber, formVar){
	var form = document.forms[formVar];
	form.resPg.value = pageNumber;
	form.submit();
}

function in_array(val, ar){
	for(i = 0; i < this.ar.length; i++){
		if(val == this.ar[i]){
			return i;
		}
	}
	return -1;
}

function radio_button_value(val){
	// Loop from zero to the one minus the number of radio button selections
	for (var i = 0; i < val.length; i++){
		if (val[i].checked){
			return val[i].value;
		}
	}

	return false;
}

function set_radio_button_value(radio, val){
	// Loop from zero to the one minus the number of radio button selections
	for(var i = 0; i < radio.length; i++){
		radio[i].checked = (radio[i].value == val ? true : false);
	}

	return false;
}

function decode(str){
	returnstr = unescape(str);
	return returnstr.replace(/\+/g, " ");
}

function get_multiple(item){
	var selected = new Array();
	alert(item.length);
	for(i = 0; i < item.length; i++){
		if(item.options[i].selected){
			selected.push(item.options[i].value);
		}
	}	
	return selected;
}

function get_size(){
	if (self.innerWidth)
	{
		frameWidth = self.innerWidth;
		frameHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientWidth)
	{
		frameWidth = document.documentElement.clientWidth;
		frameHeight = document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		frameWidth = document.body.clientWidth;
		frameHeight = document.body.clientHeight;
	}
	//alert(frameWidth);
	var obj = {w: frameWidth,h:frameHeight};
	return obj;
}


function get_window_size(){
	var w,h;
	
	var offset = get_window_offset();
	
	if (self.innerHeight){// all except Explorer
		w = self.innerWidth;
		h = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight){
		// Explorer 6 Strict Mode
		w = document.documentElement.clientWidth;
		h = document.documentElement.clientHeight;
	}
	else if (document.body){ // other Explorers
		w = document.body.clientWidth;
		h = document.body.clientHeight;
	}
	var ar = new Array();
	ar.w = w;
	ar.h = h;
	
	return ar;
}

// gets the offset of the window
function get_window_offset(){
	var x,y;
	if (self.pageYOffset){ // all except Explorer
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop){
		// Explorer 6 Strict
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body){ // all other Explorers
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	var ar = new Object();
	ar.w = x;
	ar.h = y;
	
	return ar;
}

function find_position(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	var o = new Object()
	o.left = curleft;
	o.top = curtop;
	
	return o;
}

function create_request()
{
	var req;	// the request object that will be created
	// if using a regular complaince standard browser
	if (window.XMLHttpRequest)
	{
   	    req = new XMLHttpRequest();
   	}
   	// if using Internet Explorer
	else if (window.ActiveXObject) 
	{
   	    req = new ActiveXObject("Microsoft.XMLHTTP");
   	}
	if (!req) 
	{
    	alert('Cannot create an XMLHTTP instance');
        return false;
    }
    else
    {
		return req;
	}
}

function validate_form_ajax(form, type)
{
	
	var req = create_request();
	var formAction = form.formAction.value;
	form.formAction.value = "validate";
	var formID;

	if(req)
	{
		if(type == "page")
		{
			url = controllers["pageEditInsert"];
			formID = "pageForm";
		}
		else if(type.indexOf("Links") > -1)
		{
			url = controllers[type];
			formID = "assetForm";
		}
		else if(type.indexOf("special_") > -1)
		{
			var parts = type.split("_");
			url = MODULES_URL + "/" + parts[1] + "/controllers/editInsert.php";
			formID = "specialForm";
		}
		else if(type.indexOf("base_") > -1)
		{
			var parts = type.split("_");
			url = MODULES_URL + "/base/controllers/" + parts[1] + "/editInsert.php";
			formID = "specialForm";
		}
		else if(type == "custom")
		{
			//alert(form.validateURL.value)
			url = form.validateURL.value;
			formID = form.id;
			//formID = "specialForm";
		}
		else
		{
			formID = "assetForm";
			url = form.formController.value;
		}

		//alert("url ("+url+")");
		// open the connection
		req.open("POST", url, true);

		/* when the data has been completely loaded back into the browser
		 * and the status is OK, it puts the text string that was returned
		 * into the tag specified in curDiv, and shows the div (if specified)
		 */
		
		req.onreadystatechange = function()
		{
			
			if (req.readyState == 4 && req.status == 200) 
			{
				//alert("got response");
				var response = req.responseText;
				//alert(response);
				form.formAction.value = formAction;
				
				//alert("before Json");
				var errorObj = Json.evaluate(response);
				//alert("after Json");
				
				//alert(Json.toString(errorObj));
				// if there are errors
				if(errorObj.errors.length > 0)
				{
					show_form_errors(form, errorObj);
				}
				else if(response.indexOf("{'errors'") > -1)
				{
					// call the correct form submitions based on the type
					if(type == "page")
					{
						page_form_ajax(form);
					}
					else if(type.indexOf("Links") > -1)
					{
						links_form_ajax(form, type);
					}
					else
					{
						form.submit();
					}
				}
				else
				{
					alert("Form did not validate");
					//alert(response);
				}
			}	
		}
		
		
		
		req.setRequestHeader('User-Agent','XMLHTTP/1.0');
		// set the header
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		var str = "";
		
		//collect any files
		if(form.elements != undefined){
			for (var key in form.elements){
				if (form.elements[key] != undefined && form.elements[key].value){
					if(form.elements[key].type == 'file'){
						str += "&"+form.elements[key].name+"="+form.elements[key].value;
					}
					else if(form.elements[key].type == "checkbox"){
						//alert(form.elements[key].name + "=" + form.elements[key].checked);
						var val = form.elements[key].checked == true ? 1 : 0;
						str += "&"+form.elements[key].name + "=" + val;
					}
					
				}
			}
		}

		// get the form values string
		qString = $(formID).toQueryString();

		// send the request
		//alert(qString + str);
		req.send(qString + str);
	}
}

function show_form_errors(form, jsonObj)
{
	var fields = jsonObj.fields;
	// reset the fields
	for(var i = 0; i < fields.length; i++){
		if($("field_" + fields[i].field) != undefined){
			var temp = $("field_" + fields[i].field).className;
			if (temp.indexOf("warning") >= 0){
				$("field_" + fields[i].field).className = temp.replace("warning", "");

				// reset the error message
				if($("message_" + fields[i].field)){
					$("message_" + fields[i].field).innerHTML = "";
				}
			}
		}
	}
	
	var errors = jsonObj.errors;
	for(var i = 0; i < errors.length; i++){
		// change style to warning
		if($("field_" + errors[i].field) != undefined && $("field_" + errors[i].field).className.indexOf("warning") < 0){
			$("field_" + errors[i].field).className += " warning";
		}
		// output the error message
		if($("message_" + errors[i].field)){
			$("message_" + errors[i].field).innerHTML = errors[i].message;
		}
	}
}


function ButtonSearch(buttonid, e, text)
{
    var CharCode = e.keyCode? e.keyCode : e.charCode;
    if(CharCode == 13) {
        document.getElementById(buttonid).click();
        return false; 
    } else {
        return true;
    }
}
