﻿	/* ***********************************************
	*
	*
	*	Filename: corelib.js
	*	Version: 2.0
	*	Build: 20100601
	*	Author: Martin N. Nikolaev
	*	Copyright: MAREdesign IT Services, 
	*	Contact: www.maredesign.net
	*
	*
	*********************************************** */

	/* ***********************************************
	*
	*	General
	*
	*********************************************** */
	
	function mGoTo(mVar){
	
		location.href=mVar;
	
	}
	
	
	/* ***********************************************
	*
	*	UserAgent recognition
	*
	*********************************************** */
	
	
	function mGetUserAgent(mVar){
		
		//MSIE,Gecko,KHTML,Opera
		
		if(navigator.userAgent.indexOf(mVar)==-1){
			return false;
		}
		else{
			return true;
		}
	
	}
	
	
	/* ***********************************************
	*
	*	JS enhancements
	*
	*********************************************** */
	
	
	String.prototype.trim= function(){
	    return this.replace(/^\s+|\s+$/g, "");
	}
	
	String.prototype.trimLeft= function(){
	    return this.replace(/^\s+/g, "");
	}
	
	String.prototype.trimRight= function(){
	    return this.replace(/\s+$/g, "");
	}

	String.prototype.removeWhitespaces= function(){
	    return this.replace(/\s+/g, "");
	}
	
	
	
	Object.prototype.toHex = function (){
		return this.toString(16).toUpperCase();
	}
	
	Object.prototype.toDec = function (){
		return parseInt(this,16);
	}
	
	
	
	Array.prototype.isUnique = function (x){
		for (var i = 0; i < this.length; i++){
			if (this[i] == x) return false;}
		return true;
	}
	
	
	
	/* ***********************************************
	*
	*	DOM related
	*
	*********************************************** */
	
	var d=document;
	
	d.get=function(mId){
		return this.getElementById(mId);
	}
	
	/*
	
	BECAUSE MSIE REALLY SUCKS THE FOLLOWING FUNCS
	WILL PARSE FROM THE ROOT 
	
	IF MSIE COULD HANDLE  "Element.prototype"
	ONLY THE SPECIFIED NODE WOULD HAVE BEEN PARSED
	BUT NO, WE LIKE IT THE INEFFICIENT WAY!
	
	GOD BLESS MSIE!
		
	*/
	
	d.getByName=function(mVar){
		
		var mElements=this.getElementsByTagName('*');
		var mResult=new Array();
		
		for(i=0; i<mElements.length; i++){
			if(mElements[i].getAttribute("name")){
				if(mElements[i].getAttribute("name")==mVar){
					mResult.push(mElements[i]);
				}
			}
		}
		return mResult;
	}
	
	d.getByTag=function(mVar){
		return this.getElementsByTagName(mVar);
	}
	
	d.getByClass=function(mVar){
	
		var mElements=this.getElementsByTagName('*');
		var mResult=new Array();
		
		for(i=0; i<mElements.length; i++){
			if(mElements[i].getAttribute("class")){
				if(mElements[i].getAttribute("class")==mVar){
					mResult.push(mElements[i]);
				}
			}
		}
		return mResult;
	
	}
	
	
	/* ***********************************************
	*
	*	AJAX related
	*
	*********************************************** */
	function mInfoAvailable(mVar){
		if(mVar[0].info){
			alert(mVar[0].info);
			return true;
		}
		return false;
	}
	
	function mErrorAvailable(mVar){
		if(mVar[0].error){
			alert("Error "+mVar[0].errorNumber+"\r\n"+mVar[0].errorDescription);
			return true;
		}
		return false;
	}
	
	
	
	function mHandleStateChanges(){
		
		switch(this.readyState){
			case 4:	
				
				clearTimeout(this.mTimer); 
				if(this.status ==200) {
					mResponse = this.responseText;
					var mJSO=new Function("return " + mResponse)();
					try{
						//if(mJSO.length>0){
							this.mCallbackFunction(mJSO);	
						//}
					}
					catch(e){}
				}
				else {
					alert("HTTP Status"+this.status);
				}
				return false;
			break;
		}
		
	}
	
	function mPostRequest(mUrl, mData,mCallback){
		
		if(arguments.length != 3){
			return false;
		}
		
		var mHttpVars=new String();
		for(var i in mData){
			if(typeof mData[i] == "string"){
				mHttpVars += i+"="+encodeURIComponent(mData[i])+"&";
			}
		}
		mHttpVars=mHttpVars.substr(0,mHttpVars.length-1);
		
		var mResponse=new String();
		var mRequest = new XMLHttpRequest();
		
		mRequest.open("POST", mUrl, true);
		mRequest.setRequestHeader("Method","POST "+mUrl + " HTTP/1.1");
		mRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		mRequest.mCallbackFunction=mCallback;
		mRequest.onreadystatechange = mHandleStateChanges;
		mRequest.mTimer=setTimeout(function() {mRequest.abort(); hideLoading(); alert("TIMEOUT"); }, 15000);
		mRequest.send(mHttpVars);
		
	}
	
	
	
