// AJAX
// Usage (url, data for POST operation, optional callback function)
function ajaxReq(url, data, callback) {
    var xhr = false;

    if (typeof XMLHttpRequest != 'undefined') {
        xhr = new XMLHttpRequest();
        if (xhr.overrideMimeType) {
            xhr.overrideMimeType('text/html');
        } // if
    } else if (window.ActiveXObject) {
        // Internet Explorer is stupid
        var versions = [
            "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", 
            "MSXML2.XMLHttp", "Microsoft.XMLHttp"
        ];
        for (var i = 0; i < versions.length; i++) {
            try {
                xhr = new ActiveXObject(versions[i]);
                break;
            } catch (e) {} // try
        } // for
    } // if

    if (!xhr) {
        alert("Error: XMLHttpRequest not supported.");
        return;
    } // if

    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) { // if ready
            if (xhr.status != 200) { // if http status != OK
                alert("Error: Could not connect to server. HTML " + xhr.status);
            } else if (callback && typeof(callback) === "function") {
                callback(xhr.responseText);
            } // if
        } // if
    }; // xhr.onreadystatechange function
	
	xhr.open(data ? 'POST' : 'GET', url, true);
	//xhr.open(method, url, async, user, password)

    if (data) {
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.setRequestHeader('Content-length', data.length);
        xhr.setRequestHeader('Connection', 'close')
    }

    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.send(data);
} // ajaxReq

function addEvent(element, type, handler) {
    // attach event of "type" to element
    // when the event is triggered, handler() will be called
} //addEvent
// call this function like:
// addEvent(link, "click", function(e) {
        // handle click event
// });

// Hindre browser i å utføre normal handling på et element
function preventDefault(e) {
    e = e || window.event;
    if (e.preventDefault) {
        e.preventDefault();
    } // if
    e.returnValue = false;
} // preventDefault
// Ex.
// addEvent(form, 'submit', function(e) {
//      // do something
//      preventDefault(e);
// });

function getQueryString(formName, fieldClassName) { // Build query string from form
    if (fieldClassName === undefined) {
        fieldClassName = '';
    }
    var query_str = '';
    var fieldvalue = null;
    var form = document.forms[formName];
    var elem = form.elements;
    
    for (var i = 0; i < elem.length; i++) {
        if (elem[i].className == fieldClassName) { // if form element is value field
            switch(elem[i].type) {
                case 'checkbox': case 'radio':
                    if (elem[i].checked) fieldvalue = elem[i].value;
                default:fieldvalue = elem[i].value;
            } // switch
            query_str += elem[i].name + "=" + encodeURIComponent(fieldvalue) + "&";
        } // if
    } // for
    
    query_str = query_str.slice(0,-1); // Remove last '&'
    return query_str;
} // getQueryString

// eg. validateForm('foo', 'required')
function validateForm(formName, requiredFieldClassName) {
    var valid = true; // presume valid until proven otherwise
    var pos;
    var form = document.forms[formName];
    var elem = form.elements;
    
    for (var i = 0; i < elem.length; i++) {
        // Find fields containing requiredFieldClassName, if field is empty return false
        pos = elem[i].className.indexOf(requiredFieldClassName);
        if (pos >= 0 && elem[i].value.length == 0) { // if required field and it's empty
            valid = false;
            elem[i].focus();
            elem[i].style.backgroundColor = "#fdd";
            break;
        }
    }

    return valid;
} // validateForm

// Skriv til innerHTML i elementID (AJAX callback pointer/response handler)
var loadContent = function(elementID) {
    return function (data) {
        document.getElementById(elementID).innerHTML = data;
    }
};

function getMyWindowDotLocationStuff() {
    var myHost = window.location.host;
    var myHref = window.location.href;
    var myPathName = window.location.pathname;
    var myfileName = window.location.href.substring(
                        window.location.href.lastIndexOf("/") + 1,
                        window.location.href.length);
    alert('myHost is:\n' + myHost + '\n\n myHref is:\n ' + myHref +
        '\n\n myPathName is:\n ' + myPathName + '\n\n myfileName is:\n ' +
        myfileName);
}

// Loginpanel-animasjon (jQuery)
$(document).ready(function(){
    $(".loginSwitch").click(function(){
        $("#loginpanel").slideToggle("slow");
    });
});

// Userhome-accordion
jQuery(document).ready(function(){
    $('#accordion .head').click(function() {
        $(this).next().toggle('fade');
        return false;
    }).next().hide();
});

function showLoadingImg(elementID) {
    var location = document.getElementById(elementID);
    location.innerHTML = '<div style="width:100%;height:100%;text-align:center;display:block;position:absolute;left:0;top:200px"><img src="public_html/img/layout/38.gif" alt="Loading..." /></div>';
}

// e.g. updateContent('reporthandler.php', this, 'content');
function updateContent(handler, inputElement, elementID) {
    var input    = inputElement.value;
    //var location = document.getElementById(elementID);
    ajaxReq(handler, input, loadContent(elementID));
    //location.innerHTML = '';
}

function parseFormToJSONObject(formname) {
    var form = document.forms[formname];
    var elem = form.elements;
    
    var jsonobj    = {};
    var fieldvalue = null;
    
    for (var i = 0; i < elem.length; i++) {
        switch(elem[i].type) {
            case 'checkbox': case 'radio':
                if (elem[i].checked) fieldvalue = elem[i].value;
            default:fieldvalue = elem[i].value;
        } // switch
        
        jsonobj[elem[i].name] = encodeURIComponent(fieldvalue);
    } // for
    
    return jsonobj;
} // formToJSON

function JSONtoString(jsonobject)
{
	
}

function writeArrayToDb(arrayOfJSONObj, typeofobj, callback)
{
	// FIXME - håndter multidimensjonale arrays
	var parameters;
	for (var i = 0; i < arrayOfJSONObj.length; i++) {
		parameters = 'strJSON=' + encodeURIComponent(arrayOfJSONObj[i]) + '&typeofobj=' + typeofobj + '&action=c';
		ajaxReq('lib/jsonparser.php', parameters, callback);
	}
}

function parseFormToJSONString(formname)
{
	var form	= document.forms[formname];
	var elem	= form.elements;
	var name    = null;
	var value   = null;
	var strJSON = '{';

	for (var i = 0; i < elem.length; i++) {
		name = elem[i].name;
		
		switch(elem[i].type) {
			case 'checkbox':
			case 'radio':
				if (elem[i].checked) {
					value = elem[i].value;
				} else {
					name  = null;
					value = null;
				}
			default:
				value = elem[i].value;
		}
		strJSON += (name != null)
				? '\"' + name + '\" : \"' + value + '\",'
				: '';
	}
	
	strJSON  = strJSON.slice(0, -1); // remove trailing comma
	strJSON += '}';
	return strJSON;
} // parseFormToJSONString

function sendFormToDbTable(formname, typeofobj, callback)
{
	// retrieve and encode JSON string from form
	var strJSON	   = parseFormToJSONString(formname);
	// create URL parameters
	var parameters = 'strJSON=' + strJSON + '&typeofobj=' + typeofobj + '&action=c';
	ajaxReq('lib/jsonparser.php', parameters, callback);
} // sendFormToDbTable

// Delete JSON object from database
function deleteJSONFromDb(strJSON, typeofobj)
{
	var parameters = "strJSON=" + encodeURIComponent(strJSON) + "&typeofobj=" + typeofobj + "&action=d";
	ajaxReq("lib/jsonparser.php", parameters, reloadPage());
}

// trim leading, trailing and multiple spaces from string
function trim(s)
{
	s = s.replace(/(^\s*)|(\s*$)/gi,"");
	s = s.replace(/[ ]{2,}/gi," ");
	s = s.replace(/\n /,"\n");
	return s;
}

// split string by comma, create tag objects (JSON)
function createTagJSONObjs(str)
{
	var tagsarray = str.split(',');
	for (var i = 0; i < tagsarray.length; i++) {
		tagsarray[i] = '{\"tagname\": \"' + trim(tagsarray[i]) + '\"}';
	}
	return tagsarray;
}

function splitStringToArray(str, delimiter)
{
	var array = str.split(delimiter);
	return array;
}

function combineTagsTalent(tagsarray, talentinitials)
{
	for (var i = 0; i < tagsarray.length; i++) {
		tagsarray[i] = '{\"initialer\": \"' + talentinitials + '\", \"tagname\": ' + tagsarray[i] + '\"}';
	}
	return tagsarray;
}

function reloadPage()
{
	window.location.reload();
}

// Usage: window.onload = initializeAjaxUpload;
// In file including the upload form and target iframe
function initializeAjaxUpload(srcFormID, targetIframeID) {
	var uploadform = document.getElementById(srcFormID);

	uploadform.onsubmit = function() {
		uploadform.target = targetIframeID; // iframe
	};
}

// Convert date to timestamp (for MySQL database)
function toTimestamp(year, month, day) {
	var date = new Date(Date.UTC(year, month - 1, day));
	return date.getTime() / 1000;
}

// Show live preview of article/comment
function preview(sourceID, destinationID) {
	var source     = document.getElementById(sourceID);
	var dest       = document.getElementById(destinationID);
	dest.innerHTML = source.value;
}
