if(window.HTMLElement){
HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
    var r=this.ownerDocument.createRange();
    r.setStartBefore(this);
    var df=r.createContextualFragment(sHTML);
    this.parentNode.replaceChild(df,this);
    return sHTML;
    });
HTMLElement.prototype.__defineGetter__("outerHTML",function(){
    var attr;
    var attrs=this.attributes;
    var str="<"+this.tagName;
    for(var i=0;i<attrs.length;i++){
        attr=attrs[i];
        if(attr.specified)
            str+=" "+attr.name+'="'+attr.value+'"';
        }
    return str+">"+this.innerHTML+"</"+this.tagName+">";
    });
}

Array.prototype.getCitySet=function(zipstring,returnzipstring){
	var rzipstring = (arguments.length>1)?arguments[1]:"";
	var item = function(params,index){
		return {CityCode: params[0], CityName: params[1],CityNameEN: params[2],CityNameCN: params[3], SonCitySet: function(){		
			var oneset = rzipstring.split("&");
			if ( rzipstring.length==0 || oneset.length-1<index ) return [];
			var sonArray = new Array;
			sonArray.getCitySet(oneset[index]);
			return sonArray;
		}
	};};
	this.unZipModel( zipstring, item);
}

Array.prototype.getAirCorpSet=function(zipstring,returnzipstring){
	var rzipstring = (arguments.length>1)?arguments[1]:"";
	var item = function(params,index){
		return {Corp: params[0], CorpName: params[1], SonCitySet: function(){		
			var oneset = rzipstring.split("&");
			if ( rzipstring.length==0 || oneset.length-1<index ) return [];
			var sonArray = new Array;
			sonArray.getAirCorpSet(oneset[index]);
			return sonArray;
		}
	};};
	this.unZipModel( zipstring, item);
}

var DeliveryDateRule=function(zipstring){
	var deliveryparams=zipstring.split("&");
	
	//this.ValidWeekDay=deliveryparams[0];
	var WeekEndDay=deliveryparams[1];
	this.GetTimeField=function(weekday)	{
		var timeField=new Array;
		if ( WeekEndDay.indexOf(weekday)>-1)
			timeField.getTimeField(deliveryparams[3]);
		else
			timeField.getTimeField(deliveryparams[2]);
		return timeField;
	};
}

Array.prototype.getTimeField=function(zipstring){
	var item = function(params,index){
		return {TimeId: params[0], TimeValue: params[1]};};
	this.unZipModel( zipstring, item);
}
Array.prototype.getDeliverSet=function(zipstring){
	var item = function(params,index){
		return {AreaId: params[0], Fee: params[1], TimeLimit: params[2], AreaName: params[3], LastDeliverTime: params[4],  DeliverNote: params[5], AllValue:params.join(",")};};
	this.unZipModel( zipstring, item);
}
Array.prototype.getFlightSet=function(ItiSetTag,zipstring){
	var item = function(params,index){return {Id: params[0], Price: params[1], StartTime: params[2], ArriveTime: params[3], ClassType: params[4], AirCode:params[5], PlaneType:params[6], AdultType:params[7], StopType:params[8]
	,PriceEnable:true, TimeEnable: params[9]=="True", ClassTypeEnable: params[10]=="True", AirCodeEnable:true, PlaneTypeEnable:true, AdultTypeEnable:true, StopTypeEnable:true, ArriveDate: params[11]
	,SrcAirPort: params[12], SrcAirPortEnable:true, DestAirPort: params[13], DestAirPortEnable:true};};
	this.unZipModel( zipstring, item);
	this.GetValueByName=function(index, fieldname){
		if ( fieldname=="Price") return this[index].Price;
		else if ( fieldname=="StartTime") return this[index].StartTime;
		else if ( fieldname=="ArriveTime") return this[index].ArriveTime;
		else if ( fieldname=="ClassType") return this[index].ClassType;
		else if ( fieldname=="AirCode") return this[index].AirCode;
		else if ( fieldname=="PlaneType") return this[index].PlaneType;
		else if ( fieldname=="AdultType") return this[index].AdultType;
		else if ( fieldname=="StopType") return this[index].StopType;
		else if ( fieldname=="ArriveDate") return this[index].ArriveDate;
		else if ( fieldname=="SrcAirPort") return this[index].SrcAirPort;
		else if ( fieldname=="DestAirPort") return this[index].DestAirPort;
		else return 0;
	}
	this.SetValueByName=function(index, fieldname, value){
		if ( fieldname=="Price") this[index].PriceEnable=value;
		else if ( fieldname=="StartTime" || fieldname=="ArriveTime") this[index].TimeEnable=value;
		else if ( fieldname=="ClassType") this[index].ClassTypeEnable=value;
		else if ( fieldname=="AirCode") this[index].AirCodeEnable=value;
		else if ( fieldname=="PlaneType") this[index].PlaneTypeEnable=value;
		else if ( fieldname=="AdultType") this[index].AdultTypeEnable=value;
		else if ( fieldname=="StopType") this[index].StopTypeEnable=value;
		else if ( fieldname=="SrcAirPort") this[index].SrcAirPortEnable=value;
		else if ( fieldname=="DestAirPort") this[index].DestAirPortEnable=value;
	}	
	this.IsEnable=function(index)
	{
		return this[index].PriceEnable && this[index].TimeEnable && this[index].ClassTypeEnable && this[index].AirCodeEnable && this[index].PlaneTypeEnable && this[index].AdultTypeEnable && this[index].StopTypeEnable && this[index].SrcAirPortEnable && this[index].DestAirPortEnable;
	}
	this.HasEnable=function(){
		for(var i=0;i<this.length;i++){
			if ( this.IsEnable(i)) return true
		}
		return false;
	}	
	
	this.EnableCount=function(){
		var count = 0;
		for(var i=0;i<this.length;i++){
			if ( this.IsEnable(i)) count ++;
		}
		return count;
	}	
	
}
Array.prototype.IsEnable=function(){
	for(var i=0;i<this.length;i++){
		if ( this[i].IsEnable) return true
	}
	return false;
}
Array.prototype.ReDisplay=function(divName){

var HtmlString = "" ;
for(var i=0;i<this.length;i++)
{

	var obj = document.getElementById(divName+"_Iti_" +this[i].Id);
	if(obj != null )
	{
		HtmlString += obj.outerHTML + "<br>";
	}

//HtmlString += document.getElementById(divName+"_Iti_" +this[i].Id).outerHTML + "<br>";



}	

var Span = document.getElementById("SearchResult1_"+divName +"Itinerary1_"+divName+"Repeated");
if(Span != null)
{
Span.innerHTML = HtmlString;
}

}


/*
Array.prototype.sortBy=function(sortField, orderBy){
		var order = (arguments.length>1)?arguments[1]:"asce";
	    var temp;
		for(var i=0; i<this.length; i++) {
			var k = i;
			for(var j=i+1; j<this.length; j++) {
				fieldValue0 = setDataType( this.GetValueByName(j, sortField ));
				fieldValue1 = setDataType( this.GetValueByName(k, sortField ));
				if ( order=="desc"){
					if( fieldValue0 > fieldValue1)  
						k=j;
				}
				else{
					if( fieldValue0 < fieldValue1 )  
						k=j;
				}
			}
			if (k != i){
				temp = this[i];
				this[i] = this[k];
				this[k] = temp;
			}
		}
}	

*/

Array.prototype.sortBy=function(sortField, orderBy, sortField2){
		var order = (arguments.length>1)?arguments[1]:"asce";
	    var temp;
	    
	    if(sortField == "Price")
	    { 
			sortField2 ="StartTime";
	    }
	    else
	    {
	    sortField2 ="Price";
	    }
		for(var i=0; i<this.length; i++) {
			var k = i;
			for(var j=i+1; j<this.length; j++) {
			
				fieldValue0 = setDataType( this.GetValueByName(j, sortField ));
				fieldValue1 = setDataType( this.GetValueByName(k, sortField ));
				
				fieldValue0_2 = setDataType( this.GetValueByName(j, sortField2 ));
				fieldValue1_2 = setDataType( this.GetValueByName(k, sortField2 ));
				
				
				if ( order=="desc"){
						if( fieldValue0 > fieldValue1)
						{  
							k=j;
						}
						if( fieldValue0 == fieldValue1)
						{
							if( fieldValue0_2 < fieldValue1_2) k=j;
						}
				}
				else{
					if( fieldValue0 < fieldValue1 )  
						{
							k=j;
						}
						if( fieldValue0 == fieldValue1)
						{
							if( fieldValue0_2 < fieldValue1_2) k=j;
						}
					
				}
			}
			if (k != i){
				temp = this[i];
				this[i] = this[k];
				this[k] = temp;
			}
		}
}	


Array.prototype.filter=function(filtdelegate, filtField, filtValue1, filtValue2){
		var valueStart = filtValue1==""?0:filtValue1;
		var valueEnd = filtValue2==""?100000:filtValue2;

		for(var i=0; i<this.length; i++) {
			fieldValue =  parseInt(this.GetValueByName(i, filtField ),10);
			var filtresult=(fieldValue>=parseInt( valueStart, 10) && fieldValue<=parseInt(valueEnd, 10));
			this.SetValueByName( i, filtField, filtresult);
			filtresult = this.IsEnable(i);
			if (filtdelegate!=null) filtdelegate(this[i].Id, filtresult);
		}
}

Array.prototype.equalFilter=function(filtdelegate, filtField, filtValue, checked){
		for(var i=0; i<this.length; i++) {
			var filtresult;
			if ( filtValue=="" ) filtresult = true;
			else{
				fieldValue = this.GetValueByName(i, filtField );
				filtresult=(fieldValue==filtValue);
			}
			if ( filtresult )
			{
				filtresult = checked;
				this.SetValueByName( i, filtField, filtresult);
				filtresult = this.IsEnable(i);
				if (filtdelegate!=null) filtdelegate(this[i].Id, filtresult);
			}
		}
}

Array.prototype.equalRepulsionFilter=function(filtdelegate, filtField, filtValue){
		for(var i=0; i<this.length; i++) {
			var filtresult;
			if ( filtValue=="" ) filtresult = true;
			else{
				fieldValue = this.GetValueByName(i, filtField );
				
				if ( filtField=="ClassType" )
					filtresult=((parseInt(fieldValue,10)|parseInt(filtValue,10))==parseInt(fieldValue,10));		 
				else filtresult=(fieldValue==filtValue);								  
			}
			this.SetValueByName( i, filtField, filtresult);
			filtresult = this.IsEnable(i);
			if (filtdelegate!=null) filtdelegate(this[i].Id, filtresult);
		}
}

Array.prototype.unZipModel=function( zipstring, iterator){
	var pairs = zipstring.split(";");
	for ( var i=0; i<pairs.length; i++)
	{
		var pair = pairs[i].split("|");
		this.push(iterator(pair,i));
	}
}
function SelectSort(arr) { //Ñ¡ÔñÅÅÐò->Ö±½ÓÑ¡ÔñÅÅÐò
  var st = new Date();
  var temp;
  for(var i=0; i<arr.length; i++) {
   var k = i;
   for(var j=i+1; j<arr.length; j++) {
    if((setDataType(arr[j])) < (setDataType(arr[k])))
     k = j;
   }
   if (k != i){
    temp = arr[i];
    arr[i] = arr[k];
    arr[k] = temp;
   }
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }

function setDataType(cValue)
{
    if (isNaN(cValue))
    {
		cValue = cValue.toUpperCase();
		return cValue;
    }
	else
    {
		var myNum;
		myNum = String.fromCharCode(48 + cValue.length) + cValue;
		return myNum;
    }
}
